GCC Code Coverage Report


Directory: ./
File: include/pinocchio/bindings/python/utils/pickle.hpp
Date: 2024-08-27 18:20:05
Exec Total Coverage
Lines: 2 16 12.5%
Branches: 0 38 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2023 INRIA
3 //
4
5 #ifndef __pinocchio_python_utils_pickle_hpp__
6 #define __pinocchio_python_utils_pickle_hpp__
7
8 #include <pinocchio/bindings/python/fwd.hpp>
9
10 namespace pinocchio
11 {
12 namespace python
13 {
14 namespace bp = boost::python;
15
16 template<typename Derived>
17 struct PickleFromStringSerialization : bp::pickle_suite
18 {
19 static bp::tuple getinitargs(const Derived &)
20 {
21 return bp::make_tuple();
22 }
23
24 static bp::tuple getstate(const Derived & obj)
25 {
26 const std::string str(obj.saveToString());
27 return bp::make_tuple(bp::str(str));
28 }
29
30 static void setstate(Derived & obj, bp::tuple tup)
31 {
32 if (bp::len(tup) == 0 || bp::len(tup) > 1)
33 {
34 throw eigenpy::Exception(
35 "Pickle was not able to reconstruct the object from the loaded data.\n"
36 "The pickle data structure contains too many elements.");
37 }
38
39 bp::object py_obj = tup[0];
40 boost::python::extract<std::string> obj_as_string(py_obj.ptr());
41 if (obj_as_string.check())
42 {
43 const std::string str = obj_as_string;
44 obj.loadFromString(str);
45 }
46 else
47 {
48 throw eigenpy::Exception(
49 "Pickle was not able to reconstruct the model from the loaded data.\n"
50 "The entry is not a string.");
51 }
52 }
53
54 60 static bool getstate_manages_dict()
55 {
56 60 return true;
57 }
58 };
59 } // namespace python
60 } // namespace pinocchio
61
62 #endif // ifndef __pinocchio_python_utils_pickle_hpp__
63