roby 0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. data/.gitignore +29 -0
  2. data/History.txt +4 -0
  3. data/License-fr.txt +519 -0
  4. data/License.txt +515 -0
  5. data/Manifest.txt +245 -0
  6. data/NOTES +4 -0
  7. data/README.txt +163 -0
  8. data/Rakefile +161 -0
  9. data/TODO.txt +146 -0
  10. data/app/README.txt +24 -0
  11. data/app/Rakefile +8 -0
  12. data/app/config/ROBOT.rb +5 -0
  13. data/app/config/app.yml +91 -0
  14. data/app/config/init.rb +7 -0
  15. data/app/config/roby.yml +3 -0
  16. data/app/controllers/.gitattributes +0 -0
  17. data/app/controllers/ROBOT.rb +2 -0
  18. data/app/data/.gitattributes +0 -0
  19. data/app/planners/ROBOT/main.rb +6 -0
  20. data/app/planners/main.rb +5 -0
  21. data/app/scripts/distributed +3 -0
  22. data/app/scripts/generate/bookmarks +3 -0
  23. data/app/scripts/replay +3 -0
  24. data/app/scripts/results +3 -0
  25. data/app/scripts/run +3 -0
  26. data/app/scripts/server +3 -0
  27. data/app/scripts/shell +3 -0
  28. data/app/scripts/test +3 -0
  29. data/app/tasks/.gitattributes +0 -0
  30. data/app/tasks/ROBOT/.gitattributes +0 -0
  31. data/bin/roby +210 -0
  32. data/bin/roby-log +168 -0
  33. data/bin/roby-shell +25 -0
  34. data/doc/images/event_generalization.png +0 -0
  35. data/doc/images/exception_propagation_1.png +0 -0
  36. data/doc/images/exception_propagation_2.png +0 -0
  37. data/doc/images/exception_propagation_3.png +0 -0
  38. data/doc/images/exception_propagation_4.png +0 -0
  39. data/doc/images/exception_propagation_5.png +0 -0
  40. data/doc/images/replay_handler_error.png +0 -0
  41. data/doc/images/replay_handler_error_0.png +0 -0
  42. data/doc/images/replay_handler_error_1.png +0 -0
  43. data/doc/images/roby_cycle_overview.png +0 -0
  44. data/doc/images/roby_replay_02.png +0 -0
  45. data/doc/images/roby_replay_03.png +0 -0
  46. data/doc/images/roby_replay_04.png +0 -0
  47. data/doc/images/roby_replay_event_representation.png +0 -0
  48. data/doc/images/roby_replay_first_state.png +0 -0
  49. data/doc/images/roby_replay_relations.png +0 -0
  50. data/doc/images/roby_replay_startup.png +0 -0
  51. data/doc/images/task_event_generalization.png +0 -0
  52. data/doc/papers.rdoc +11 -0
  53. data/doc/styles/allison.css +314 -0
  54. data/doc/styles/allison.js +316 -0
  55. data/doc/styles/allison.rb +276 -0
  56. data/doc/styles/jamis.rb +593 -0
  57. data/doc/tutorials/01-GettingStarted.rdoc +86 -0
  58. data/doc/tutorials/02-GoForward.rdoc +220 -0
  59. data/doc/tutorials/03-PlannedPath.rdoc +268 -0
  60. data/doc/tutorials/04-EventPropagation.rdoc +236 -0
  61. data/doc/tutorials/05-ErrorHandling.rdoc +319 -0
  62. data/doc/tutorials/06-Overview.rdoc +40 -0
  63. data/doc/videos.rdoc +69 -0
  64. data/ext/droby/dump.cc +175 -0
  65. data/ext/droby/extconf.rb +3 -0
  66. data/ext/graph/algorithm.cc +746 -0
  67. data/ext/graph/extconf.rb +7 -0
  68. data/ext/graph/graph.cc +529 -0
  69. data/ext/graph/graph.hh +183 -0
  70. data/ext/graph/iterator_sequence.hh +102 -0
  71. data/ext/graph/undirected_dfs.hh +226 -0
  72. data/ext/graph/undirected_graph.hh +421 -0
  73. data/lib/roby.rb +41 -0
  74. data/lib/roby/app.rb +870 -0
  75. data/lib/roby/app/rake.rb +56 -0
  76. data/lib/roby/app/run.rb +14 -0
  77. data/lib/roby/app/scripts/distributed.rb +13 -0
  78. data/lib/roby/app/scripts/generate/bookmarks.rb +162 -0
  79. data/lib/roby/app/scripts/replay.rb +31 -0
  80. data/lib/roby/app/scripts/results.rb +15 -0
  81. data/lib/roby/app/scripts/run.rb +26 -0
  82. data/lib/roby/app/scripts/server.rb +18 -0
  83. data/lib/roby/app/scripts/shell.rb +88 -0
  84. data/lib/roby/app/scripts/test.rb +40 -0
  85. data/lib/roby/basic_object.rb +151 -0
  86. data/lib/roby/config.rb +5 -0
  87. data/lib/roby/control.rb +747 -0
  88. data/lib/roby/decision_control.rb +17 -0
  89. data/lib/roby/distributed.rb +32 -0
  90. data/lib/roby/distributed/base.rb +440 -0
  91. data/lib/roby/distributed/communication.rb +871 -0
  92. data/lib/roby/distributed/connection_space.rb +592 -0
  93. data/lib/roby/distributed/distributed_object.rb +206 -0
  94. data/lib/roby/distributed/drb.rb +62 -0
  95. data/lib/roby/distributed/notifications.rb +539 -0
  96. data/lib/roby/distributed/peer.rb +550 -0
  97. data/lib/roby/distributed/protocol.rb +529 -0
  98. data/lib/roby/distributed/proxy.rb +343 -0
  99. data/lib/roby/distributed/subscription.rb +311 -0
  100. data/lib/roby/distributed/transaction.rb +498 -0
  101. data/lib/roby/event.rb +897 -0
  102. data/lib/roby/exceptions.rb +234 -0
  103. data/lib/roby/executives/simple.rb +30 -0
  104. data/lib/roby/graph.rb +166 -0
  105. data/lib/roby/interface.rb +390 -0
  106. data/lib/roby/log.rb +3 -0
  107. data/lib/roby/log/chronicle.rb +303 -0
  108. data/lib/roby/log/console.rb +72 -0
  109. data/lib/roby/log/data_stream.rb +197 -0
  110. data/lib/roby/log/dot.rb +279 -0
  111. data/lib/roby/log/event_stream.rb +151 -0
  112. data/lib/roby/log/file.rb +340 -0
  113. data/lib/roby/log/gui/basic_display.ui +83 -0
  114. data/lib/roby/log/gui/chronicle.rb +26 -0
  115. data/lib/roby/log/gui/chronicle_view.rb +40 -0
  116. data/lib/roby/log/gui/chronicle_view.ui +70 -0
  117. data/lib/roby/log/gui/data_displays.rb +172 -0
  118. data/lib/roby/log/gui/data_displays.ui +155 -0
  119. data/lib/roby/log/gui/notifications.rb +26 -0
  120. data/lib/roby/log/gui/relations.rb +248 -0
  121. data/lib/roby/log/gui/relations.ui +123 -0
  122. data/lib/roby/log/gui/relations_view.rb +185 -0
  123. data/lib/roby/log/gui/relations_view.ui +149 -0
  124. data/lib/roby/log/gui/replay.rb +327 -0
  125. data/lib/roby/log/gui/replay_controls.rb +200 -0
  126. data/lib/roby/log/gui/replay_controls.ui +259 -0
  127. data/lib/roby/log/gui/runtime.rb +130 -0
  128. data/lib/roby/log/hooks.rb +185 -0
  129. data/lib/roby/log/logger.rb +202 -0
  130. data/lib/roby/log/notifications.rb +244 -0
  131. data/lib/roby/log/plan_rebuilder.rb +470 -0
  132. data/lib/roby/log/relations.rb +1056 -0
  133. data/lib/roby/log/server.rb +550 -0
  134. data/lib/roby/log/sqlite.rb +47 -0
  135. data/lib/roby/log/timings.rb +164 -0
  136. data/lib/roby/plan-object.rb +247 -0
  137. data/lib/roby/plan.rb +762 -0
  138. data/lib/roby/planning.rb +13 -0
  139. data/lib/roby/planning/loops.rb +302 -0
  140. data/lib/roby/planning/model.rb +906 -0
  141. data/lib/roby/planning/task.rb +151 -0
  142. data/lib/roby/propagation.rb +562 -0
  143. data/lib/roby/query.rb +619 -0
  144. data/lib/roby/relations.rb +583 -0
  145. data/lib/roby/relations/conflicts.rb +70 -0
  146. data/lib/roby/relations/ensured.rb +20 -0
  147. data/lib/roby/relations/error_handling.rb +23 -0
  148. data/lib/roby/relations/events.rb +9 -0
  149. data/lib/roby/relations/executed_by.rb +193 -0
  150. data/lib/roby/relations/hierarchy.rb +239 -0
  151. data/lib/roby/relations/influence.rb +10 -0
  152. data/lib/roby/relations/planned_by.rb +63 -0
  153. data/lib/roby/robot.rb +7 -0
  154. data/lib/roby/standard_errors.rb +218 -0
  155. data/lib/roby/state.rb +5 -0
  156. data/lib/roby/state/events.rb +221 -0
  157. data/lib/roby/state/information.rb +55 -0
  158. data/lib/roby/state/pos.rb +110 -0
  159. data/lib/roby/state/shapes.rb +32 -0
  160. data/lib/roby/state/state.rb +353 -0
  161. data/lib/roby/support.rb +92 -0
  162. data/lib/roby/task-operations.rb +182 -0
  163. data/lib/roby/task.rb +1618 -0
  164. data/lib/roby/test/common.rb +399 -0
  165. data/lib/roby/test/distributed.rb +214 -0
  166. data/lib/roby/test/tasks/empty_task.rb +9 -0
  167. data/lib/roby/test/tasks/goto.rb +36 -0
  168. data/lib/roby/test/tasks/simple_task.rb +23 -0
  169. data/lib/roby/test/testcase.rb +519 -0
  170. data/lib/roby/test/tools.rb +160 -0
  171. data/lib/roby/thread_task.rb +87 -0
  172. data/lib/roby/transactions.rb +462 -0
  173. data/lib/roby/transactions/proxy.rb +292 -0
  174. data/lib/roby/transactions/updates.rb +139 -0
  175. data/plugins/fault_injection/History.txt +4 -0
  176. data/plugins/fault_injection/README.txt +37 -0
  177. data/plugins/fault_injection/Rakefile +18 -0
  178. data/plugins/fault_injection/TODO.txt +0 -0
  179. data/plugins/fault_injection/app.rb +52 -0
  180. data/plugins/fault_injection/fault_injection.rb +89 -0
  181. data/plugins/fault_injection/test/test_fault_injection.rb +84 -0
  182. data/plugins/subsystems/README.txt +40 -0
  183. data/plugins/subsystems/Rakefile +18 -0
  184. data/plugins/subsystems/app.rb +171 -0
  185. data/plugins/subsystems/test/app/README +24 -0
  186. data/plugins/subsystems/test/app/Rakefile +8 -0
  187. data/plugins/subsystems/test/app/config/app.yml +71 -0
  188. data/plugins/subsystems/test/app/config/init.rb +9 -0
  189. data/plugins/subsystems/test/app/config/roby.yml +3 -0
  190. data/plugins/subsystems/test/app/planners/main.rb +20 -0
  191. data/plugins/subsystems/test/app/scripts/distributed +3 -0
  192. data/plugins/subsystems/test/app/scripts/replay +3 -0
  193. data/plugins/subsystems/test/app/scripts/results +3 -0
  194. data/plugins/subsystems/test/app/scripts/run +3 -0
  195. data/plugins/subsystems/test/app/scripts/server +3 -0
  196. data/plugins/subsystems/test/app/scripts/shell +3 -0
  197. data/plugins/subsystems/test/app/scripts/test +3 -0
  198. data/plugins/subsystems/test/app/tasks/services.rb +15 -0
  199. data/plugins/subsystems/test/test_subsystems.rb +71 -0
  200. data/test/distributed/test_communication.rb +178 -0
  201. data/test/distributed/test_connection.rb +282 -0
  202. data/test/distributed/test_execution.rb +373 -0
  203. data/test/distributed/test_mixed_plan.rb +341 -0
  204. data/test/distributed/test_plan_notifications.rb +238 -0
  205. data/test/distributed/test_protocol.rb +516 -0
  206. data/test/distributed/test_query.rb +102 -0
  207. data/test/distributed/test_remote_plan.rb +491 -0
  208. data/test/distributed/test_transaction.rb +463 -0
  209. data/test/mockups/tasks.rb +27 -0
  210. data/test/planning/test_loops.rb +380 -0
  211. data/test/planning/test_model.rb +427 -0
  212. data/test/planning/test_task.rb +106 -0
  213. data/test/relations/test_conflicts.rb +42 -0
  214. data/test/relations/test_ensured.rb +38 -0
  215. data/test/relations/test_executed_by.rb +149 -0
  216. data/test/relations/test_hierarchy.rb +158 -0
  217. data/test/relations/test_planned_by.rb +54 -0
  218. data/test/suite_core.rb +24 -0
  219. data/test/suite_distributed.rb +9 -0
  220. data/test/suite_planning.rb +3 -0
  221. data/test/suite_relations.rb +8 -0
  222. data/test/test_bgl.rb +508 -0
  223. data/test/test_control.rb +399 -0
  224. data/test/test_event.rb +894 -0
  225. data/test/test_exceptions.rb +592 -0
  226. data/test/test_interface.rb +37 -0
  227. data/test/test_log.rb +114 -0
  228. data/test/test_log_server.rb +132 -0
  229. data/test/test_plan.rb +584 -0
  230. data/test/test_propagation.rb +210 -0
  231. data/test/test_query.rb +266 -0
  232. data/test/test_relations.rb +180 -0
  233. data/test/test_state.rb +414 -0
  234. data/test/test_support.rb +16 -0
  235. data/test/test_task.rb +938 -0
  236. data/test/test_testcase.rb +122 -0
  237. data/test/test_thread_task.rb +73 -0
  238. data/test/test_transactions.rb +569 -0
  239. data/test/test_transactions_proxy.rb +198 -0
  240. metadata +570 -0
@@ -0,0 +1,421 @@
1
+ // (C) Copyright Sylvain Joyeux 2006
2
+ //
3
+ // Original code from reverse_graph adaptor
4
+ // (C) Copyright David Abrahams 2000.
5
+ //
6
+ // Distributed under the Boost Software License, Version 1.0. (See
7
+ // accompanying file LICENSE_1_0.txt or copy at
8
+ // http://www.boost.org/LICENSE_1_0.txt)
9
+
10
+ #ifndef UNDIRECTED_GRAPH_HPP
11
+ #define UNDIRECTED_GRAPH_HPP
12
+
13
+ #include <boost/graph/adjacency_iterator.hpp>
14
+ #include <boost/graph/properties.hpp>
15
+ #include <boost/static_assert.hpp>
16
+ #include "iterator_sequence.hh"
17
+ #include <boost/iterator/transform_iterator.hpp>
18
+
19
+ #include <boost/type_traits.hpp>
20
+
21
+ namespace utilmm {
22
+ struct undirected_graph_tag { };
23
+
24
+ /** undirected_graph creates an undirected graph from a bidirectional graph. This can allow
25
+ * to use some undirected-graph-only algorithms on bidirectional graphs
26
+ */
27
+ template <class BidirectionalGraph, class GraphRef = const BidirectionalGraph&>
28
+ class undirected_graph {
29
+ typedef undirected_graph<BidirectionalGraph, GraphRef> Self;
30
+ typedef boost::graph_traits<BidirectionalGraph> Traits;
31
+
32
+ BOOST_STATIC_ASSERT(( boost::is_same<boost::bidirectional_tag, typename BidirectionalGraph::directed_category>::value ));
33
+
34
+ public:
35
+ typedef BidirectionalGraph base_type;
36
+
37
+ // Constructor
38
+ undirected_graph(GraphRef g) : m_g(g) {}
39
+
40
+ // Graph requirements
41
+ typedef typename Traits::vertex_descriptor vertex_descriptor;
42
+ typedef boost::undirected_tag directed_category;
43
+ typedef typename Traits::edge_parallel_category edge_parallel_category;
44
+ typedef typename Traits::traversal_category traversal_category;
45
+
46
+ // Add a 'reverse' flag to edge descriptors, so that source() and target() know what
47
+ // needs to be done
48
+ typedef std::pair<typename Traits::edge_descriptor, bool> edge_descriptor;
49
+ typedef edge_descriptor (*make_undirected_edge_descriptor)(typename Traits::edge_descriptor);
50
+
51
+ // Out edges do not need to be swapped
52
+ static edge_descriptor make_out_edge_descriptor(typename Traits::edge_descriptor e)
53
+ { return make_pair(e, false); }
54
+ class base_out_edge_iterator :
55
+ public boost::transform_iterator<make_undirected_edge_descriptor, typename Traits::out_edge_iterator>
56
+ {
57
+ typedef boost::transform_iterator<make_undirected_edge_descriptor, typename Traits::out_edge_iterator>
58
+ base_type;
59
+
60
+ public:
61
+ base_out_edge_iterator() {}
62
+ base_out_edge_iterator(typename Traits::out_edge_iterator e)
63
+ : base_type(e, make_out_edge_descriptor) {}
64
+ };
65
+
66
+ static edge_descriptor make_in_edge_descriptor(typename Traits::edge_descriptor e)
67
+ { return make_pair(e, true); }
68
+ class base_in_edge_iterator :
69
+ public boost::transform_iterator<make_undirected_edge_descriptor, typename Traits::in_edge_iterator>
70
+ {
71
+ typedef boost::transform_iterator<make_undirected_edge_descriptor, typename Traits::in_edge_iterator>
72
+ base_type;
73
+
74
+ public:
75
+ base_in_edge_iterator() {}
76
+ base_in_edge_iterator(typename Traits::in_edge_iterator e)
77
+ : base_type(e, make_in_edge_descriptor) {}
78
+ };
79
+
80
+ // Do not swap plain edge iterators
81
+ class edge_iterator :
82
+ public boost::transform_iterator<make_undirected_edge_descriptor, typename Traits::edge_iterator>
83
+ {
84
+ typedef boost::transform_iterator<make_undirected_edge_descriptor, typename Traits::edge_iterator>
85
+ base_type;
86
+ public:
87
+ edge_iterator() {}
88
+ edge_iterator(typename Traits::edge_iterator e)
89
+ : base_type(e, make_out_edge_descriptor) {}
90
+ };
91
+
92
+ // IncidenceGraph requirements
93
+ typedef typename Traits::degree_size_type degree_size_type;
94
+ typedef iterator_sequence
95
+ < base_in_edge_iterator
96
+ , base_out_edge_iterator
97
+ > in_edge_iterator;
98
+ typedef in_edge_iterator out_edge_iterator;
99
+
100
+ // AdjacencyGraph requirements
101
+ typedef iterator_sequence
102
+ < typename Traits::adjacency_iterator
103
+ , typename BidirectionalGraph::inv_adjacency_iterator
104
+ > adjacency_iterator;
105
+ typedef adjacency_iterator inv_adjacency_iterator;
106
+
107
+ // VertexListGraph requirements
108
+ typedef typename Traits::vertex_iterator vertex_iterator;
109
+
110
+ // EdgeListGraph requirements
111
+ typedef typename Traits::edge_iterator edge_iterator;
112
+ typedef typename Traits::vertices_size_type vertices_size_type;
113
+ typedef typename Traits::edges_size_type edges_size_type;
114
+
115
+ // More typedefs used by detail::edge_property_map, vertex_property_map
116
+ typedef typename BidirectionalGraph::edge_property_type
117
+ edge_property_type;
118
+ typedef typename BidirectionalGraph::vertex_property_type
119
+ vertex_property_type;
120
+ typedef undirected_graph_tag graph_tag;
121
+
122
+ static vertex_descriptor null_vertex()
123
+ { return Traits::null_vertex(); }
124
+
125
+ // Bundled properties support
126
+ typename boost::graph::detail::bundled_result<BidirectionalGraph,
127
+ edge_descriptor>::type&
128
+ operator[](edge_descriptor x)
129
+ { return m_g[x.first]; }
130
+
131
+ typename boost::graph::detail::bundled_result<BidirectionalGraph,
132
+ edge_descriptor>::type const&
133
+ operator[](edge_descriptor x) const
134
+ { return m_g[x.first]; }
135
+
136
+
137
+
138
+ typename boost::graph::detail::bundled_result<BidirectionalGraph,
139
+ vertex_descriptor>::type&
140
+ operator[](vertex_descriptor x)
141
+ { return m_g[x]; }
142
+
143
+ typename boost::graph::detail::bundled_result<BidirectionalGraph,
144
+ vertex_descriptor>::type const&
145
+ operator[](vertex_descriptor x) const
146
+ { return m_g[x]; }
147
+
148
+
149
+ // would be private, but template friends aren't portable enough.
150
+ // private:
151
+ GraphRef m_g;
152
+ };
153
+
154
+ template <class BidirectionalGraph>
155
+ inline undirected_graph<BidirectionalGraph>
156
+ make_undirected_graph(const BidirectionalGraph& g)
157
+ {
158
+ return undirected_graph<BidirectionalGraph>(g);
159
+ }
160
+
161
+ template <class BidirectionalGraph>
162
+ inline undirected_graph<BidirectionalGraph, BidirectionalGraph&>
163
+ make_undirected_graph(BidirectionalGraph& g)
164
+ {
165
+ return undirected_graph<BidirectionalGraph, BidirectionalGraph&>(g);
166
+ }
167
+
168
+ template <class BidirectionalGraph, class GRef>
169
+ std::pair<typename undirected_graph<BidirectionalGraph>::vertex_iterator,
170
+ typename undirected_graph<BidirectionalGraph>::vertex_iterator>
171
+ vertices(const undirected_graph<BidirectionalGraph,GRef>& g)
172
+ {
173
+ return vertices(g.m_g);
174
+ }
175
+
176
+ template <class BidirectionalGraph, class GRef>
177
+ std::pair<typename undirected_graph<BidirectionalGraph>::edge_iterator,
178
+ typename undirected_graph<BidirectionalGraph>::edge_iterator>
179
+ edges(const undirected_graph<BidirectionalGraph,GRef>& g)
180
+ {
181
+ return edges(g.m_g);
182
+ }
183
+
184
+ template <class BidirectionalGraph, class GRef>
185
+ inline std::pair<typename undirected_graph<BidirectionalGraph,GRef>::out_edge_iterator,
186
+ typename undirected_graph<BidirectionalGraph,GRef>::out_edge_iterator>
187
+ out_edges(const typename BidirectionalGraph::vertex_descriptor u,
188
+ const undirected_graph<BidirectionalGraph,GRef>& g)
189
+ {
190
+ std::pair<typename BidirectionalGraph::out_edge_iterator,
191
+ typename BidirectionalGraph::out_edge_iterator>
192
+ out_edges = boost::out_edges(u, g.m_g);
193
+ std::pair<typename BidirectionalGraph::in_edge_iterator,
194
+ typename BidirectionalGraph::in_edge_iterator>
195
+ in_edges = boost::in_edges(u, g.m_g);
196
+
197
+ typedef typename undirected_graph<BidirectionalGraph,GRef>::out_edge_iterator edge_iterator;
198
+ return make_pair(
199
+ edge_iterator(in_edges.first, in_edges.second, out_edges.first, out_edges.first),
200
+ edge_iterator(in_edges.second, in_edges.second, out_edges.second, out_edges.second));
201
+ }
202
+
203
+ template <class BidirectionalGraph, class GRef>
204
+ inline typename BidirectionalGraph::vertices_size_type
205
+ num_vertices(const undirected_graph<BidirectionalGraph,GRef>& g)
206
+ {
207
+ return num_vertices(g.m_g);
208
+ }
209
+
210
+ template <class BidirectionalGraph, class GRef>
211
+ inline typename undirected_graph<BidirectionalGraph>::edges_size_type
212
+ num_edges(const undirected_graph<BidirectionalGraph,GRef>& g)
213
+ {
214
+ return num_edges(g.m_g);
215
+ }
216
+
217
+ template <class BidirectionalGraph, class GRef>
218
+ inline typename BidirectionalGraph::degree_size_type
219
+ out_degree(const typename BidirectionalGraph::vertex_descriptor u,
220
+ const undirected_graph<BidirectionalGraph,GRef>& g)
221
+ {
222
+ return in_degree(u, g.m_g) + out_degree(u, g.m_g);
223
+ }
224
+
225
+ template <class BidirectionalGraph, class GRef>
226
+ inline std::pair<typename BidirectionalGraph::edge_descriptor, bool>
227
+ edge(const typename BidirectionalGraph::vertex_descriptor u,
228
+ const typename BidirectionalGraph::vertex_descriptor v,
229
+ const undirected_graph<BidirectionalGraph,GRef>& g)
230
+ {
231
+ return edge(v, u, g.m_g);
232
+ }
233
+
234
+ template <class BidirectionalGraph, class GRef>
235
+ inline std::pair<typename BidirectionalGraph::out_edge_iterator,
236
+ typename BidirectionalGraph::out_edge_iterator>
237
+ in_edges(const typename BidirectionalGraph::vertex_descriptor u,
238
+ const undirected_graph<BidirectionalGraph,GRef>& g)
239
+ { return out_edges(u, g); }
240
+
241
+ template <class BidirectionalGraph, class GRef>
242
+ inline std::pair<typename undirected_graph<BidirectionalGraph,GRef>::adjacency_iterator,
243
+ typename undirected_graph<BidirectionalGraph,GRef>::adjacency_iterator>
244
+ adjacent_vertices(const typename BidirectionalGraph::vertex_descriptor u,
245
+ const undirected_graph<BidirectionalGraph,GRef>& g)
246
+ {
247
+ std::pair<typename BidirectionalGraph::adjacency_iterator,
248
+ typename BidirectionalGraph::adjacency_iterator>
249
+ adjacency = boost::adjacent_vertices(u, g.m_g);
250
+ std::pair<typename BidirectionalGraph::inv_adjacency_iterator,
251
+ typename BidirectionalGraph::inv_adjacency_iterator>
252
+ inv_adjacency = boost::inv_adjacent_vertices(u, g.m_g);
253
+
254
+ typedef typename undirected_graph<BidirectionalGraph,GRef>::adjacency_iterator adjacency_iterator;
255
+ return std::make_pair(
256
+ adjacency_iterator(adjacency.first, adjacency.second, inv_adjacency.first, inv_adjacency.first),
257
+ adjacency_iterator(adjacency.second, adjacency.second, inv_adjacency.second, inv_adjacency.second));
258
+ }
259
+
260
+ template <class BidirectionalGraph, class GRef>
261
+ inline typename BidirectionalGraph::degree_size_type
262
+ in_degree(const typename BidirectionalGraph::vertex_descriptor u,
263
+ const undirected_graph<BidirectionalGraph,GRef>& g)
264
+ { return out_degree(u, g); }
265
+
266
+ template <class Edge, class BidirectionalGraph, class GRef>
267
+ inline typename boost::graph_traits<BidirectionalGraph>::vertex_descriptor
268
+ source(const Edge& e, const undirected_graph<BidirectionalGraph,GRef>& g)
269
+ {
270
+ if (e.second)
271
+ return target(e.first, g.m_g);
272
+ else
273
+ return source(e.first, g.m_g);
274
+ }
275
+
276
+ template <class Edge, class BidirectionalGraph, class GRef>
277
+ inline typename boost::graph_traits<BidirectionalGraph>::vertex_descriptor
278
+ target(const Edge& e, const undirected_graph<BidirectionalGraph,GRef>& g)
279
+ {
280
+ if (e.second)
281
+ return source(e.first, g.m_g);
282
+ else
283
+ return target(e.first, g.m_g);
284
+ }
285
+
286
+
287
+ namespace detail {
288
+
289
+ struct undirected_graph_vertex_property_selector {
290
+ template <class UndirectedGraph, class Property, class Tag>
291
+ struct bind_ {
292
+ typedef typename UndirectedGraph::base_type Graph;
293
+ typedef boost::property_map<Graph, Tag> PMap;
294
+ typedef typename PMap::type type;
295
+ typedef typename PMap::const_type const_type;
296
+ };
297
+ };
298
+
299
+ struct undirected_graph_edge_property_selector {
300
+ template <class UndirectedGraph, class Property, class Tag>
301
+ struct bind_ {
302
+ typedef typename UndirectedGraph::base_type Graph;
303
+ typedef boost::property_map<Graph, Tag> PMap;
304
+ typedef typename PMap::type type;
305
+ typedef typename PMap::const_type const_type;
306
+ };
307
+ };
308
+
309
+ } // namespace detail
310
+
311
+ /** This class adapts a property map on the edges of a graph to a property map
312
+ * on the edges of the corresponding undirected graph */
313
+ template<typename PropertyMap>
314
+ class undirected_property_map
315
+ {
316
+ public:
317
+ undirected_property_map(PropertyMap pmap)
318
+ : m_map(pmap) {}
319
+
320
+ PropertyMap& map() { return m_map; }
321
+ PropertyMap const& map() const { return m_map; }
322
+
323
+ private:
324
+ PropertyMap m_map;
325
+ };
326
+
327
+ template<typename PropertyMap, typename EdgeDescriptor, typename ValueType>
328
+ void put(undirected_property_map<PropertyMap>& map,
329
+ EdgeDescriptor e, ValueType value)
330
+ { put(map.map(), e.first, value); }
331
+ template<typename PropertyMap, typename EdgeDescriptor>
332
+ typename boost::property_traits<PropertyMap>::value_type
333
+ get(undirected_property_map<PropertyMap> const& map,
334
+ EdgeDescriptor e)
335
+ { return get(map.map(), e.first); }
336
+
337
+ template<typename PropertyMap>
338
+ undirected_property_map<PropertyMap> make_undirected_edge_map(PropertyMap pmap)
339
+ { return undirected_property_map<PropertyMap>(pmap); }
340
+
341
+
342
+ } // namespace utilmm
343
+
344
+ // Include specialization in the boost namespace
345
+ namespace boost {
346
+ template<typename PropertyMap>
347
+ struct property_traits< utilmm::undirected_property_map<PropertyMap> >
348
+ : property_traits<PropertyMap> {};
349
+
350
+ template <>
351
+ struct vertex_property_selector<utilmm::undirected_graph_tag> {
352
+ typedef utilmm::detail::undirected_graph_vertex_property_selector type;
353
+ };
354
+
355
+ template <>
356
+ struct edge_property_selector<utilmm::undirected_graph_tag> {
357
+ typedef utilmm::detail::undirected_graph_edge_property_selector type;
358
+ };
359
+
360
+ namespace detail {
361
+ template<typename BidirGraph, typename GRef, typename Property>
362
+ struct get_property_map_type { };
363
+ template<typename BidirGraph, typename Property>
364
+ struct get_property_map_type<BidirGraph, const BidirGraph&, Property>
365
+ { typedef typename property_map<BidirGraph, Property>::const_type type; };
366
+ template<typename BidirGraph, typename Property>
367
+ struct get_property_map_type<BidirGraph, BidirGraph&, Property>
368
+ { typedef typename property_map<BidirGraph, Property>::type type; };
369
+ }
370
+
371
+ template <class BidirGraph, class GRef, class Property>
372
+ typename detail::get_property_map_type<BidirGraph, GRef, Property>::type
373
+ get(Property p, utilmm::undirected_graph<BidirGraph,GRef>& g)
374
+ {
375
+ return get(p, g.m_g);
376
+ }
377
+
378
+ template <class BidirGraph, class GRef, class Property>
379
+ typename detail::get_property_map_type<BidirGraph, GRef, Property>::type
380
+ get(Property p, const utilmm::undirected_graph<BidirGraph,GRef>& g)
381
+ {
382
+ return get(p, g.m_g);
383
+ }
384
+
385
+ template <class BidirectionalGraph, class GRef, class Property, class Key>
386
+ typename property_traits<
387
+ typename property_map<BidirectionalGraph, Property>::const_type
388
+ >::value_type
389
+ get(Property p, const utilmm::undirected_graph<BidirectionalGraph,GRef>& g, const Key& k)
390
+ {
391
+ return get(p, g.m_g, k);
392
+ }
393
+
394
+ template <class BidirectionalGraph, class GRef, class Property, class Key, class Value>
395
+ void
396
+ put(Property p, const utilmm::undirected_graph<BidirectionalGraph,GRef>& g, const Key& k,
397
+ const Value& val)
398
+ {
399
+ put(p, g.m_g, k, val);
400
+ }
401
+
402
+ template<typename BidirectionalGraph, typename GRef, typename Tag,
403
+ typename Value>
404
+ inline void
405
+ set_property(const utilmm::undirected_graph<BidirectionalGraph,GRef>& g, Tag tag,
406
+ const Value& value)
407
+ {
408
+ set_property(g.m_g, tag, value);
409
+ }
410
+
411
+ template<typename BidirectionalGraph, typename GRef, typename Tag>
412
+ inline
413
+ typename graph_property<BidirectionalGraph, Tag>::type
414
+ get_property(const utilmm::undirected_graph<BidirectionalGraph,GRef>& g, Tag tag)
415
+ {
416
+ return get_property(g.m_g, tag);
417
+ }
418
+
419
+ } // namespace boost
420
+
421
+ #endif
data/lib/roby.rb ADDED
@@ -0,0 +1,41 @@
1
+ # The main namespace for the Roby library. The namespace is divided as follows:
2
+ #
3
+ # [Roby] core namespace for the Roby kernel
4
+ # [Roby::Distributed] parts that are very specific to distributed plan management
5
+ # [Roby::Planning] basic tools for plan generation
6
+ # [Roby::Transactions] implementation of transactions
7
+ # [Roby::EventStructure] event relations
8
+ # [Roby::TaskStructure] task relations
9
+ module Roby
10
+ class BasicObject; end
11
+ class PlanObject < BasicObject; end
12
+ class Plan < BasicObject; end
13
+ class Control; end
14
+ class EventGenerator < PlanObject; end
15
+ class Task < PlanObject; end
16
+ end
17
+
18
+ require 'roby/support'
19
+ require 'roby/task'
20
+ require 'roby/event'
21
+ require 'roby/standard_errors'
22
+
23
+ require 'roby/plan'
24
+ require 'roby/query'
25
+ require 'roby/control'
26
+ require 'roby/decision_control'
27
+
28
+ require 'roby/propagation'
29
+ require 'roby/relations/events'
30
+ require 'roby/relations/hierarchy'
31
+ require 'roby/relations/influence'
32
+ require 'roby/relations/planned_by'
33
+ require 'roby/relations/executed_by'
34
+ require 'roby/relations/ensured'
35
+
36
+ require 'roby/state'
37
+ require 'roby/interface'
38
+
39
+ require 'roby/distributed/protocol'
40
+
41
+ require 'roby/app'