00001 // @HEADER 00002 // *********************************************************************** 00003 // 00004 // Teuchos: Common Tools Package 00005 // Copyright (2004) Sandia Corporation 00006 // 00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive 00008 // license for use of this work by or on behalf of the U.S. Government. 00009 // 00010 // This library is free software; you can redistribute it and/or modify 00011 // it under the terms of the GNU Lesser General Public License as 00012 // published by the Free Software Foundation; either version 2.1 of the 00013 // License, or (at your option) any later version. 00014 // 00015 // This library is distributed in the hope that it will be useful, but 00016 // WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00018 // Lesser General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU Lesser General Public 00021 // License along with this library; if not, write to the Free Software 00022 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00023 // USA 00024 // Questions? Contact Michael A. Heroux (maherou@sandia.gov) 00025 // 00026 // *********************************************************************** 00027 // @HEADER 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 template<class T> 00036 Teuchos::RCP<T> 00037 Teuchos::rcp( const boost::shared_ptr<T> &sptr ) 00038 { 00039 if(sptr.get()) { 00040 const RCPDeleter<T> 00041 *rcpd = boost::get_deleter<RCPDeleter<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 RCP<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(),RCPDeleter<T>(rcp)); 00059 } 00060 return boost::shared_ptr<T>(); 00061 } 00062 00063 #endif // TEUCHOS_RCP_SHAREDPTR_CONVERSIONS_HPP
1.4.7