Line |
Branch |
Exec |
Source |
1 |
|
|
// |
2 |
|
|
// Copyright (c) 2019-2020 CNRS INRIA |
3 |
|
|
// |
4 |
|
|
|
5 |
|
|
#ifndef __pinocchio_python_utils_pickle_vector_hpp__ |
6 |
|
|
#define __pinocchio_python_utils_pickle_vector_hpp__ |
7 |
|
|
|
8 |
|
|
#include <boost/python.hpp> |
9 |
|
|
#include <boost/python/tuple.hpp> |
10 |
|
|
#include <boost/python/stl_iterator.hpp> |
11 |
|
|
|
12 |
|
|
namespace pinocchio |
13 |
|
|
{ |
14 |
|
|
namespace python |
15 |
|
|
{ |
16 |
|
|
/// |
17 |
|
|
/// \brief Create a pickle interface for the std::vector and aligned vector |
18 |
|
|
/// |
19 |
|
|
/// \tparam VecType Vector Type to pickle |
20 |
|
|
/// |
21 |
|
|
template<typename VecType> |
22 |
|
|
struct PickleVector : boost::python::pickle_suite |
23 |
|
|
{ |
24 |
|
✗ |
static boost::python::tuple getinitargs(const VecType &) |
25 |
|
|
{ |
26 |
|
✗ |
return boost::python::make_tuple(); |
27 |
|
|
} |
28 |
|
|
|
29 |
|
✗ |
static boost::python::tuple getstate(boost::python::object op) |
30 |
|
|
{ |
31 |
|
|
return boost::python::make_tuple( |
32 |
|
✗ |
boost::python::list(boost::python::extract<const VecType &>(op)())); |
33 |
|
|
} |
34 |
|
|
|
35 |
|
✗ |
static void setstate(boost::python::object op, boost::python::tuple tup) |
36 |
|
|
{ |
37 |
|
✗ |
if (boost::python::len(tup) > 0) |
38 |
|
|
{ |
39 |
|
✗ |
VecType & o = boost::python::extract<VecType &>(op)(); |
40 |
|
✗ |
boost::python::stl_input_iterator<typename VecType::value_type> begin(tup[0]), end; |
41 |
|
✗ |
while (begin != end) |
42 |
|
|
{ |
43 |
|
✗ |
o.push_back(*begin); |
44 |
|
✗ |
++begin; |
45 |
|
|
} |
46 |
|
|
} |
47 |
|
|
} |
48 |
|
|
|
49 |
|
280 |
static bool getstate_manages_dict() |
50 |
|
|
{ |
51 |
|
280 |
return true; |
52 |
|
|
} |
53 |
|
|
}; |
54 |
|
|
} // namespace python |
55 |
|
|
} // namespace pinocchio |
56 |
|
|
|
57 |
|
|
#endif // ifndef __pinocchio_python_utils_pickle_vector_hpp__ |
58 |
|
|
|