15 #ifndef __PYIPSDKBASE_PYTHONENUMUTILS_H__ 16 #define __PYIPSDKBASE_PYTHONENUMUTILS_H__ 18 #include <boost/python/enum.hpp> 19 #include <boost/python/implicit.hpp> 28 struct ipsdkEnum_ :
public boost::python::objects::enum_base
30 typedef boost::python::objects::enum_base base;
33 ipsdkEnum_(
char const* name,
char const* doc = 0);
42 static PyObject* to_python(
void const* x);
43 static void* convertible_from_python(PyObject* obj);
44 static void construct(PyObject* obj, boost::python::converter::rvalue_from_python_stage1_data* data);
54 ,
boost::python::type_id<T>()
63 PyObject* ipsdkEnum_<T>::to_python(
void const* x)
65 return base::to_python(
66 boost::python::converter::registered<T>::converters.m_class_object
67 , ((T
const*)x)->value());
78 void* ipsdkEnum_<T>::convertible_from_python(PyObject* obj)
80 return PyObject_IsInstance(
82 , boost::python::upcast<PyObject>(
83 boost::python::converter::registered<T>::converters.m_class_object))
91 void ipsdkEnum_<T>::construct(PyObject* obj, boost::python::converter::rvalue_from_python_stage1_data* data)
93 #if PY_VERSION_HEX >= 0x03000000 94 T x =
static_cast<typename T::domain
>(PyLong_AS_LONG(obj));
96 T x =
static_cast<typename T::domain
>(PyInt_AS_LONG(obj));
98 void*
const storage = ((boost::python::converter::rvalue_from_python_storage<T>*)data)->storage.bytes;
100 data->convertible = storage;
104 inline ipsdkEnum_<T>& ipsdkEnum_<T>::value(
char const* name, T x)
106 this->add_value(name, x.value());
111 inline ipsdkEnum_<T>& ipsdkEnum_<T>::export_values()
113 this->base::export_values();
120 template <
typename EnumType>
122 ipsdkToPythonEnum(
const char* enumName)
125 ipsdkEnum_<EnumType> curEnum(enumName);
126 typename EnumType::const_iterator iter = EnumType::begin();
127 while (iter != EnumType::end()) {
129 curEnum.value(iter->str(),
static_cast<typename EnumType::domain
>(iter->value()));
132 curEnum.export_values();
133 boost::python::implicitly_convertible<typename EnumType::domain, EnumType>();
142 #endif // __PYIPSDKBASE_PYTHONENUMUTILS_H__ Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Definition: DataItemNodeHdrMacrosDetails.h:48
Definition: PythonEnumUtils.h:28