GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: include/pinocchio/bindings/python/utils/pickle-vector.hpp Lines: 1 12 8.3 %
Date: 2024-04-26 13:14:21 Branches: 0 30 0.0 %

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
      { return boost::python::make_tuple(); }
26
27
      static boost::python::tuple getstate(boost::python::object op)
28
      {
29
        return boost::python::make_tuple(boost::python::list(boost::python::extract<const VecType&>(op)()));
30
      }
31
32
      static void setstate(boost::python::object op, boost::python::tuple tup)
33
      {
34
        if(boost::python::len(tup) > 0)
35
        {
36
          VecType & o = boost::python::extract<VecType&>(op)();
37
          boost::python::stl_input_iterator<typename VecType::value_type> begin(tup[0]), end;
38
          while(begin != end)
39
          {
40
             o.push_back(*begin);
41
             ++begin;
42
          }
43
        }
44
      }
45
46
513
      static bool getstate_manages_dict() { return true; }
47
    };
48
  }
49
}
50
51
#endif // ifndef __pinocchio_python_utils_pickle_vector_hpp__