60 #ifndef _MIRA_TOOLBOXES_PYTHON_BOOSTOPTIONALWRAPPER_H_ 61 #define _MIRA_TOOLBOXES_PYTHON_BOOSTOPTIONALWRAPPER_H_ 65 namespace mira {
namespace python {
69 template <
typename T,
typename TfromPy>
74 boost::python::converter::registry::push_back(&TfromPy::convertible, &TfromPy::construct, boost::python::type_id<T>());
78 template <
typename T,
typename TtoPy,
typename TfromPy>
83 boost::python::to_python_converter<T, TtoPy>();
93 static PyObject *
convert(
const boost::optional<T>& value)
95 return (value ? boost::python::incref(boost::python::object(value.get()).ptr()) : boost::python::detail::none());
103 using namespace boost::python::converter;
105 if (source == Py_None)
return source;
107 const registration& converters(registered<T>::converters);
109 if (implicit_rvalue_convertible_from_python(source, converters))
111 rvalue_from_python_stage1_data data = rvalue_from_python_stage1(source, converters);
112 return rvalue_from_python_stage2(source, data, converters);
117 static void construct(PyObject * source, boost::python::converter::rvalue_from_python_stage1_data * data)
119 using namespace boost::python::converter;
121 void *
const storage = ((rvalue_from_python_storage<T> *)data)->storage.bytes;
123 if (data->convertible == source)
125 new (storage) boost::optional<T>();
129 new (storage) boost::optional<T>(*static_cast<T *>(data->convertible));
132 data->convertible = storage;
static void * convertible(PyObject *source)
Definition: BoostOptionalWrapper.h:101
Definition: BoostOptionalWrapper.h:70
static PyObject * convert(const boost::optional< T > &value)
Definition: BoostOptionalWrapper.h:93
Definition: BoostOptionalWrapper.h:89
python_optional()
Definition: BoostOptionalWrapper.h:136
Definition: BoostOptionalWrapper.h:91
Definition: BoostOptionalWrapper.h:79
Definition: BoostOptionalWrapper.h:99
object_from_python()
Definition: BoostOptionalWrapper.h:72
Include this instead of boost/python.hpp to reduce compile time warning spam from Boost internal inco...
static void construct(PyObject *source, boost::python::converter::rvalue_from_python_stage1_data *data)
Definition: BoostOptionalWrapper.h:117
register_python_conversion()
Definition: BoostOptionalWrapper.h:81