1
// Copyright David Abrahams 2002.
2
// Distributed under the Boost Software License, Version 1.0. (See
3
// accompanying file LICENSE_1_0.txt or copy at
4
// http://www.boost.org/LICENSE_1_0.txt)
5
#ifndef ENUM_DWA200298_HPP
6
# define ENUM_DWA200298_HPP
8
# include <boost/python/detail/prefix.hpp>
10
# include <boost/python/object/enum_base.hpp>
11
# include <boost/python/converter/rvalue_from_python_data.hpp>
12
# include <boost/python/converter/registered.hpp>
14
namespace boost { namespace python {
17
struct enum_ : public objects::enum_base
19
typedef objects::enum_base base;
21
// Declare a new enumeration type in the current scope()
22
enum_(char const* name, char const* doc = 0);
24
// Add a new enumeration value with the given name and value.
25
inline enum_<T>& value(char const* name, T);
27
// Add all of the defined enumeration values to the current scope with the
28
// same names used here.
29
inline enum_<T>& export_values();
31
static PyObject* to_python(void const* x);
32
static void* convertible_from_python(PyObject* obj);
33
static void construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data);
37
inline enum_<T>::enum_(char const* name, char const* doc )
40
, &enum_<T>::to_python
41
, &enum_<T>::convertible_from_python
42
, &enum_<T>::construct
49
// This is the conversion function that gets registered for converting
50
// these enums to Python.
52
PyObject* enum_<T>::to_python(void const* x)
54
return base::to_python(
55
converter::registered<T>::converters.m_class_object
56
, static_cast<long>(*(T const*)x));
60
// The following two static functions serve as the elements of an
61
// rvalue from_python converter for the enumeration type.
64
// This checks that a given Python object can be converted to the
67
void* enum_<T>::convertible_from_python(PyObject* obj)
69
return PyObject_IsInstance(
72
converter::registered<T>::converters.m_class_object))
77
// Constructs an instance of the enumeration type in the from_python
80
void enum_<T>::construct(PyObject* obj, converter::rvalue_from_python_stage1_data* data)
82
T x = static_cast<T>(PyInt_AS_LONG(obj));
83
void* const storage = ((converter::rvalue_from_python_storage<T>*)data)->storage.bytes;
85
data->convertible = storage;
89
inline enum_<T>& enum_<T>::value(char const* name, T x)
91
this->add_value(name, static_cast<long>(x));
96
inline enum_<T>& enum_<T>::export_values()
98
this->base::export_values();
102
}} // namespace boost::python
104
#endif // ENUM_DWA200298_HPP