psharedptr.h
Go to the documentation of this file.
/*
* psharedptr.h
*
* SharedPtr template
*
* Portable Windows Library
*
* Copyright (C) 2004 Post Increment
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is Portable Windows Library.
*
* The Initial Developer of the Original Code is Post Increment
*
* Contributor(s): ______________________________________.
*
* $Revision: 24177 $
* $Author: rjongbloed $
* $Date: 2010-04-05 06:52:04 -0500 (Mon, 05 Apr 2010) $
*/
#ifndef PTLIB_SHAREDPTR_H
#define PTLIB_SHAREDPTR_H
#ifdef P_USE_PRAGMA
#pragma interface
#endif
#include <ptlib.h>
#include <memory>
template <class T>
class PSharedPtr : public PContainer
{
PCLASSINFO(PSharedPtr, PContainer);
public:
typedef T element_type;
PSharedPtr(element_type * p = NULL)
{ ptr = p; }
PSharedPtr(const PSharedPtr & c)
: PContainer(c)
{ CopyContents(c); }
PSharedPtr(std::auto_ptr<element_type> & v)
{ ptr = v.release(); }
PSharedPtr & operator=(const PSharedPtr & c)
{ AssignContents(c); return *this; }
virtual ~PSharedPtr()
{ Destruct(); }
virtual PBoolean MakeUnique()
{ if (PContainer::MakeUnique()) return true; CloneContents(this); return false; }
PBoolean SetSize(PINDEX)
{ return false; }
T * Get() const
{ return ptr; }
void Reset() const
{ AssignContents(PSharedPtr()); }
T & operator*() const
{ return *ptr; }
T * operator->() const
{ return ptr; }
protected:
PSharedPtr(int dummy, const PSharedPtr * c)
: PContainer(dummy, c)
{ CloneContents(c); }
void AssignContents(const PContainer & c)
{ PContainer::AssignContents(c); CopyContents((const PSharedPtr &)c); }
void DestroyContents()
{ delete(ptr); }
void CloneContents(const PContainer * src)
{ ptr = new element_type(*((const PSharedPtr *)src)->ptr); }
void CopyContents(const PContainer & c)
{ ptr = ((const PSharedPtr &)c).ptr; }
protected:
T * ptr;
};
#endif // PTLIB_SHAREDPTR_H
// End Of File ///////////////////////////////////////////////////////////////
PContainer::MakeUnique
virtual PBoolean MakeUnique()
Make this instance to be the one and only reference to the container contents.
PSharedPtr::PSharedPtr
PSharedPtr(std::auto_ptr< element_type > &v)
Definition: psharedptr.h:63
PSharedPtr::DestroyContents
void DestroyContents()
Destroy the container contents.
Definition: psharedptr.h:99
PContainer::Destruct
void Destruct()
Internal function called from container destructors.
PSharedPtr::SetSize
PBoolean SetSize(PINDEX)
Set the new current size of the container.
Definition: psharedptr.h:75
PSharedPtr::ptr
T * ptr
Definition: psharedptr.h:109
PSharedPtr::PSharedPtr
PSharedPtr(const PSharedPtr &c)
Definition: psharedptr.h:59
PSharedPtr::MakeUnique
virtual PBoolean MakeUnique()
Make this instance to be the one and only reference to the container contents.
Definition: psharedptr.h:72
PSharedPtr::Reset
void Reset() const
Definition: psharedptr.h:81
PSharedPtr::operator=
PSharedPtr & operator=(const PSharedPtr &c)
Definition: psharedptr.h:66
PBoolean
BOOL PBoolean
Definition: object.h:102
PSharedPtr::Get
T * Get() const
Definition: psharedptr.h:78
PContainer::AssignContents
virtual void AssignContents(const PContainer &c)
Copy the container contents.
PSharedPtr::PSharedPtr
PSharedPtr(element_type *p=NULL)
Definition: psharedptr.h:56
PSharedPtr::CopyContents
void CopyContents(const PContainer &c)
Definition: psharedptr.h:105
PContainer
Abstract class to embody the base functionality of a container.
Definition: contain.h:104
PSharedPtr::operator*
T & operator*() const
Definition: psharedptr.h:84
PSharedPtr::CloneContents
void CloneContents(const PContainer *src)
Definition: psharedptr.h:102
PSharedPtr::PSharedPtr
PSharedPtr(int dummy, const PSharedPtr *c)
Definition: psharedptr.h:92
PSharedPtr::operator->
T * operator->() const
Definition: psharedptr.h:87
PSharedPtr::~PSharedPtr
virtual ~PSharedPtr()
Definition: psharedptr.h:69
PSharedPtr::element_type
T element_type
Definition: psharedptr.h:54
PSharedPtr::AssignContents
void AssignContents(const PContainer &c)
Copy the container contents.
Definition: psharedptr.h:96
PSharedPtr
These templates implement an pointner class with an integral reference count based on the PContainer ...
Definition: psharedptr.h:50