roby 0.7

Sign up to get free protection for your applications and to get access to all the features.
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'