diff options
Diffstat (limited to 'tracking/pytracking/bindings.cpp')
-rw-r--r-- | tracking/pytracking/bindings.cpp | 61 |
1 files changed, 3 insertions, 58 deletions
diff --git a/tracking/pytracking/bindings.cpp b/tracking/pytracking/bindings.cpp index 699f0a06b3..3bd9bdd70b 100644 --- a/tracking/pytracking/bindings.cpp +++ b/tracking/pytracking/bindings.cpp @@ -2,67 +2,12 @@ #include "coding/traffic.hpp" +#include "pyhelpers/pair.hpp" +#include "pyhelpers/vector_uint8.hpp" + #include <boost/python.hpp> #include <boost/python/suite/indexing/vector_indexing_suite.hpp> -namespace -{ -using namespace boost::python; - -// Converts a std::pair instance to a Python tuple. -template <typename T1, typename T2> -struct pair_to_tuple -{ - static PyObject * convert(pair<T1, T2> const & p) - { - return incref(make_tuple(p.first, p.second).ptr()); - } - - static PyTypeObject const * get_pytype() { return &PyTuple_Type; } -}; - -template <typename T1, typename T2> -struct pair_to_python_converter -{ - pair_to_python_converter() { to_python_converter<pair<T1, T2>, pair_to_tuple<T1, T2>, true>(); } -}; - -// Converts a vector<uint8_t> to/from Python str. -struct vector_uint8t_to_str -{ - static PyObject * convert(vector<uint8_t> const & v) - { - str s(reinterpret_cast<char const *>(v.data()), v.size()); - return incref(s.ptr()); - } -}; - -struct vector_uint8t_from_python_str -{ - vector_uint8t_from_python_str() - { - converter::registry::push_back(&convertible, &construct, type_id<vector<uint8_t>>()); - } - - static void * convertible(PyObject * obj_ptr) - { - if (!PyString_Check(obj_ptr)) - return nullptr; - return obj_ptr; - } - - static void construct(PyObject * obj_ptr, converter::rvalue_from_python_stage1_data * data) - { - const char * value = PyString_AsString(obj_ptr); - if (value == nullptr) - throw_error_already_set(); - void * storage = - ((converter::rvalue_from_python_storage<vector<uint8_t>> *)data)->storage.bytes; - new (storage) vector<uint8_t>(value, value + PyString_Size(obj_ptr)); - data->convertible = storage; - } -}; -} // namespace BOOST_PYTHON_MODULE(pytracking) { |