MCPcopy Create free account
hub / github.com/1a1a11a/libCacheSim / spp_sptr

Class spp_sptr

libCacheSim/dataStructure/sparsepp/spp_smartptr.h:32–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30// ------------------------------------------------------------------------
31template <class T>
32class spp_sptr
33{
34public:
35 spp_sptr() : _p(0) {}
36 spp_sptr(T *p) : _p(p) { if (_p) _p->increment(); }
37 spp_sptr(const spp_sptr &o) : _p(o._p) { if (_p) _p->increment(); }
38#ifndef SPP_NO_CXX11_RVALUE_REFERENCES
39 spp_sptr(spp_sptr &&o) : _p(o._p) { o._p = (T *)0; }
40 spp_sptr& operator=(spp_sptr &&o) { this->swap(o); return *this; }
41#endif
42 ~spp_sptr() { if (_p) _p->decrement(); }
43 spp_sptr& operator=(const spp_sptr &o) { reset(o._p); return *this; }
44 T* get() const { return _p; }
45 void swap(spp_sptr &o) { T *tmp = _p; _p = o._p; o._p = tmp; }
46 void reset(const T *p = 0)
47 {
48 if (p == _p)
49 return;
50 if (_p) _p->decrement();
51 _p = (T *)p;
52 if (_p) _p->increment();
53 }
54 T* operator->() const { return const_cast<T *>(_p); }
55 bool operator!() const { return _p == 0; }
56
57private:
58 T *_p;
59};
60
61// ------------------------------------------------------------------------
62namespace std

Callers

nothing calls this directly

Calls 1

swapMethod · 0.95

Tested by

no test coverage detected