提交 ab9b0922 编写于 作者: 邹晓航

ref

上级 d31d3df7
......@@ -10,9 +10,12 @@ namespace TinySTL{
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;
explicit ref_t(T *p = nullptr): ncount_(0), data_(p){
if (data_)
ncount_ = 1;
}
ref_t(const ref_t&) = delete;
ref_t& operator = (const ref_t&) = delete;
size_t count()const{ return ncount_.load(); }
T *get_data()const{ return data_; }
......@@ -36,6 +39,14 @@ namespace TinySTL{
return t;
}
};
template<class T>
bool operator ==(const ref_t<T>& lhs, const ref_t<T>& rhs){
return lhs.get_data() == rhs.get_data();
}
template<class T>
bool operator !=(const ref_t<T>& lhs, const ref_t<T>& rhs){
return !(lhs == rhs);
}
}
}
......
#include "RefTest.h"
namespace TinySTL{
namespace RefTest{
void testCaseRef(){
ref_t<int> r1;
assert(r1.count() == 0);
assert(r1.get_data() == nullptr);
int n = 0;
ref_t<int> r2(&n);
assert(r2.count() == 1);
assert(r2.get_data() != nullptr);
++r2;
assert(r2.count() == 2);
--r2;
assert(r2.count() == 1);
}
void testAllCases(){
testCaseRef();
}
}
}
\ No newline at end of file
#ifndef _REF_TEST_H_
#define _REF_TEST_H_
#include "../Detail/Ref.h"
#include <cassert>
namespace TinySTL{
namespace RefTest{
template<class T>
using ref_t = TinySTL::Detail::ref_t < T > ;
void testCaseRef();
void testAllCases();
}
}
#endif
\ No newline at end of file
......@@ -96,6 +96,7 @@
<ClCompile Include="Test\PairTest.cpp" />
<ClCompile Include="Test\PriorityQueueTest.cpp" />
<ClCompile Include="Test\QueueTest.cpp" />
<ClCompile Include="Test\RefTest.cpp" />
<ClCompile Include="Test\StackTest.cpp" />
<ClCompile Include="Test\StringTest.cpp" />
<ClCompile Include="Test\SuffixArrayTest.cpp" />
......@@ -146,6 +147,7 @@
<ClInclude Include="Test\PairTest.h" />
<ClInclude Include="Test\PriorityQueueTest.h" />
<ClInclude Include="Test\QueueTest.h" />
<ClInclude Include="Test\RefTest.h" />
<ClInclude Include="Test\StackTest.h" />
<ClInclude Include="Test\StringTest.h" />
<ClInclude Include="Test\SuffixArrayTest.h" />
......
......@@ -99,6 +99,9 @@
<ClCompile Include="Test\UniquePtrTest.cpp">
<Filter>Test</Filter>
</ClCompile>
<ClCompile Include="Test\RefTest.cpp">
<Filter>Test</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="TypeTraits.h">
......@@ -266,6 +269,9 @@
<ClInclude Include="Detail\Ref.h">
<Filter>Detail</Filter>
</ClInclude>
<ClInclude Include="Test\RefTest.h">
<Filter>Test</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="..\README.md" />
......
......@@ -14,6 +14,7 @@
#include "Test\PairTest.h"
#include "Test\PriorityQueueTest.h"
#include "Test\QueueTest.h"
#include "Test\RefTest.h"
#include "Test\StackTest.h"
#include "Test\StringTest.h"
#include "Test\SuffixArrayTest.h"
......@@ -36,6 +37,7 @@ int main(){
TinySTL::PairTest::testAllCases();
TinySTL::PriorityQueueTest::testAllCases();
TinySTL::QueueTest::testAllCases();
TinySTL::RefTest::testAllCases();
TinySTL::StackTest::testAllCases();
TinySTL::StringTest::testAllCases();
TinySTL::SuffixArrayTest::testAllCases();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册