This commit is contained in:
邹晓航
2015-03-13 17:12:47 +08:00
parent 3c6fa24a6a
commit d31d3df72e
3 changed files with 46 additions and 0 deletions

42
TinySTL/Detail/Ref.h Normal file
View File

@@ -0,0 +1,42 @@
#ifndef _REF_H_
#define _REF_H_
#include <atomic>
namespace TinySTL{
namespace Detail{
template<class T>
struct ref_t{
std::atomic<size_t> ncount_;
T *data_;
explicit ref_t(size_t n = 0, T *p = nullptr) :ncount_(n), data_(p){}
ref_t(const ref_t&) = default;
ref_t& operator = (const ref_t&) = default;
size_t count()const{ return ncount_.load(); }
T *get_data()const{ return data_; }
ref_t& operator ++(){
++ncount_;
return *this;
}
ref_t operator ++(int){
auto t = *this;
++*this;
return t;
}
ref_t& operator --(){
--ncount_;
return *this;
}
ref_t operator --(int){
auto t = *this;
--*this;
return t;
}
};
}
}
#endif

View File

@@ -121,6 +121,7 @@
<ClInclude Include="Detail\Deque.impl.h" />
<ClInclude Include="Detail\Graph.impl.h" />
<ClInclude Include="Detail\List.impl.h" />
<ClInclude Include="Detail\Ref.h" />
<ClInclude Include="Detail\Unordered_set.impl.h" />
<ClInclude Include="Detail\Vector.impl.h" />
<ClInclude Include="Functional.h" />

View File

@@ -263,6 +263,9 @@
<ClInclude Include="Test\UniquePtrTest.h">
<Filter>Test</Filter>
</ClInclude>
<ClInclude Include="Detail\Ref.h">
<Filter>Detail</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\README.md" />