32 #ifndef LVR2_UTIL_CONVERT_SHARED_H_
33 #define LVR2_UTIL_CONVERT_SHARED_H_
36 #include <boost/shared_ptr.hpp>
41 template<
class SharedPo
inter>
struct Holder {
44 Holder(
const SharedPointer &
p) :
p(
p) {}
45 Holder(
const Holder &other) :
p(other.
p) {}
46 Holder(Holder &&other) :
p(
std::move(other.
p)) {}
48 void operator () (...) {
p.reset(); }
52 template<
class T> std::shared_ptr<T>
to_std_ptr(
const boost::shared_ptr<T> &
p) {
53 typedef Holder<std::shared_ptr<T>> H;
54 if(H *h = boost::get_deleter<H, T>(
p)) {
57 return std::shared_ptr<T>(
p.get(), Holder<boost::shared_ptr<T>>(
p));
61 template<
class T> boost::shared_ptr<T>
to_boost_ptr(
const std::shared_ptr<T> &
p){
62 typedef Holder<boost::shared_ptr<T>> H;
63 if(H * h = std::get_deleter<H, T>(
p)) {
66 return boost::shared_ptr<T>(
p.get(), Holder<std::shared_ptr<T>>(
p));