00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TEUCHOS_RCP_SHAREDPTR_CONVERSIONS_DECL_HPP
00030 #define TEUCHOS_RCP_SHAREDPTR_CONVERSIONS_DECL_HPP
00031
00032 #include "Teuchos_RCPDecl.hpp"
00033 #include "boost/shared_ptr.hpp"
00034
00035
00036 namespace Teuchos {
00037
00038
00054
00055
00058 template<class T>
00059 class DeallocBoostSharedPtr
00060 {
00061 public:
00063 DeallocBoostSharedPtr( const boost::shared_ptr<T> &sptr ) : sptr_(sptr) {}
00065 typedef T ptr_t;
00067 void free( T* ptr_in ) const { sptr_.reset(); }
00069 const boost::shared_ptr<T>& ptr() const { return sptr_; }
00070 private:
00071 mutable boost::shared_ptr<T> sptr_;
00072 DeallocBoostSharedPtr();
00073 };
00074
00075
00079 template<class T>
00080 class RCPDeleter
00081 {
00082 public:
00084 RCPDeleter( const RCP<T> &rcp ) : rcp_(rcp) {}
00086 typedef void result_type;
00088 typedef T * argument_type;
00090 void operator()(T * x) const { rcp_ = null; }
00092 const RCP<T>& ptr() const { return rcp_; }
00093 private:
00094 mutable RCP<T> rcp_;
00095 RCPDeleter();
00096 };
00097
00098
00107 template<class T>
00108 RCP<T> rcp( const boost::shared_ptr<T> &sptr );
00109
00110
00120 template<class T>
00121 boost::shared_ptr<T> shared_pointer( const RCP<T> &rcp );
00122
00123
00125
00126
00127 }
00128
00129
00130 namespace boost {
00131
00132
00137 template<class T> inline
00138 bool is_null( const boost::shared_ptr<T> &p )
00139 {
00140 return p.get() == 0;
00141 }
00142
00143
00148 template<class T> inline
00149 bool nonnull( const boost::shared_ptr<T> &p )
00150 {
00151 return p.get() != 0;
00152 }
00153
00154
00155 }
00156
00157
00158 #endif // TEUCHOS_RCP_SHAREDPTR_CONVERSIONS_DECL_HPP