GCC Code Coverage Report


Directory: ./
File: python/broadphase/broadphase_collision_manager.hh
Date: 2025-04-01 09:23:31
Exec Total Coverage
Lines: 43 48 89.6%
Branches: 38 76 50.0%

Line Branch Exec Source
1 //
2 // Software License Agreement (BSD License)
3 //
4 // Copyright (c) 2022 INRIA
5 // Author: Justin Carpentier
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions
10 // are met:
11 //
12 // * Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // * Redistributions in binary form must reproduce the above
15 // copyright notice, this list of conditions and the following
16 // disclaimer in the documentation and/or other materials provided
17 // with the distribution.
18 // * Neither the name of INRIA nor the names of its
19 // contributors may be used to endorse or promote products derived
20 // from this software without specific prior written permission.
21 //
22 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26 // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 // POSSIBILITY OF SUCH DAMAGE.
34
35 #ifndef COAL_PYTHON_BROADPHASE_BROADPHASE_COLLISION_MANAGER_HH
36 #define COAL_PYTHON_BROADPHASE_BROADPHASE_COLLISION_MANAGER_HH
37
38 #include <eigenpy/eigenpy.hpp>
39
40 #include "coal/fwd.hh"
41 #include "coal/broadphase/broadphase_collision_manager.h"
42 #include "coal/broadphase/default_broadphase_callbacks.h"
43
44 #include "../coal.hh"
45
46 #ifdef COAL_HAS_DOXYGEN_AUTODOC
47 #include "doxygen_autodoc/functions.h"
48 #include "doxygen_autodoc/coal/broadphase/broadphase_collision_manager.h"
49 #endif
50
51 #include <boost/algorithm/string/replace.hpp>
52 #include <boost/type_index.hpp>
53
54 namespace coal {
55
56 struct BroadPhaseCollisionManagerWrapper
57 : BroadPhaseCollisionManager,
58 bp::wrapper<BroadPhaseCollisionManager> {
59 typedef BroadPhaseCollisionManager Base;
60
61 void registerObjects(const std::vector<CollisionObject *> &other_objs) {
62 this->get_override("registerObjects")(other_objs);
63 }
64 void registerObject(CollisionObject *obj) {
65 this->get_override("registerObjects")(obj);
66 }
67 void unregisterObject(CollisionObject *obj) {
68 this->get_override("unregisterObject")(obj);
69 }
70
71 void update(const std::vector<CollisionObject *> &other_objs) {
72 this->get_override("update")(other_objs);
73 }
74 void update(CollisionObject *obj) { this->get_override("update")(obj); }
75 void update() { this->get_override("update")(); }
76
77 void setup() { this->get_override("setup")(); }
78 void clear() { this->get_override("clear")(); }
79
80 std::vector<CollisionObject *> getObjects() const {
81 #pragma GCC diagnostic push
82 #pragma GCC diagnostic ignored "-Wconversion"
83 return this->get_override("getObjects")();
84 #pragma GCC diagnostic pop
85 }
86
87 void collide(CollisionCallBackBase *callback) const {
88 this->get_override("collide")(callback);
89 }
90 void collide(CollisionObject *obj, CollisionCallBackBase *callback) const {
91 this->get_override("collide")(obj, callback);
92 }
93 void collide(BroadPhaseCollisionManager *other_manager,
94 CollisionCallBackBase *callback) const {
95 this->get_override("collide")(other_manager, callback);
96 }
97
98 void distance(DistanceCallBackBase *callback) const {
99 this->get_override("distance")(callback);
100 }
101 void distance(CollisionObject *obj, DistanceCallBackBase *callback) const {
102 this->get_override("collide")(obj, callback);
103 }
104 void distance(BroadPhaseCollisionManager *other_manager,
105 DistanceCallBackBase *callback) const {
106 this->get_override("collide")(other_manager, callback);
107 }
108
109 bool empty() const {
110 #pragma GCC diagnostic push
111 #pragma GCC diagnostic ignored "-Wconversion"
112 return this->get_override("empty")();
113 #pragma GCC diagnostic pop
114 }
115 size_t size() const {
116 #pragma GCC diagnostic push
117 #pragma GCC diagnostic ignored "-Wconversion"
118 return this->get_override("size")();
119 #pragma GCC diagnostic pop
120 }
121
122 5 static void expose() {
123 5 bp::class_<BroadPhaseCollisionManagerWrapper, boost::noncopyable>(
124 "BroadPhaseCollisionManager", bp::no_init)
125
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("registerObjects", bp::pure_virtual(&Base::registerObjects),
126
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::registerObjects),
127 bp::with_custodian_and_ward_postcall<1, 2>())
128
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("registerObject", bp::pure_virtual(&Base::registerObject),
129
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::registerObject),
130 bp::with_custodian_and_ward_postcall<1, 2>())
131
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("unregisterObject", bp::pure_virtual(&Base::unregisterObject),
132
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::unregisterObject))
133
134
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("update", bp::pure_virtual((void(Base::*)()) & Base::update),
135
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc((void(Base::*)())(&Base::update)))
136
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("update",
137 bp::pure_virtual(
138 (void(Base::*)(const std::vector<CollisionObject *> &)) &
139 Base::update),
140
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc((void(Base::*)(
141 const std::vector<CollisionObject *> &))(&Base::update)),
142 bp::with_custodian_and_ward_postcall<1, 2>())
143
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("update",
144 bp::pure_virtual((void(Base::*)(CollisionObject * obj)) &
145 Base::update),
146
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
147 (void(Base::*)(CollisionObject * obj))(&Base::update)),
148 bp::with_custodian_and_ward_postcall<1, 2>())
149
150
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("setup", bp::pure_virtual(&Base::setup),
151
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::setup))
152
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("clear", bp::pure_virtual(&Base::clear),
153
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::clear))
154
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("empty", bp::pure_virtual(&Base::empty),
155
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::empty))
156
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("size", bp::pure_virtual(&Base::size),
157
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(&Base::size))
158
159
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def(
160 "getObjects",
161 bp::pure_virtual((std::vector<CollisionObject *>(Base::*)() const) &
162 Base::getObjects),
163
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
164 (std::vector<CollisionObject *>(Base::*)() const) &
165 Base::getObjects),
166 bp::with_custodian_and_ward_postcall<0, 1>())
167
168
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def(
169 "collide",
170 bp::pure_virtual((void(Base::*)(CollisionCallBackBase *) const) &
171 Base::collide),
172
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
173 (void(Base::*)(CollisionCallBackBase *) const) & Base::collide))
174
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("collide",
175 bp::pure_virtual((void(Base::*)(CollisionObject *,
176 CollisionCallBackBase *) const) &
177 Base::collide),
178
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
179 (void(Base::*)(CollisionObject *, CollisionCallBackBase *)
180 const) &
181 Base::collide))
182
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("collide",
183 bp::pure_virtual((void(Base::*)(BroadPhaseCollisionManager *,
184 CollisionCallBackBase *) const) &
185 Base::collide),
186
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
187 (void(Base::*)(BroadPhaseCollisionManager *,
188 CollisionCallBackBase *) const) &
189 Base::collide))
190
191
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def(
192 "distance",
193 bp::pure_virtual((void(Base::*)(DistanceCallBackBase *) const) &
194 Base::distance),
195
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
196 (void(Base::*)(DistanceCallBackBase *) const) & Base::distance))
197
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("distance",
198 bp::pure_virtual((void(Base::*)(CollisionObject *,
199 DistanceCallBackBase *) const) &
200 Base::distance),
201
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
5 doxygen::member_func_doc(
202 (void(Base::*)(CollisionObject *, DistanceCallBackBase *)
203 const) &
204 Base::distance))
205
1/2
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
5 .def("distance",
206 bp::pure_virtual((void(Base::*)(BroadPhaseCollisionManager *,
207 DistanceCallBackBase *) const) &
208 Base::distance),
209
1/2
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
10 doxygen::member_func_doc(
210 (void(Base::*)(BroadPhaseCollisionManager *,
211 DistanceCallBackBase *) const) &
212 Base::distance));
213 5 }
214
215 template <typename Derived>
216 60 static void exposeDerived() {
217
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
60 std::string class_name = boost::typeindex::type_id<Derived>().pretty_name();
218
1/2
✓ Branch 1 taken 30 times.
✗ Branch 2 not taken.
60 boost::algorithm::replace_all(class_name, "coal::", "");
219 #if defined(WIN32)
220 boost::algorithm::replace_all(class_name, "class ", "");
221 #endif
222
223
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
60 bp::class_<Derived, bp::bases<BroadPhaseCollisionManager> >(
224 class_name.c_str(), bp::no_init)
225
1/2
✓ Branch 2 taken 30 times.
✗ Branch 3 not taken.
60 .def(dv::init<Derived>());
226 60 }
227
228 }; // BroadPhaseCollisionManagerWrapper
229
230 } // namespace coal
231
232 #endif // ifndef COAL_PYTHON_BROADPHASE_BROADPHASE_COLLISION_MANAGER_HH
233