Teuchos - Trilinos Tools Package
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
core
src
Teuchos_RCPBoostSharedPtrConversions.hpp
1
// @HEADER
2
// ***********************************************************************
3
//
4
// Teuchos: Common Tools Package
5
// Copyright (2004) Sandia Corporation
6
//
7
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8
// license for use of this work by or on behalf of the U.S. Government.
9
//
10
// Redistribution and use in source and binary forms, with or without
11
// modification, are permitted provided that the following conditions are
12
// met:
13
//
14
// 1. Redistributions of source code must retain the above copyright
15
// notice, this list of conditions and the following disclaimer.
16
//
17
// 2. Redistributions in binary form must reproduce the above copyright
18
// notice, this list of conditions and the following disclaimer in the
19
// documentation and/or other materials provided with the distribution.
20
//
21
// 3. Neither the name of the Corporation nor the names of the
22
// contributors may be used to endorse or promote products derived from
23
// this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
//
37
// Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38
//
39
// ***********************************************************************
40
// @HEADER
41
42
#ifndef TEUCHOS_RCP_BOOST_SHAREDPTR_CONVERSIONS_HPP
43
#define TEUCHOS_RCP_BOOST_SHAREDPTR_CONVERSIONS_HPP
44
45
#include "Teuchos_RCPBoostSharedPtrConversionsDecl.hpp"
46
#include "
Teuchos_RCP.hpp
"
47
48
49
template
<
class
T>
50
Teuchos::RCP<T>
51
Teuchos::rcp
(
const
boost::shared_ptr<T> &sptr )
52
{
53
if
(
nonnull
(sptr)) {
54
// First, see if the RCP is in the shared_ptr deleter object
55
const
RCPDeleter<T>
56
*rcpd = boost::get_deleter<RCPDeleter<T> >(sptr);
57
if
(rcpd) {
58
return
rcpd->ptr();
59
}
60
#ifdef TEUCHOS_DEBUG
61
// Second, see if the an RCP node pointing to this type already exists
62
// from being wrapped already from a prior call to this function where the
63
// add_new_RCPNode(...) function could have been called already!.
64
RCPNode* existingRCPNode = RCPNodeTracer::getExistingRCPNode(sptr.get());
65
if
(existingRCPNode) {
66
return
RCP<T>(sptr.get(), RCPNodeHandle(existingRCPNode, RCP_STRONG,
false
));
67
}
68
#endif
69
// Lastly, we just create a new RCP and RCPNode ...
70
return
rcpWithDealloc
(sptr.get(), DeallocBoostSharedPtr<T>(sptr),
true
);
71
}
72
return
null;
73
}
74
75
76
template
<
class
T>
77
boost::shared_ptr<T>
78
Teuchos::shared_pointer
(
const
RCP<T> &rcp )
79
{
80
if
(
nonnull
(rcp)) {
81
Ptr<const DeallocBoostSharedPtr<T> >
82
dbsp = get_optional_dealloc<DeallocBoostSharedPtr<T> >(
rcp
);
83
if
(
nonnull
(dbsp))
84
return
dbsp->ptr();
85
return
boost::shared_ptr<T>(
rcp
.get(), RCPDeleter<T>(rcp));
86
}
87
return
boost::shared_ptr<T>();
88
}
89
90
91
#endif
// TEUCHOS_RCP_BOOST_SHAREDPTR_CONVERSIONS_HPP
Teuchos_RCP.hpp
Reference-counted pointer class and non-member templated function implementations.
Teuchos::RCP
Smart reference counting pointer class for automatic garbage collection.
Definition
Teuchos_RCPDecl.hpp:429
Teuchos::RCP::rcpWithDealloc
RCP< T > rcpWithDealloc(T *p, Dealloc_T dealloc, bool owns_mem=true)
Initialize from a raw pointer with a deallocation policy.
Teuchos::RCP::shared_pointer
boost::shared_ptr< T > shared_pointer(const RCP< T > &rcp)
Conversion function that takes in a Teuchos::RCP object and spits out a boost::shared_ptr object.
boost::nonnull
bool nonnull(const boost::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
Definition
Teuchos_RCPBoostSharedPtrConversionsDecl.hpp:165
Teuchos::rcp
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Definition
Teuchos_RCPDecl.hpp:1266
Generated by
1.17.0