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_REFCOUNTPTR_SHAREDPTR_CONVERSIONS_H
00030 #define TEUCHOS_REFCOUNTPTR_SHAREDPTR_CONVERSIONS_H
00031
00032 #include "Teuchos_RefCountPtrBoostSharedPtrConversionsDecl.hpp"
00033 #include "Teuchos_RefCountPtr.hpp"
00034
00035 template<class T>
00036 Teuchos::RefCountPtr<T>
00037 Teuchos::rcp( const boost::shared_ptr<T> &sptr )
00038 {
00039 if(sptr.get()) {
00040 const RefCountPtrDeleter<T>
00041 *rcpd = boost::get_deleter<RefCountPtrDeleter<T> >(sptr);
00042 if(rcpd)
00043 return rcpd->ptr();
00044 return rcp(sptr.get(),DeallocBoostSharedPtr<T>(sptr),true);
00045 }
00046 return null;
00047 }
00048
00049 template<class T>
00050 boost::shared_ptr<T>
00051 Teuchos::shared_pointer( const RefCountPtr<T> &rcp )
00052 {
00053 if(rcp.get()) {
00054 const DeallocBoostSharedPtr<T>
00055 *dbsp = get_optional_dealloc<DeallocBoostSharedPtr<T> >(rcp);
00056 if(dbsp)
00057 return dbsp->ptr();
00058 return boost::shared_ptr<T>(rcp.get(),RefCountPtrDeleter<T>(rcp));
00059 }
00060 return boost::shared_ptr<T>();
00061 }
00062
00063 #endif // TEUCHOS_REFCOUNTPTR_SHAREDPTR_CONVERSIONS_H