42 #ifndef TEUCHOS_RCP_DECL_HPP 
   43 #define TEUCHOS_RCP_DECL_HPP 
   52 #include "Teuchos_ENull.hpp" 
   53 #include "Teuchos_NullIteratorTraits.hpp" 
   56 #ifdef REFCOUNTPTR_INLINE_FUNCS 
   57 #  define REFCOUNTPTR_INLINE inline 
   59 #  define REFCOUNTPTR_INLINE 
   64 #  define TEUCHOS_REFCOUNTPTR_ASSERT_NONNULL 
   72 template<
class T> 
class Ptr;
 
   75 enum ERCPWeakNoDealloc { RCP_WEAK_NO_DEALLOC };
 
   76 enum ERCPUndefinedWeakNoDealloc { RCP_UNDEFINED_WEAK_NO_DEALLOC };
 
   77 enum ERCPUndefinedWithDealloc { RCP_UNDEFINED_WITH_DEALLOC };
 
  502   template<
class Dealloc_T>
 
  619   inline T* 
get() 
const;
 
  783 #if defined(HAVE_TEUCHOSCORE_CXX11) && defined(HAVE_TEUCHOS_THREAD_SAFE) 
  785   inline RCP<T> create_strong_thread_safe() 
const; 
 
  822 #ifdef TEUCHOS_REFCOUNTPTR_ASSERT_NONNULL 
  859   TEUCHOS_DEPRECATED 
inline int count() 
const;
 
  887   inline explicit RCP(T* p, ERCPWeakNoDealloc);
 
  899   inline explicit RCP(T* p, ERCPUndefinedWeakNoDealloc);
 
  907   template<
class Dealloc_T>
 
  908   inline RCP(T* p, Dealloc_T dealloc, ERCPUndefinedWithDealloc,
 
  911 #ifndef DOXYGEN_COMPILE 
  915   inline T* access_private_ptr() 
const; 
 
  927   template<
class T1, 
class T2> 
inline 
  929     return p1.
get() < p2.
get();
 
  937   template<
class T1, 
class T2> 
inline 
  939     return p1.
get() < p2.
get();
 
  957   static RCP<T> getNull() { 
return null; }
 
  990   void free( T* ptr ) { 
if(ptr) 
delete ptr; }
 
 1006   void free( T* ptr ) { 
if(ptr) 
delete [] ptr; }
 
 1022 template<
class T, 
class DeleteFunctor>
 
 1028   void free( T* ptr ) { 
if(ptr) deleteFunctor_(ptr); }
 
 1030   DeleteFunctor deleteFunctor_;
 
 1039 template<
class T, 
class DeleteFunctor>
 
 1060 template<
class T, 
class DeleteHandleFunctor>
 
 1065     : deleteHandleFunctor_(deleteHandleFunctor) {}
 
 1067   void free( T* ptr ) { 
if(ptr) { T **hdl = &ptr; deleteHandleFunctor_(hdl); } }
 
 1069   DeleteHandleFunctor deleteHandleFunctor_;
 
 1078 template<
class T, 
class DeleteHandleFunctor>
 
 1094 template<
class T, 
class Embedded, 
class Dealloc>
 
 1098   typedef typename Dealloc::ptr_t ptr_t;
 
 1102     ) : embedded_(embedded), prePostDestroy_(prePostDestroy), dealloc_(dealloc)
 
 1104   void setObj( 
const Embedded &embedded ) { embedded_ = embedded; }
 
 1105   const Embedded& getObj()
 const { 
return embedded_; }
 
 1106   Embedded& getNonconstObj() { 
return embedded_; }
 
 1109       if (prePostDestroy_ == PRE_DESTROY)
 
 1110         embedded_ = Embedded();
 
 1112       if (prePostDestroy_ == POST_DESTROY)
 
 1113         embedded_ = Embedded();
 
 1127 template<
class T, 
class Embedded >
 
 1140 template<
class T, 
class Embedded >
 
 1171 template<
class T> 
inline 
 1218 template<
class T, 
class Dealloc_T> 
inline 
 1219 RCP<T> rcpWithDealloc(T* p, Dealloc_T dealloc, 
bool owns_mem=
true);
 
 1223 template<
class T, 
class Dealloc_T> 
inline 
 1224 TEUCHOS_DEPRECATED 
RCP<T> rcp( T* p, Dealloc_T dealloc, 
bool owns_mem )
 
 1226   return rcpWithDealloc(p, dealloc, owns_mem);
 
 1241 template<
class T, 
class Dealloc_T> 
inline 
 1242 RCP<T> rcpWithDeallocUndef(T* p, Dealloc_T dealloc, 
bool owns_mem=
true);
 
 1254 template<
class T> 
inline 
 1255 RCP<T> rcpFromRef(T& r);
 
 1267 template<
class T> 
inline 
 1268 RCP<T> rcpFromUndefRef(T& r);
 
 1281 template<
class T, 
class Embedded> 
inline 
 1283 rcpWithEmbeddedObjPreDestroy( T* p, 
const Embedded &embedded, 
bool owns_mem = 
true );
 
 1296 template<
class T, 
class Embedded> 
inline 
 1298 rcpWithEmbeddedObjPostDestroy( T* p, 
const Embedded &embedded, 
bool owns_mem = 
true );
 
 1312 template<
class T, 
class Embedded> 
inline 
 1314 rcpWithEmbeddedObj( T* p, 
const Embedded &embedded, 
bool owns_mem = 
true );
 
 1331 template<
class T, 
class ParentT>
 
 1332 RCP<T> rcpWithInvertedObjOwnership(
const RCP<T> &child, 
const RCP<ParentT> &parent);
 
 1349 RCP<T> rcpCloneNode(
const RCP<T> &p);
 
 1356 template<
class T> 
inline 
 1357 bool is_null( 
const RCP<T> &p );
 
 1364 template<
class T> 
inline 
 1365 bool nonnull( 
const RCP<T> &p );
 
 1372 template<
class T> 
inline 
 1373 bool operator==( 
const RCP<T> &p, ENull );
 
 1380 template<
class T> 
inline 
 1381 bool operator!=( 
const RCP<T> &p, ENull );
 
 1389 template<
class T1, 
class T2> 
inline 
 1390 bool operator==( 
const RCP<T1> &p1, 
const RCP<T2> &p2 );
 
 1398 template<
class T1, 
class T2> 
inline 
 1399 bool operator!=( 
const RCP<T1> &p1, 
const RCP<T2> &p2 );
 
 1411 template<
class T2, 
class T1> 
inline 
 1412 RCP<T2> rcp_implicit_cast(
const RCP<T1>& p1);
 
 1425 template<
class T2, 
class T1> 
inline 
 1426 RCP<T2> rcp_static_cast(
const RCP<T1>& p1);
 
 1435 template<
class T2, 
class T1> 
inline 
 1436 RCP<T2> rcp_const_cast(
const RCP<T1>& p1);
 
 1462 template<
class T2, 
class T1> 
inline 
 1463 RCP<T2> rcp_dynamic_cast(
 
 1464   const RCP<T1>& p1, 
bool throw_on_fail = 
false 
 1526 template<
class T1, 
class T2>
 
 1527 void set_extra_data( 
const T1 &extra_data, 
const std::string& name,
 
 1529   bool force_unique = 
true);
 
 1550 template<
class T1, 
class T2>
 
 1551 const T1& get_extra_data( 
const RCP<T2>& p, 
const std::string& name );
 
 1573 template<
class T1, 
class T2>
 
 1574 T1& get_nonconst_extra_data( RCP<T2>& p, 
const std::string& name );
 
 1601 template<
class T1, 
class T2>
 
 1602 Ptr<const T1> get_optional_extra_data( 
const RCP<T2>& p, 
const std::string& name );
 
 1629 template<
class T1, 
class T2>
 
 1630 Ptr<T1> get_optional_nonconst_extra_data( RCP<T2>& p, 
const std::string& name );
 
 1644 template<
class Dealloc_T, 
class T>
 
 1645 const Dealloc_T& get_dealloc( 
const RCP<T>& p );
 
 1659 template<
class Dealloc_T, 
class T>
 
 1660 Dealloc_T& get_nonconst_dealloc( 
const RCP<T>& p );
 
 1677 template<
class Dealloc_T, 
class T>
 
 1678 Ptr<const Dealloc_T> get_optional_dealloc( 
const RCP<T>& p );
 
 1695 template<
class Dealloc_T, 
class T>
 
 1696 Ptr<Dealloc_T> get_optional_nonconst_dealloc( 
const RCP<T>& p );
 
 1705 template<
class TOrig, 
class Embedded, 
class T>
 
 1706 const Embedded& getEmbeddedObj( 
const RCP<T>& p );
 
 1715 template<
class TOrig, 
class Embedded, 
class T>
 
 1716 Embedded& getNonconstEmbeddedObj( 
const RCP<T>& p );
 
 1725 template<
class TOrig, 
class Embedded, 
class T>
 
 1726 Ptr<const Embedded> getOptionalEmbeddedObj( 
const RCP<T>& p );
 
 1735 template<
class TOrig, 
class Embedded, 
class T>
 
 1736 Ptr<Embedded> getOptionalNonconstEmbeddedObj( 
const RCP<T>& p );
 
 1744 template<
class ParentT, 
class T>
 
 1756 std::ostream& operator<<( std::ostream& out, const RCP<T>& p );
 
 1762 #endif  // TEUCHOS_RCP_DECL_HPP 
~RCP()
Removes a reference to a dynamically allocated object and possibly deletes the object if owned...
RCP< const T > getConst() const 
Return an RCP<const T> version of *this. 
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL. 
DeallocFunctorHandleDelete< T, DeleteHandleFunctor > deallocFunctorHandleDelete(DeleteHandleFunctor deleteHandleFunctor)
A simple function used to create a functor deallocator object. 
void free(T *ptr)
Deallocates a pointer ptr using delete ptr (required). 
bool operator()(const RCP< T1 > p1, const RCP< T2 > p2) const 
const RCP< T > & debug_assert_not_null() const 
Calls assert_not_null() in a debug build. 
RCP< T > create_weak() const 
Create a new weak RCP object from another (strong) RCP object. 
T ptr_t
Gives the type (required) 
bool operator()(const RCP< const T1 > p1, const RCP< const T2 > p2) const 
bool has_ownership() const 
Returns true if this has ownership of object pointed to by this->get() in order to delete it...
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL. 
Deallocator subclass that Allows any functor object (including a function pointer) to be used to free...
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL. 
void swap(RCP< T > &r_ptr)
Swap the contents with some other RCP object. 
RCP< T > create_strong() const 
Create a new strong RCP object from another (weak) RCP object. 
T * get() const 
Get the raw C++ pointer to the underlying object. 
ENull
Used to initialize a RCP object to NULL using an implicit conversion! 
ERCPStrength strength() const 
Strength of the pointer. 
A deallocator class that wraps a simple value object and delegates to another deallocator object...
T * operator->() const 
Pointer (->) access to members of underlying object. 
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs...
void free(T *ptr)
Deallocates a pointer ptr using delete ptr (required). 
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs...
Policy class for deallocator that uses delete to delete a pointer which is used by RCP...
EmbeddedObjDealloc< T, Embedded, DeallocArrayDelete< T > > embeddedObjDeallocArrayDelete(const Embedded &embedded, EPrePostDestruction prePostDestroy)
Create a dealocator with an embedded object using delete []. 
T * getRawPtr() const 
Get the raw C++ pointer to the underlying object. 
TEUCHOS_DEPRECATED int count() const 
Returns strong_count() [deprecated]. 
Deallocator class that uses delete [] to delete memory allocated uisng new [] 
const RCP< T > & assert_valid_ptr() const 
If the object pointer is non-null, assert that it is still valid. 
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated. 
void set_has_ownership()
Give this and other RCP<> objects ownership of the referenced object this->get(). ...
void reset()
Reset to null. 
const RCP< T > & debug_assert_valid_ptr() const 
Calls assert_valid_ptr() in a debug build. 
Ptr< T > ptr() const 
Get a safer wrapper raw C++ pointer to the underlying object. 
Ptr< T > operator()() const 
Shorthand for ptr(). 
bool shares_resource(const RCP< T2 > &r_ptr) const 
Returns true if the smart pointers share the same underlying reference-counted object. 
T ptr_t
Gives the type (required) 
T & operator*() const 
Dereference the underlying object. 
ERCPStrength
Used to specify if the pointer is weak or strong. 
RCP< T > & operator=(const RCP< T > &r_ptr)
Copy the pointer to the referenced object and increment the reference count. 
Base traits class for getting a properly initialized null pointer. 
const RCP< T > & assert_not_null() const 
Throws NullReferenceError if this->get()==NULL, otherwise returns reference to *this. 
Ptr< T > release()
Release the ownership of the underlying dynamically allocated object. 
T ptr_t
Gives the type (required) 
EmbeddedObjDealloc< T, Embedded, DeallocDelete< T > > embeddedObjDeallocDelete(const Embedded &embedded, EPrePostDestruction prePostDestroy)
Create a dealocator with an embedded object using delete. 
bool is_valid_ptr() const 
Return if the underlying object pointer is still valid or not. 
Handle class that manages the RCPNode's reference counting. 
RCP< ParentT > getInvertedObjOwnershipParent(const RCP< T > &invertedChild)
Get the parent back from an inverted ownership RCP. 
EPrePostDestruction
Used to specify a pre or post destruction of extra data. 
Policy class for deallocator for non-owned RCPs. 
Deallocator subclass that Allows any functor object (including a function pointer) to be used to free...
DeallocFunctorDelete< T, DeleteFunctor > deallocFunctorDelete(DeleteFunctor deleteFunctor)
A simple function used to create a functor deallocator object. 
Smart reference counting pointer class for automatic garbage collection. 
Reference-counted pointer node classes. 
void free(T *ptr)
Deallocates a pointer ptr using delete [] ptr (required). 
int strong_count() const 
Return the number of active RCP<> objects that have a "strong" reference to the underlying reference-...
int weak_count() const 
Return the number of active RCP<> objects that have a "weak" reference to the underlying reference-co...
int total_count() const 
Total count (strong_count() + weak_count()). 
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
bool is_null() const 
Returns true if the underlying pointer is null.