File: bindings.h

package info (click to toggle)
mrpt 1%3A1.4.0-7
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 65,000 kB
  • ctags: 84,479
  • sloc: cpp: 417,767; ansic: 95,106; xml: 3,792; python: 412; sh: 276; makefile: 225; ruby: 30
file content (126 lines) | stat: -rw-r--r-- 4,101 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#ifndef __BINDINGS_H__
#define __BINDINGS_H__

/* BOOST */
#include <boost/python.hpp>
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
#include <boost/python/suite/indexing/indexing_suite.hpp>

/* std */
#include <vector>
#include <deque>

/* smart_ptr */
#include <mrpt/otherlibs/stlplus/smart_ptr.hpp>

/* macros */
#define STRINGIFY(str) #str

#define MAKE_PTR(class_name) class_<class_name##Ptr>(STRINGIFY(class_name##Ptr), "class_name smart pointer type", no_init)\
    .def("ctx", &class_name##Ptr_get_ctx, return_internal_reference<>())\
    .def("ctx", &class_name##Ptr_set_ctx)\
    .def("pointer", &class_name##Ptr_pointer, return_internal_reference<>())\
;\

#define MAKE_PTR_NAMED(class_name, ptr_name) class_<class_name##Ptr>(STRINGIFY(ptr_name##Ptr), "class_name smart pointer type", no_init)\
    .def("ctx", &class_name##Ptr_get_ctx, return_internal_reference<>())\
    .def("ctx", &class_name##Ptr_set_ctx)\
    .def("pointer", &class_name##Ptr_pointer, return_internal_reference<>())\
;\

#define MAKE_PTR_BASE(class_name, base_name) class_<class_name##Ptr, bases<base_name##Ptr> >(STRINGIFY(class_name##Ptr), "class_name smart pointer type", no_init)\
    .def("ctx", &class_name##Ptr_get_ctx, return_internal_reference<>())\
    .def("ctx", &class_name##Ptr_set_ctx)\
    .def("pointer", &class_name##Ptr_pointer, return_internal_reference<>())\
;\

#define MAKE_CREATE(class_name) .def("Create", &class_name::Create, "Create smart pointer from class.").staticmethod("Create")

#define MAKE_VEC(class_name) class_<std::vector<class_name> >(STRINGIFY(class_name##Vector)).def(vector_indexing_suite<std::vector<class_name> >());

#define MAKE_VEC_NAMED(class_name, vec_name) class_<std::vector<class_name> >(#vec_name).def(vector_indexing_suite<std::vector<class_name> >());

#define MAKE_PTR_CTX(class_name) class_name& class_name##Ptr_get_ctx(class_name##Ptr& self) { return *self; }\
void class_name##Ptr_set_ctx(class_name##Ptr& self, class_name& ctx) { *self = ctx; }\
class_name* class_name##Ptr_pointer(class_name##Ptr& self) { return self.pointer(); }\

#define MAKE_AS_STR(class_name) std::string class_name##_asString(class_name& self)\
{\
    return self.asString();\
}\

#define MAKE_GETITEM(class_name, value_type) value_type class_name##_getitem(class_name& self, size_t i)\
{\
    return self[i];\
}\

#define MAKE_SETITEM(class_name, value_type) void class_name##_setitem(class_name& self, size_t i, value_type value)\
{\
    self[i] = value;\
}\

#define MAKE_SUBMODULE(mod) object mod_module(handle<>(borrowed(PyImport_AddModule(STRINGIFY(pymrpt.mod)))));\
scope().attr(STRINGIFY(mod)) = mod_module;\
scope mod_scope = mod_module;\


// Helpers
void IndexError();
void TypeError(std::string message);
// end of Helpers

// STL list-like containers (vector, list, deque)
template<class T>
struct StlListLike
{
    typedef typename T::value_type V;
    static V& get(T & x, int i)
    {
        if( i<0 ) i+=x.size();
        if( i>=0 && i<x.size() ) return x[i];
        IndexError();
        // only for removing the return-type warning; code is never reached:
        return x[0];
    }
    static void set(T & x, int i, V const& v)
    {
        if( i<0 ) i+=x.size();
        if( i>=0 && i<x.size() ) x[i]=v;
        else IndexError();
    }
    static void del(T & x, int i)
    {
        if( i<0 ) i+=x.size();
        if( i>=0 && i<x.size() ) x.erase(x.begin() + i);
        else IndexError();
    }
    static void add(T & x, V const& v)
    {
        x.push_back(v);
    }
};
// end of STL list-like containers

/* exporters */
void export_gui();
void export_opengl();
void export_math();
void export_math_stl();
void export_obs();
void export_maps();
void export_slam();
void export_nav();
void export_poses();
void export_poses_stl();
void export_system();
void export_utils();
void export_utils_stl();
void export_bayes();

#ifdef ROS_EXTENSIONS
// time conversion
boost::python::object TTimeStamp_to_ROS_Time(boost::python::long_ timestamp);
boost::python::long_ TTimeStamp_from_ROS_Time(boost::python::object ros_time);
#endif

#endif