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\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" />
|
||||
|
||||
@@ -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" />
|
||||
|
||||
Reference in New Issue
Block a user