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