5 #ifndef __eigenpy_utils_std_unique_ptr_hpp__
6 #define __eigenpy_utils_std_unique_ptr_hpp__
12 #include <boost/python.hpp>
15 #include <type_traits>
25 typedef bp::objects::pointer_holder<std::unique_ptr<T>, T> holder_t;
27 return bp::detail::none();
29 return bp::objects::make_ptr_instance<T, holder_t>::execute(
x);
38 return bp::detail::none();
40 return bp::to_python_value<const T&>()(*x);
50 return bp::detail::none();
52 return bp::detail::make_reference_holder::execute(
x.get());
61 return bp::detail::none();
63 return bp::to_python_value<const T&>()(*x);
77 #ifndef BOOST_PYTHON_NO_PY_SIGNATURES
79 return bp::to_python_value<const element_type&>().get_pytype();
96 #ifndef BOOST_PYTHON_NO_PY_SIGNATURES
98 return bp::to_python_value<const element_type&>().get_pytype();
120 template <
class ArgumentPackage>
121 static PyObject*
postcall(ArgumentPackage
const& args_, PyObject* result) {
123 if (PyInt_Check(result) || PyBool_Check(result) || PyFloat_Check(result) ||
127 return bp::return_internal_reference<>::postcall(args_, result);
137 template <
typename T>
138 struct to_python_value<const std::unique_ptr<T>&>
140 std::unique_ptr<T> >::type {};
145 #endif // ifndef __eigenpy_utils_std_unique_ptr_hpp__