summaryrefslogtreecommitdiff
path: root/boost/python/numpy/numpy_object_mgr_traits.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/python/numpy/numpy_object_mgr_traits.hpp')
-rw-r--r--boost/python/numpy/numpy_object_mgr_traits.hpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/boost/python/numpy/numpy_object_mgr_traits.hpp b/boost/python/numpy/numpy_object_mgr_traits.hpp
new file mode 100644
index 0000000000..8f9f444074
--- /dev/null
+++ b/boost/python/numpy/numpy_object_mgr_traits.hpp
@@ -0,0 +1,36 @@
+// Copyright Jim Bosch 2010-2012.
+// Copyright Stefan Seefeld 2016.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef boost_python_numpy_numpy_object_mgr_traits_hpp_
+#define boost_python_numpy_numpy_object_mgr_traits_hpp_
+
+/**
+ * @brief Macro that specializes object_manager_traits by requiring a
+ * source-file implementation of get_pytype().
+ */
+
+#define NUMPY_OBJECT_MANAGER_TRAITS(manager) \
+template <> \
+struct object_manager_traits<manager> \
+{ \
+ BOOST_STATIC_CONSTANT(bool, is_specialized = true); \
+ static inline python::detail::new_reference adopt(PyObject* x) \
+ { \
+ return python::detail::new_reference(python::pytype_check((PyTypeObject*)get_pytype(), x)); \
+ } \
+ static bool check(PyObject* x) \
+ { \
+ return ::PyObject_IsInstance(x, (PyObject*)get_pytype()); \
+ } \
+ static manager* checked_downcast(PyObject* x) \
+ { \
+ return python::downcast<manager>((checked_downcast_impl)(x, (PyTypeObject*)get_pytype())); \
+ } \
+ static PyTypeObject const * get_pytype(); \
+}
+
+#endif
+