add ref
This commit is contained in:
42
TinySTL/Detail/Ref.h
Normal file
42
TinySTL/Detail/Ref.h
Normal 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
|
||||||
@@ -121,6 +121,7 @@
|
|||||||
<ClInclude Include="Detail\Deque.impl.h" />
|
<ClInclude Include="Detail\Deque.impl.h" />
|
||||||
<ClInclude Include="Detail\Graph.impl.h" />
|
<ClInclude Include="Detail\Graph.impl.h" />
|
||||||
<ClInclude Include="Detail\List.impl.h" />
|
<ClInclude Include="Detail\List.impl.h" />
|
||||||
|
<ClInclude Include="Detail\Ref.h" />
|
||||||
<ClInclude Include="Detail\Unordered_set.impl.h" />
|
<ClInclude Include="Detail\Unordered_set.impl.h" />
|
||||||
<ClInclude Include="Detail\Vector.impl.h" />
|
<ClInclude Include="Detail\Vector.impl.h" />
|
||||||
<ClInclude Include="Functional.h" />
|
<ClInclude Include="Functional.h" />
|
||||||
|
|||||||
@@ -263,6 +263,9 @@
|
|||||||
<ClInclude Include="Test\UniquePtrTest.h">
|
<ClInclude Include="Test\UniquePtrTest.h">
|
||||||
<Filter>Test</Filter>
|
<Filter>Test</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="Detail\Ref.h">
|
||||||
|
<Filter>Detail</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\README.md" />
|
<None Include="..\README.md" />
|
||||||
|
|||||||
Reference in New Issue
Block a user