19#ifndef PYSTON_NODECONVERTER_H
20#define PYSTON_NODECONVERTER_H
23#include <boost/python.hpp>
38template <
typename To,
typename From>
40 using boost::python::extract;
42 extract<std::shared_ptr<Node<From>>> extractor(
object);
43 if (!extractor.check())
71 static bool cast(PyObject*,
void*) {
87 using boost::python::borrowed;
88 using boost::python::extract;
89 using boost::python::handle;
90 using boost::python::object;
92 object object(handle<>(borrowed(obj_ptr)));
93 extract<Node<bool>> bool_extract(
object);
94 extract<Node<int64_t>> int_extract(
object);
96 if (bool_extract.check() || int_extract.check()) {
106 static bool cast(PyObject* obj_ptr,
void* storage) {
107 using boost::python::borrowed;
108 using boost::python::handle;
109 using boost::python::object;
111 object object(handle<>(borrowed(obj_ptr)));
113 return createCastNode<double, bool>(
object, storage) || createCastNode<double, int64_t>(
object, storage);
128 using boost::python::borrowed;
129 using boost::python::extract;
130 using boost::python::handle;
131 using boost::python::object;
133 object object(handle<>(borrowed(obj_ptr)));
134 extract<Node<bool>> bool_extract(
object);
136 return bool_extract.check();
142 static bool cast(PyObject* obj_ptr,
void* storage) {
143 using boost::python::borrowed;
144 using boost::python::handle;
145 using boost::python::object;
147 object object(handle<>(borrowed(obj_ptr)));
149 return createCastNode<int64_t, bool>(
object, storage);
168 using boost::python::borrowed;
169 using boost::python::extract;
170 using boost::python::handle;
171 using boost::python::object;
172 using boost::python::converter::registry::query;
175#if PY_MAJOR_VERSION >= 3
176 if (PyFloat_Check(obj_ptr) || PyLong_Check(obj_ptr) || PyBool_Check(obj_ptr)) {
180 if (PyFloat_Check(obj_ptr) || PyLong_Check(obj_ptr) || PyBool_Check(obj_ptr) || PyInt_Check(obj_ptr)) {
206 if (PyFloat_Check(obj_ptr)) {
207 value = PyFloat_AsDouble(obj_ptr);
208 }
else if (PyLong_Check(obj_ptr)) {
209 value = PyLong_AsLong(obj_ptr);
210 }
else if (PyBool_Check(obj_ptr)) {
211 value = (obj_ptr == Py_True);
212#if PY_MAJOR_VERSION < 3
213 }
else if (PyInt_Check(obj_ptr)) {
214 value = PyInt_AsLong(obj_ptr);
231 static void construct(PyObject* obj_ptr, boost::python::converter::rvalue_from_python_stage1_data* data) {
234 ((boost::python::converter::rvalue_from_python_storage<std::shared_ptr<Node<T>>>*)data)->storage.bytes;
240 data->convertible = storage;
static bool createCastNode(boost::python::object &object, void *storage)
static bool isUpcast(PyObject *obj_ptr)
static bool cast(PyObject *obj_ptr, void *storage)
static bool cast(PyObject *obj_ptr, void *storage)
static bool isUpcast(PyObject *obj_ptr)
static bool isUpcast(PyObject *)
static bool cast(PyObject *, void *)
static bool fromPrimitive(PyObject *obj_ptr, void *storage)
static void construct(PyObject *obj_ptr, boost::python::converter::rvalue_from_python_stage1_data *data)
static void * isConvertible(PyObject *obj_ptr)