7 #ifndef CRYPTOPP_SMARTPTR_H 8 #define CRYPTOPP_SMARTPTR_H 23 simple_ptr(T *p = NULL) : m_p(p) {}
27 *((
volatile T**)&m_p) = NULL;
46 const T& operator*()
const {
return *m_p; }
47 T& operator*() {
return *m_p; }
49 const T* operator->()
const {
return m_p; }
50 T* operator->() {
return m_p; }
52 const T*
get()
const {
return m_p; }
53 T*
get() {
return m_p; }
58 *((
volatile T**)&m_p) = NULL;
90 return (!this->m_p && !rhs.m_p) || (this->m_p && rhs.m_p && *this->m_p == *rhs.m_p);
97 this->m_p = rhs.m_p ?
new T(*rhs.m_p) : NULL;
121 T *old_p = this->m_p;
122 this->m_p = rhs.m_p ? rhs.m_p->Clone() : NULL;
143 const T& operator*()
const {
return *m_p; }
144 T& operator*() {
return *m_p; }
146 const T* operator->()
const {
return m_p; }
147 T* operator->() {
return get(); }
149 const T*
get()
const {
return m_p; }
152 void attach(
const T &p);
164 m_p->m_referenceCount = 1;
171 m_p->m_referenceCount++;
176 if (m_p && --m_p->m_referenceCount == 0)
182 if (m_p && --m_p->m_referenceCount == 0)
184 if (r.m_referenceCount == 0)
187 m_p->m_referenceCount = 1;
191 m_p =
const_cast<T *
>(&r);
192 m_p->m_referenceCount++;
198 if (m_p && m_p->m_referenceCount > 1)
200 T *temp = m_p->clone();
201 m_p->m_referenceCount--;
203 m_p->m_referenceCount = 1;
212 if (m_p && --m_p->m_referenceCount == 0)
216 m_p->m_referenceCount++;
236 : m_size(size), m_ptr(new T[m_size]) {}
240 T& operator[](
size_t index)
241 {assert(m_size && index<this->m_size);
return this->m_ptr[index];}
242 const T& operator[](
size_t index)
const 243 {assert(m_size && index<this->m_size);
return this->m_ptr[index];}
245 size_t size()
const {
return this->m_size;}
246 void resize(
size_t newSize)
248 T *newPtr =
new T[newSize];
249 for (
size_t i=0; i<this->m_size && i<newSize; i++)
250 newPtr[i] = m_ptr[i];
251 delete [] this->m_ptr;
252 this->m_size = newSize;
253 this->m_ptr = newPtr;
260 operator const void *()
const 265 operator const T *()
const 291 : m_size(size), m_ptr(new
member_ptr<T>[size]) {}
293 {
delete [] this->m_ptr;}
296 {assert(index<this->m_size);
return this->m_ptr[index];}
298 {assert(index<this->m_size);
return this->m_ptr[index];}
300 size_t size()
const {
return this->m_size;}
301 void resize(
size_t newSize)
304 for (
size_t i=0; i<this->m_size && i<newSize; i++)
305 newPtr[i].reset(this->m_ptr[i].release());
306 delete [] this->m_ptr;
307 this->m_size = newSize;
308 this->m_ptr = newPtr;
Manages resources for an array of objects.
Library configuration file.
vector_ptr(size_t size=0)
Construct an arry of T.
Pointer that overloads operator→
Reference counted pointer.
Manages resources for a single object.
A pointer which can be copied and cloned.
Manages resources for an array of objects.
vector_member_ptrs(size_t size=0)
Construct an arry of T.
Crypto++ library namespace.