roby 0.8.0 → 3.0.0

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 (644) hide show
  1. checksums.yaml +7 -0
  2. data/.deep-cover.rb +3 -0
  3. data/.gitattributes +1 -0
  4. data/.gitignore +24 -0
  5. data/.simplecov +10 -0
  6. data/.travis.yml +17 -0
  7. data/.yardopts +4 -0
  8. data/Gemfile +15 -0
  9. data/README.md +11 -0
  10. data/Rakefile +47 -177
  11. data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
  12. data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
  13. data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
  14. data/benchmark/{genom.rb → attic/genom.rb} +0 -0
  15. data/benchmark/attic/transactions.rb +62 -0
  16. data/benchmark/plan_basic_operations.rb +28 -0
  17. data/benchmark/relations/graph.rb +63 -0
  18. data/benchmark/ruby/identity.rb +18 -0
  19. data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
  20. data/benchmark/ruby/yield_vs_block.rb +35 -0
  21. data/benchmark/run +5 -0
  22. data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
  23. data/benchmark/transactions.rb +99 -51
  24. data/bin/roby +38 -197
  25. data/bin/roby-display +14 -0
  26. data/bin/roby-log +3 -176
  27. data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
  28. data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
  29. data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
  30. data/doc/guide/{src → attic}/abstraction/index.page +1 -1
  31. data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
  32. data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
  33. data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
  34. data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
  35. data/doc/guide/attic/cycle/error_handling.page +98 -0
  36. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
  37. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
  38. data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
  39. data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
  40. data/doc/guide/{src → attic}/cycle/index.page +1 -1
  41. data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
  42. data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
  43. data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
  44. data/doc/guide/attic/plans/building_plans.page +89 -0
  45. data/doc/guide/attic/plans/code.page +192 -0
  46. data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
  47. data/doc/guide/attic/plans/index.page +7 -0
  48. data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
  49. data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
  50. data/doc/guide/attic/plans/querying_plans.page +5 -0
  51. data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
  52. data/doc/guide/config.yaml +7 -4
  53. data/doc/guide/ext/extended_menu.rb +29 -0
  54. data/doc/guide/ext/init.rb +6 -0
  55. data/doc/guide/ext/rdoc_links.rb +7 -6
  56. data/doc/guide/src/advanced_concepts/history.page +5 -0
  57. data/doc/guide/src/advanced_concepts/index.page +11 -0
  58. data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
  59. data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
  60. data/doc/guide/src/advanced_concepts/transactions.page +5 -0
  61. data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
  62. data/doc/guide/src/base.template +96 -0
  63. data/doc/guide/src/basics_shell_header.txt +5 -7
  64. data/doc/guide/src/building/action_coordination.page +96 -0
  65. data/doc/guide/src/building/actions.page +124 -0
  66. data/doc/guide/src/building/file_layout.page +71 -0
  67. data/doc/guide/src/building/index.page +50 -0
  68. data/doc/guide/src/building/patterns.page +86 -0
  69. data/doc/guide/src/building/patterns_forwarding.png +0 -0
  70. data/doc/guide/src/building/patterns_forwarding.svg +277 -0
  71. data/doc/guide/src/building/runtime.page +95 -0
  72. data/doc/guide/src/building/task_models.page +94 -0
  73. data/doc/guide/src/building/tasks.page +284 -0
  74. data/doc/guide/src/concepts/error_handling.page +100 -0
  75. data/doc/guide/src/concepts/exception_propagation.png +0 -0
  76. data/doc/guide/src/concepts/exception_propagation.svg +445 -0
  77. data/doc/guide/src/concepts/execution.page +85 -0
  78. data/doc/guide/src/concepts/execution.png +0 -0
  79. data/doc/guide/src/concepts/execution.svg +573 -0
  80. data/doc/guide/src/concepts/execution_cycle.png +0 -0
  81. data/doc/guide/src/concepts/garbage_collection.page +57 -0
  82. data/doc/guide/src/concepts/index.page +27 -0
  83. data/doc/guide/src/concepts/plans.page +101 -0
  84. data/doc/guide/src/concepts/policy.page +31 -0
  85. data/doc/guide/src/concepts/reactor.page +61 -0
  86. data/doc/guide/src/concepts/simple_plan_example.png +0 -0
  87. data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
  88. data/doc/guide/src/default.template +9 -74
  89. data/doc/guide/src/event_relations/forward.page +71 -0
  90. data/doc/guide/src/event_relations/index.page +12 -0
  91. data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
  92. data/doc/guide/src/event_relations/signal.page +55 -0
  93. data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
  94. data/doc/guide/src/htmldoc.metainfo +21 -8
  95. data/doc/guide/src/index.page +8 -3
  96. data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
  97. data/doc/guide/src/installation/publications.page +14 -0
  98. data/doc/guide/src/{introduction → installation}/videos.page +14 -7
  99. data/doc/guide/src/interacting/index.page +16 -0
  100. data/doc/guide/src/interacting/run.page +33 -0
  101. data/doc/guide/src/interacting/shell.page +95 -0
  102. data/doc/guide/src/plugins/creating_plugins.page +72 -0
  103. data/doc/guide/src/plugins/index.page +27 -5
  104. data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
  105. data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
  106. data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
  107. data/doc/guide/src/style_screen.css +687 -0
  108. data/doc/guide/src/task_relations/dependency.page +107 -0
  109. data/doc/guide/src/task_relations/executed_by.page +77 -0
  110. data/doc/guide/src/task_relations/index.page +12 -0
  111. data/doc/guide/src/task_relations/new_relations.page +119 -0
  112. data/doc/guide/src/task_relations/planned_by.page +46 -0
  113. data/doc/guide/src/tutorial/app.page +117 -0
  114. data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
  115. data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
  116. data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
  117. data/doc/guide/src/tutorial/events.page +195 -0
  118. data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
  119. data/doc/guide/src/tutorial/index.page +13 -0
  120. data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
  121. data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
  122. data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
  123. data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
  124. data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
  125. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
  126. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
  127. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
  128. data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
  129. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
  130. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
  131. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
  132. data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
  133. data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
  134. data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
  135. data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
  136. data/doc/guide/src/tutorial/relations_display.page +153 -0
  137. data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
  138. data/doc/guide/src/tutorial/shell.page +121 -0
  139. data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
  140. data/doc/guide/src/tutorial/tasks.page +374 -0
  141. data/lib/roby.rb +102 -47
  142. data/lib/roby/actions.rb +17 -0
  143. data/lib/roby/actions/action.rb +80 -0
  144. data/lib/roby/actions/interface.rb +45 -0
  145. data/lib/roby/actions/library.rb +23 -0
  146. data/lib/roby/actions/models/action.rb +224 -0
  147. data/lib/roby/actions/models/coordination_action.rb +58 -0
  148. data/lib/roby/actions/models/interface.rb +22 -0
  149. data/lib/roby/actions/models/interface_base.rb +294 -0
  150. data/lib/roby/actions/models/library.rb +12 -0
  151. data/lib/roby/actions/models/method_action.rb +90 -0
  152. data/lib/roby/actions/task.rb +114 -0
  153. data/lib/roby/and_generator.rb +125 -0
  154. data/lib/roby/app.rb +2795 -829
  155. data/lib/roby/app/autotest_console_reporter.rb +138 -0
  156. data/lib/roby/app/base.rb +21 -0
  157. data/lib/roby/app/cucumber.rb +2 -0
  158. data/lib/roby/app/cucumber/controller.rb +439 -0
  159. data/lib/roby/app/cucumber/helpers.rb +280 -0
  160. data/lib/roby/app/cucumber/world.rb +32 -0
  161. data/lib/roby/app/debug.rb +136 -0
  162. data/lib/roby/app/gen.rb +2 -0
  163. data/lib/roby/app/rake.rb +178 -38
  164. data/lib/roby/app/robot_config.rb +9 -0
  165. data/lib/roby/app/robot_names.rb +115 -0
  166. data/lib/roby/app/run.rb +3 -2
  167. data/lib/roby/app/scripts.rb +72 -0
  168. data/lib/roby/app/scripts/autotest.rb +173 -0
  169. data/lib/roby/app/scripts/display.rb +2 -0
  170. data/lib/roby/app/scripts/restart.rb +52 -0
  171. data/lib/roby/app/scripts/results.rb +17 -8
  172. data/lib/roby/app/scripts/run.rb +155 -24
  173. data/lib/roby/app/scripts/shell.rb +147 -62
  174. data/lib/roby/app/scripts/test.rb +107 -22
  175. data/lib/roby/app/test_reporter.rb +74 -0
  176. data/lib/roby/app/test_server.rb +159 -0
  177. data/lib/roby/app/vagrant.rb +47 -0
  178. data/lib/roby/backports.rb +16 -0
  179. data/lib/roby/cli/display.rb +190 -0
  180. data/lib/roby/cli/exceptions.rb +17 -0
  181. data/lib/roby/cli/gen/actions/class.rb +5 -0
  182. data/lib/roby/cli/gen/actions/test.rb +6 -0
  183. data/lib/roby/cli/gen/app/.yardopts +6 -0
  184. data/lib/roby/cli/gen/app/README.md +28 -0
  185. data/lib/roby/cli/gen/app/Rakefile +15 -0
  186. data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
  187. data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
  188. data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
  189. data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
  190. data/lib/roby/cli/gen/class/class.rb +6 -0
  191. data/lib/roby/cli/gen/class/test.rb +7 -0
  192. data/lib/roby/cli/gen/helpers.rb +203 -0
  193. data/lib/roby/cli/gen/module/module.rb +5 -0
  194. data/lib/roby/cli/gen/module/test.rb +6 -0
  195. data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
  196. data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
  197. data/lib/roby/cli/gen/task/class.rb +44 -0
  198. data/lib/roby/cli/gen/task/test.rb +6 -0
  199. data/lib/roby/cli/gen_main.rb +120 -0
  200. data/lib/roby/cli/log.rb +276 -0
  201. data/lib/roby/cli/log/flamegraph.html +499 -0
  202. data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
  203. data/lib/roby/cli/main.rb +153 -0
  204. data/lib/roby/coordination.rb +60 -0
  205. data/lib/roby/coordination/action_script.rb +25 -0
  206. data/lib/roby/coordination/action_state_machine.rb +125 -0
  207. data/lib/roby/coordination/actions.rb +106 -0
  208. data/lib/roby/coordination/base.rb +145 -0
  209. data/lib/roby/coordination/calculus.rb +40 -0
  210. data/lib/roby/coordination/child.rb +28 -0
  211. data/lib/roby/coordination/event.rb +29 -0
  212. data/lib/roby/coordination/fault_handler.rb +25 -0
  213. data/lib/roby/coordination/fault_handling_task.rb +13 -0
  214. data/lib/roby/coordination/fault_response_table.rb +110 -0
  215. data/lib/roby/coordination/models/action_script.rb +64 -0
  216. data/lib/roby/coordination/models/action_state_machine.rb +224 -0
  217. data/lib/roby/coordination/models/actions.rb +191 -0
  218. data/lib/roby/coordination/models/arguments.rb +55 -0
  219. data/lib/roby/coordination/models/base.rb +176 -0
  220. data/lib/roby/coordination/models/capture.rb +86 -0
  221. data/lib/roby/coordination/models/child.rb +35 -0
  222. data/lib/roby/coordination/models/event.rb +41 -0
  223. data/lib/roby/coordination/models/exceptions.rb +42 -0
  224. data/lib/roby/coordination/models/fault_handler.rb +219 -0
  225. data/lib/roby/coordination/models/fault_response_table.rb +77 -0
  226. data/lib/roby/coordination/models/root.rb +22 -0
  227. data/lib/roby/coordination/models/script.rb +283 -0
  228. data/lib/roby/coordination/models/task.rb +184 -0
  229. data/lib/roby/coordination/models/task_from_action.rb +50 -0
  230. data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
  231. data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
  232. data/lib/roby/coordination/models/task_from_variable.rb +27 -0
  233. data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
  234. data/lib/roby/coordination/models/variable.rb +32 -0
  235. data/lib/roby/coordination/script.rb +200 -0
  236. data/lib/roby/coordination/script_instruction.rb +12 -0
  237. data/lib/roby/coordination/task.rb +45 -0
  238. data/lib/roby/coordination/task_base.rb +69 -0
  239. data/lib/roby/coordination/task_script.rb +293 -0
  240. data/lib/roby/coordination/task_state_machine.rb +308 -0
  241. data/lib/roby/decision_control.rb +33 -21
  242. data/lib/roby/distributed_object.rb +76 -0
  243. data/lib/roby/droby.rb +17 -0
  244. data/lib/roby/droby/droby_id.rb +6 -0
  245. data/lib/roby/droby/enable.rb +153 -0
  246. data/lib/roby/droby/event_logger.rb +189 -0
  247. data/lib/roby/droby/event_logging.rb +57 -0
  248. data/lib/roby/droby/exceptions.rb +14 -0
  249. data/lib/roby/droby/identifiable.rb +22 -0
  250. data/lib/roby/droby/logfile.rb +141 -0
  251. data/lib/roby/droby/logfile/client.rb +176 -0
  252. data/lib/roby/droby/logfile/file_format.md +97 -0
  253. data/lib/roby/droby/logfile/index.rb +117 -0
  254. data/lib/roby/droby/logfile/reader.rb +139 -0
  255. data/lib/roby/droby/logfile/server.rb +199 -0
  256. data/lib/roby/droby/logfile/writer.rb +114 -0
  257. data/lib/roby/droby/marshal.rb +264 -0
  258. data/lib/roby/droby/marshallable.rb +12 -0
  259. data/lib/roby/droby/null_event_logger.rb +25 -0
  260. data/lib/roby/droby/object_manager.rb +205 -0
  261. data/lib/roby/droby/peer_id.rb +6 -0
  262. data/lib/roby/droby/plan_rebuilder.rb +373 -0
  263. data/lib/roby/droby/rebuilt_plan.rb +160 -0
  264. data/lib/roby/droby/remote_droby_id.rb +6 -0
  265. data/lib/roby/droby/timepoints.rb +205 -0
  266. data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
  267. data/lib/roby/droby/timepoints_ctf.rb +125 -0
  268. data/lib/roby/droby/v5.rb +14 -0
  269. data/lib/roby/droby/v5/builtin.rb +120 -0
  270. data/lib/roby/droby/v5/droby_class.rb +45 -0
  271. data/lib/roby/droby/v5/droby_constant.rb +81 -0
  272. data/lib/roby/droby/v5/droby_dump.rb +1026 -0
  273. data/lib/roby/droby/v5/droby_id.rb +44 -0
  274. data/lib/roby/droby/v5/droby_model.rb +82 -0
  275. data/lib/roby/droby/v5/peer_id.rb +10 -0
  276. data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
  277. data/lib/roby/event.rb +79 -957
  278. data/lib/roby/event_constraints.rb +835 -0
  279. data/lib/roby/event_generator.rb +1047 -0
  280. data/lib/roby/event_structure/causal_link.rb +6 -0
  281. data/lib/roby/event_structure/forwarding.rb +6 -0
  282. data/lib/roby/event_structure/precedence.rb +7 -0
  283. data/lib/roby/event_structure/signal.rb +8 -0
  284. data/lib/roby/event_structure/temporal_constraints.rb +640 -0
  285. data/lib/roby/exceptions.rb +446 -152
  286. data/lib/roby/executable_plan.rb +549 -0
  287. data/lib/roby/execution_engine.rb +1997 -950
  288. data/lib/roby/filter_generator.rb +26 -0
  289. data/lib/roby/gui/chronicle_view.rb +225 -0
  290. data/lib/roby/gui/chronicle_widget.rb +925 -0
  291. data/lib/roby/gui/dot_id.rb +11 -0
  292. data/lib/roby/gui/exception_view.rb +44 -0
  293. data/lib/roby/gui/log_display.rb +273 -0
  294. data/lib/roby/gui/model_views.rb +2 -0
  295. data/lib/roby/gui/model_views/action_interface.rb +53 -0
  296. data/lib/roby/gui/model_views/task.rb +47 -0
  297. data/lib/roby/gui/model_views/task.rhtml +41 -0
  298. data/lib/roby/gui/object_info_view.rb +89 -0
  299. data/lib/roby/gui/plan_dot_layout.rb +427 -0
  300. data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
  301. data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
  302. data/lib/roby/gui/relations_view.rb +278 -0
  303. data/lib/roby/gui/relations_view/relations.ui +139 -0
  304. data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
  305. data/lib/roby/gui/relations_view/relations_config.rb +292 -0
  306. data/lib/roby/gui/relations_view/relations_view.ui +53 -0
  307. data/lib/roby/gui/scheduler_view.css +24 -0
  308. data/lib/roby/gui/scheduler_view.rb +46 -0
  309. data/lib/roby/gui/scheduler_view.rhtml +53 -0
  310. data/lib/roby/gui/stepping.rb +93 -0
  311. data/lib/roby/gui/stepping.ui +181 -0
  312. data/lib/roby/gui/styles.rb +81 -0
  313. data/lib/roby/gui/task_display_configuration.rb +42 -0
  314. data/lib/roby/gui/task_state_at.rb +38 -0
  315. data/lib/roby/hooks.rb +26 -0
  316. data/lib/roby/interface.rb +136 -469
  317. data/lib/roby/interface/async.rb +20 -0
  318. data/lib/roby/interface/async/action_monitor.rb +188 -0
  319. data/lib/roby/interface/async/interface.rb +498 -0
  320. data/lib/roby/interface/async/job_monitor.rb +213 -0
  321. data/lib/roby/interface/async/log.rb +238 -0
  322. data/lib/roby/interface/async/new_job_listener.rb +79 -0
  323. data/lib/roby/interface/async/ui_connector.rb +183 -0
  324. data/lib/roby/interface/client.rb +553 -0
  325. data/lib/roby/interface/command.rb +24 -0
  326. data/lib/roby/interface/command_argument.rb +16 -0
  327. data/lib/roby/interface/command_library.rb +92 -0
  328. data/lib/roby/interface/droby_channel.rb +174 -0
  329. data/lib/roby/interface/exceptions.rb +22 -0
  330. data/lib/roby/interface/interface.rb +655 -0
  331. data/lib/roby/interface/job.rb +47 -0
  332. data/lib/roby/interface/rest.rb +10 -0
  333. data/lib/roby/interface/rest/api.rb +29 -0
  334. data/lib/roby/interface/rest/helpers.rb +24 -0
  335. data/lib/roby/interface/rest/server.rb +212 -0
  336. data/lib/roby/interface/server.rb +154 -0
  337. data/lib/roby/interface/shell_client.rb +468 -0
  338. data/lib/roby/interface/shell_subcommand.rb +24 -0
  339. data/lib/roby/interface/subcommand_client.rb +35 -0
  340. data/lib/roby/interface/tcp.rb +168 -0
  341. data/lib/roby/models/arguments.rb +112 -0
  342. data/lib/roby/models/plan_object.rb +83 -0
  343. data/lib/roby/models/task.rb +835 -0
  344. data/lib/roby/models/task_event.rb +62 -0
  345. data/lib/roby/models/task_service.rb +78 -0
  346. data/lib/roby/or_generator.rb +88 -0
  347. data/lib/roby/plan.rb +1751 -864
  348. data/lib/roby/plan_object.rb +611 -0
  349. data/lib/roby/plan_service.rb +200 -0
  350. data/lib/roby/promise.rb +332 -0
  351. data/lib/roby/queries.rb +23 -0
  352. data/lib/roby/queries/and_matcher.rb +32 -0
  353. data/lib/roby/queries/any.rb +27 -0
  354. data/lib/roby/queries/code_error_matcher.rb +58 -0
  355. data/lib/roby/queries/event_generator_matcher.rb +9 -0
  356. data/lib/roby/queries/execution_exception_matcher.rb +165 -0
  357. data/lib/roby/queries/index.rb +165 -0
  358. data/lib/roby/queries/localized_error_matcher.rb +149 -0
  359. data/lib/roby/queries/matcher_base.rb +107 -0
  360. data/lib/roby/queries/none.rb +27 -0
  361. data/lib/roby/queries/not_matcher.rb +30 -0
  362. data/lib/roby/queries/op_matcher.rb +8 -0
  363. data/lib/roby/queries/or_matcher.rb +30 -0
  364. data/lib/roby/queries/plan_object_matcher.rb +363 -0
  365. data/lib/roby/queries/query.rb +188 -0
  366. data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
  367. data/lib/roby/queries/task_matcher.rb +344 -0
  368. data/lib/roby/relations.rb +42 -678
  369. data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
  370. data/lib/roby/relations/directed_relation_support.rb +268 -0
  371. data/lib/roby/relations/event_relation_graph.rb +19 -0
  372. data/lib/roby/relations/fork_merge_visitor.rb +154 -0
  373. data/lib/roby/relations/graph.rb +533 -0
  374. data/lib/roby/relations/models/directed_relation_support.rb +11 -0
  375. data/lib/roby/relations/models/graph.rb +75 -0
  376. data/lib/roby/relations/models/task_relation_graph.rb +18 -0
  377. data/lib/roby/relations/space.rb +380 -0
  378. data/lib/roby/relations/task_relation_graph.rb +20 -0
  379. data/lib/roby/robot.rb +85 -38
  380. data/lib/roby/schedulers/basic.rb +155 -25
  381. data/lib/roby/schedulers/null.rb +20 -0
  382. data/lib/roby/schedulers/reporting.rb +31 -0
  383. data/lib/roby/schedulers/state.rb +129 -0
  384. data/lib/roby/schedulers/temporal.rb +91 -0
  385. data/lib/roby/singletons.rb +87 -0
  386. data/lib/roby/standalone.rb +4 -2
  387. data/lib/roby/standard_errors.rb +405 -82
  388. data/lib/roby/state.rb +6 -3
  389. data/lib/roby/state/conf_model.rb +5 -0
  390. data/lib/roby/state/events.rb +181 -95
  391. data/lib/roby/state/goal_model.rb +77 -0
  392. data/lib/roby/state/open_struct.rb +591 -0
  393. data/lib/roby/state/open_struct_model.rb +68 -0
  394. data/lib/roby/state/pos.rb +45 -45
  395. data/lib/roby/state/shapes.rb +11 -11
  396. data/lib/roby/state/state_model.rb +303 -0
  397. data/lib/roby/state/task.rb +43 -0
  398. data/lib/roby/support.rb +88 -148
  399. data/lib/roby/task.rb +1361 -1750
  400. data/lib/roby/task_arguments.rb +428 -0
  401. data/lib/roby/task_event.rb +127 -0
  402. data/lib/roby/task_event_generator.rb +337 -0
  403. data/lib/roby/task_service.rb +6 -0
  404. data/lib/roby/task_structure/conflicts.rb +104 -0
  405. data/lib/roby/task_structure/dependency.rb +932 -0
  406. data/lib/roby/task_structure/error_handling.rb +118 -0
  407. data/lib/roby/task_structure/executed_by.rb +234 -0
  408. data/lib/roby/task_structure/planned_by.rb +90 -0
  409. data/lib/roby/tasks/aggregator.rb +37 -0
  410. data/lib/roby/tasks/external_process.rb +275 -0
  411. data/lib/roby/tasks/group.rb +27 -0
  412. data/lib/roby/tasks/null.rb +19 -0
  413. data/lib/roby/tasks/parallel.rb +43 -0
  414. data/lib/roby/tasks/sequence.rb +88 -0
  415. data/lib/roby/tasks/simple.rb +21 -0
  416. data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
  417. data/lib/roby/tasks/timeout.rb +17 -0
  418. data/lib/roby/tasks/virtual.rb +55 -0
  419. data/lib/roby/template_plan.rb +7 -0
  420. data/lib/roby/test/aruba_minitest.rb +74 -0
  421. data/lib/roby/test/assertion.rb +16 -0
  422. data/lib/roby/test/assertions.rb +490 -0
  423. data/lib/roby/test/common.rb +368 -591
  424. data/lib/roby/test/dsl.rb +149 -0
  425. data/lib/roby/test/error.rb +18 -0
  426. data/lib/roby/test/event_reporter.rb +83 -0
  427. data/lib/roby/test/execution_expectations.rb +1134 -0
  428. data/lib/roby/test/expect_execution.rb +151 -0
  429. data/lib/roby/test/minitest_helpers.rb +166 -0
  430. data/lib/roby/test/roby_app_helpers.rb +200 -0
  431. data/lib/roby/test/run_planners.rb +155 -0
  432. data/lib/roby/test/self.rb +112 -0
  433. data/lib/roby/test/spec.rb +198 -0
  434. data/lib/roby/test/tasks/empty_task.rb +4 -4
  435. data/lib/roby/test/tasks/goto.rb +28 -27
  436. data/lib/roby/test/teardown_plans.rb +100 -0
  437. data/lib/roby/test/testcase.rb +239 -307
  438. data/lib/roby/test/tools.rb +159 -155
  439. data/lib/roby/test/validate_state_machine.rb +75 -0
  440. data/lib/roby/transaction.rb +1125 -0
  441. data/lib/roby/transaction/event_generator_proxy.rb +63 -0
  442. data/lib/roby/transaction/plan_object_proxy.rb +99 -0
  443. data/lib/roby/transaction/plan_service_proxy.rb +43 -0
  444. data/lib/roby/transaction/proxying.rb +120 -0
  445. data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
  446. data/lib/roby/transaction/task_proxy.rb +135 -0
  447. data/lib/roby/until_generator.rb +30 -0
  448. data/lib/roby/version.rb +5 -0
  449. data/lib/roby/yard.rb +169 -0
  450. data/lib/yard-roby.rb +1 -0
  451. data/manifest.xml +32 -6
  452. data/roby.gemspec +59 -0
  453. metadata +788 -587
  454. data/Manifest.txt +0 -321
  455. data/NOTES +0 -4
  456. data/README.txt +0 -166
  457. data/TODO.txt +0 -146
  458. data/app/README.txt +0 -24
  459. data/app/Rakefile +0 -8
  460. data/app/config/ROBOT.rb +0 -5
  461. data/app/config/init.rb +0 -33
  462. data/app/config/roby.yml +0 -3
  463. data/app/controllers/ROBOT.rb +0 -2
  464. data/app/planners/ROBOT/main.rb +0 -6
  465. data/app/planners/main.rb +0 -5
  466. data/app/scripts/distributed +0 -3
  467. data/app/scripts/generate/bookmarks +0 -3
  468. data/app/scripts/replay +0 -3
  469. data/app/scripts/results +0 -3
  470. data/app/scripts/run +0 -3
  471. data/app/scripts/server +0 -3
  472. data/app/scripts/shell +0 -3
  473. data/app/scripts/test +0 -3
  474. data/app/tasks/.gitattributes +0 -0
  475. data/app/tasks/ROBOT/.gitattributes +0 -0
  476. data/bin/roby-shell +0 -25
  477. data/doc/guide/src/basics/app.page +0 -139
  478. data/doc/guide/src/basics/index.page +0 -11
  479. data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
  480. data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
  481. data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
  482. data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
  483. data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
  484. data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
  485. data/doc/guide/src/basics/relations_display.page +0 -203
  486. data/doc/guide/src/basics/shell.page +0 -102
  487. data/doc/guide/src/default.css +0 -319
  488. data/doc/guide/src/introduction/index.page +0 -29
  489. data/doc/guide/src/introduction/publications.page +0 -14
  490. data/doc/guide/src/relations/dependency.page +0 -89
  491. data/doc/guide/src/relations/index.page +0 -12
  492. data/ext/droby/dump.cc +0 -175
  493. data/ext/droby/extconf.rb +0 -3
  494. data/ext/graph/algorithm.cc +0 -746
  495. data/ext/graph/extconf.rb +0 -7
  496. data/ext/graph/graph.cc +0 -575
  497. data/ext/graph/graph.hh +0 -183
  498. data/ext/graph/iterator_sequence.hh +0 -102
  499. data/ext/graph/undirected_dfs.hh +0 -226
  500. data/ext/graph/undirected_graph.hh +0 -421
  501. data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
  502. data/lib/roby/app/scripts/replay.rb +0 -31
  503. data/lib/roby/app/scripts/server.rb +0 -18
  504. data/lib/roby/basic_object.rb +0 -151
  505. data/lib/roby/config.rb +0 -14
  506. data/lib/roby/distributed.rb +0 -36
  507. data/lib/roby/distributed/base.rb +0 -448
  508. data/lib/roby/distributed/communication.rb +0 -875
  509. data/lib/roby/distributed/connection_space.rb +0 -616
  510. data/lib/roby/distributed/distributed_object.rb +0 -206
  511. data/lib/roby/distributed/drb.rb +0 -62
  512. data/lib/roby/distributed/notifications.rb +0 -531
  513. data/lib/roby/distributed/peer.rb +0 -555
  514. data/lib/roby/distributed/protocol.rb +0 -529
  515. data/lib/roby/distributed/proxy.rb +0 -343
  516. data/lib/roby/distributed/subscription.rb +0 -311
  517. data/lib/roby/distributed/transaction.rb +0 -498
  518. data/lib/roby/external_process_task.rb +0 -225
  519. data/lib/roby/graph.rb +0 -160
  520. data/lib/roby/log.rb +0 -3
  521. data/lib/roby/log/chronicle.rb +0 -303
  522. data/lib/roby/log/console.rb +0 -74
  523. data/lib/roby/log/data_stream.rb +0 -275
  524. data/lib/roby/log/dot.rb +0 -279
  525. data/lib/roby/log/event_stream.rb +0 -161
  526. data/lib/roby/log/file.rb +0 -396
  527. data/lib/roby/log/gui/basic_display.ui +0 -83
  528. data/lib/roby/log/gui/basic_display_ui.rb +0 -89
  529. data/lib/roby/log/gui/chronicle.rb +0 -26
  530. data/lib/roby/log/gui/chronicle_view.rb +0 -40
  531. data/lib/roby/log/gui/chronicle_view.ui +0 -70
  532. data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
  533. data/lib/roby/log/gui/data_displays.rb +0 -171
  534. data/lib/roby/log/gui/data_displays.ui +0 -155
  535. data/lib/roby/log/gui/data_displays_ui.rb +0 -146
  536. data/lib/roby/log/gui/notifications.rb +0 -26
  537. data/lib/roby/log/gui/relations.rb +0 -269
  538. data/lib/roby/log/gui/relations.ui +0 -123
  539. data/lib/roby/log/gui/relations_ui.rb +0 -120
  540. data/lib/roby/log/gui/relations_view.rb +0 -185
  541. data/lib/roby/log/gui/relations_view.ui +0 -149
  542. data/lib/roby/log/gui/relations_view_ui.rb +0 -144
  543. data/lib/roby/log/gui/replay.rb +0 -366
  544. data/lib/roby/log/gui/replay_controls.rb +0 -206
  545. data/lib/roby/log/gui/replay_controls.ui +0 -282
  546. data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
  547. data/lib/roby/log/gui/runtime.rb +0 -130
  548. data/lib/roby/log/hooks.rb +0 -186
  549. data/lib/roby/log/logger.rb +0 -203
  550. data/lib/roby/log/notifications.rb +0 -244
  551. data/lib/roby/log/plan_rebuilder.rb +0 -468
  552. data/lib/roby/log/relations.rb +0 -1084
  553. data/lib/roby/log/server.rb +0 -547
  554. data/lib/roby/log/sqlite.rb +0 -47
  555. data/lib/roby/log/timings.rb +0 -233
  556. data/lib/roby/plan-object.rb +0 -371
  557. data/lib/roby/planning.rb +0 -13
  558. data/lib/roby/planning/loops.rb +0 -309
  559. data/lib/roby/planning/model.rb +0 -1012
  560. data/lib/roby/planning/task.rb +0 -180
  561. data/lib/roby/query.rb +0 -655
  562. data/lib/roby/relations/conflicts.rb +0 -67
  563. data/lib/roby/relations/dependency.rb +0 -358
  564. data/lib/roby/relations/ensured.rb +0 -19
  565. data/lib/roby/relations/error_handling.rb +0 -22
  566. data/lib/roby/relations/events.rb +0 -7
  567. data/lib/roby/relations/executed_by.rb +0 -208
  568. data/lib/roby/relations/influence.rb +0 -10
  569. data/lib/roby/relations/planned_by.rb +0 -63
  570. data/lib/roby/state/information.rb +0 -55
  571. data/lib/roby/state/state.rb +0 -367
  572. data/lib/roby/task-operations.rb +0 -186
  573. data/lib/roby/task_index.rb +0 -80
  574. data/lib/roby/test/distributed.rb +0 -230
  575. data/lib/roby/test/tasks/simple_task.rb +0 -23
  576. data/lib/roby/transactions.rb +0 -507
  577. data/lib/roby/transactions/proxy.rb +0 -325
  578. data/plugins/fault_injection/History.txt +0 -4
  579. data/plugins/fault_injection/README.txt +0 -34
  580. data/plugins/fault_injection/Rakefile +0 -12
  581. data/plugins/fault_injection/TODO.txt +0 -0
  582. data/plugins/fault_injection/app.rb +0 -52
  583. data/plugins/fault_injection/fault_injection.rb +0 -89
  584. data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
  585. data/plugins/subsystems/README.txt +0 -37
  586. data/plugins/subsystems/Rakefile +0 -13
  587. data/plugins/subsystems/app.rb +0 -182
  588. data/plugins/subsystems/test/app/README +0 -24
  589. data/plugins/subsystems/test/app/Rakefile +0 -8
  590. data/plugins/subsystems/test/app/config/app.yml +0 -71
  591. data/plugins/subsystems/test/app/config/init.rb +0 -12
  592. data/plugins/subsystems/test/app/config/roby.yml +0 -3
  593. data/plugins/subsystems/test/app/planners/main.rb +0 -20
  594. data/plugins/subsystems/test/app/scripts/distributed +0 -3
  595. data/plugins/subsystems/test/app/scripts/replay +0 -3
  596. data/plugins/subsystems/test/app/scripts/results +0 -3
  597. data/plugins/subsystems/test/app/scripts/run +0 -3
  598. data/plugins/subsystems/test/app/scripts/server +0 -3
  599. data/plugins/subsystems/test/app/scripts/shell +0 -3
  600. data/plugins/subsystems/test/app/scripts/test +0 -3
  601. data/plugins/subsystems/test/app/tasks/services.rb +0 -15
  602. data/plugins/subsystems/test/test_subsystems.rb +0 -78
  603. data/test/distributed/test_communication.rb +0 -195
  604. data/test/distributed/test_connection.rb +0 -284
  605. data/test/distributed/test_execution.rb +0 -378
  606. data/test/distributed/test_mixed_plan.rb +0 -341
  607. data/test/distributed/test_plan_notifications.rb +0 -238
  608. data/test/distributed/test_protocol.rb +0 -525
  609. data/test/distributed/test_query.rb +0 -106
  610. data/test/distributed/test_remote_plan.rb +0 -491
  611. data/test/distributed/test_transaction.rb +0 -466
  612. data/test/mockups/external_process +0 -28
  613. data/test/mockups/tasks.rb +0 -27
  614. data/test/planning/test_loops.rb +0 -432
  615. data/test/planning/test_model.rb +0 -427
  616. data/test/planning/test_task.rb +0 -126
  617. data/test/relations/test_conflicts.rb +0 -42
  618. data/test/relations/test_dependency.rb +0 -324
  619. data/test/relations/test_ensured.rb +0 -38
  620. data/test/relations/test_executed_by.rb +0 -224
  621. data/test/relations/test_planned_by.rb +0 -56
  622. data/test/suite_core.rb +0 -29
  623. data/test/suite_distributed.rb +0 -10
  624. data/test/suite_planning.rb +0 -4
  625. data/test/suite_relations.rb +0 -8
  626. data/test/tasks/test_external_process.rb +0 -126
  627. data/test/tasks/test_thread_task.rb +0 -70
  628. data/test/test_bgl.rb +0 -528
  629. data/test/test_event.rb +0 -969
  630. data/test/test_exceptions.rb +0 -591
  631. data/test/test_execution_engine.rb +0 -987
  632. data/test/test_gui.rb +0 -20
  633. data/test/test_interface.rb +0 -43
  634. data/test/test_log.rb +0 -125
  635. data/test/test_log_server.rb +0 -133
  636. data/test/test_plan.rb +0 -418
  637. data/test/test_query.rb +0 -424
  638. data/test/test_relations.rb +0 -260
  639. data/test/test_state.rb +0 -432
  640. data/test/test_support.rb +0 -16
  641. data/test/test_task.rb +0 -1181
  642. data/test/test_testcase.rb +0 -138
  643. data/test/test_transactions.rb +0 -610
  644. data/test/test_transactions_proxy.rb +0 -216
@@ -1,7 +0,0 @@
1
- require 'mkmf'
2
- CONFIG['CC'] = "g++"
3
- dir_config 'boost'
4
- $LDFLAGS += "-module"
5
-
6
- create_makefile("roby_bgl")
7
-
@@ -1,575 +0,0 @@
1
- #include "graph.hh"
2
- #include <boost/bind.hpp>
3
- #include <functional>
4
-
5
- static ID id_rb_graph_map;
6
-
7
- typedef RubyGraph::vertex_iterator vertex_iterator;
8
- typedef RubyGraph::vertex_descriptor vertex_descriptor;
9
- typedef RubyGraph::edge_iterator edge_iterator;
10
- typedef RubyGraph::edge_descriptor edge_descriptor;
11
-
12
- using namespace boost;
13
- using namespace std;
14
-
15
- VALUE bglModule;
16
- VALUE bglGraph;
17
- VALUE bglReverseGraph;
18
- VALUE bglUndirectedGraph;
19
- VALUE bglVertex;
20
-
21
- /**********************************************************************
22
- * BGL::Graph
23
- */
24
-
25
- template <typename descriptor> static
26
- void graph_mark_object_property(RubyGraph& graph, descriptor object)
27
- {
28
- }
29
-
30
- static
31
- void graph_mark(RubyGraph* graph) {
32
- { vertex_iterator it, end;
33
- for (tie(it, end) = vertices(*graph); it != end; ++it)
34
- {
35
- VALUE value = (*graph)[*it];
36
- if (! NIL_P(value))
37
- rb_gc_mark(value);
38
- }
39
- }
40
-
41
- { edge_iterator it, end;
42
- for (tie(it, end) = edges(*graph); it != end; ++it)
43
- {
44
- VALUE value = (*graph)[*it].info;
45
- if (! NIL_P(value))
46
- rb_gc_mark(value);
47
- }
48
- }
49
- }
50
-
51
- static void graph_free(RubyGraph* graph) { delete graph; }
52
- static VALUE graph_alloc(VALUE klass)
53
- {
54
- RubyGraph* graph = new RubyGraph;
55
- VALUE rb_graph = Data_Wrap_Struct(klass, graph_mark, graph_free, graph);
56
- return rb_graph;
57
- }
58
-
59
- /*
60
- * call-seq:
61
- * graph.each_vertex { |vertex| ... } => graph
62
- *
63
- * Iterates on all vertices in +graph+.
64
- */
65
- static
66
- VALUE graph_each_vertex(VALUE self)
67
- {
68
- RubyGraph& graph = graph_wrapped(self);
69
-
70
- vertex_iterator begin, end;
71
- tie(begin, end) = vertices(graph);
72
-
73
- for (vertex_iterator it = begin; it != end;)
74
- {
75
- VALUE vertex = graph[*it];
76
- ++it;
77
- rb_yield(vertex);
78
- }
79
- return self;
80
- }
81
-
82
- /* call-seq:
83
- * graph.size => vertex_count
84
- *
85
- * Returns the number of vertices in +graph+
86
- */
87
- static
88
- VALUE graph_size(VALUE self)
89
- {
90
- RubyGraph& graph = graph_wrapped(self);
91
-
92
- vertex_iterator begin, end;
93
- tie(begin, end) = vertices(graph);
94
-
95
- size_t count = 0;
96
- for (vertex_iterator it = begin; it != end; ++it)
97
- ++count;
98
- return UINT2NUM(count);
99
- }
100
-
101
-
102
- /*
103
- * call-seq:
104
- * graph.insert(vertex) => graph
105
- *
106
- * Add +vertex+ in this graph.
107
- */
108
- static
109
- VALUE graph_insert(VALUE self, VALUE vertex)
110
- {
111
- RubyGraph& graph = graph_wrapped(self);
112
- graph_map& vertex_graphs = vertex_descriptor_map(vertex);
113
-
114
- graph_map::iterator it;
115
- bool inserted;
116
- tie(it, inserted) = vertex_graphs.insert( make_pair(self, static_cast<void*>(0)) );
117
- if (inserted)
118
- it->second = add_vertex(vertex, graph);
119
-
120
- return self;
121
- }
122
-
123
- /*
124
- * call-seq:
125
- * graph.remove(vertex) => graph
126
- *
127
- * Remove +vertex+ from this graph.
128
- */
129
- static
130
- VALUE graph_remove(VALUE self, VALUE vertex)
131
- {
132
- RubyGraph& graph = graph_wrapped(self);
133
- graph_map& vertex_graphs = vertex_descriptor_map(vertex);
134
-
135
- graph_map::iterator it = vertex_graphs.find(self);
136
- if (it == vertex_graphs.end())
137
- return self;
138
-
139
- clear_vertex(it->second, graph);
140
- remove_vertex(it->second, graph);
141
- vertex_graphs.erase(it);
142
- return self;
143
- }
144
-
145
- /*
146
- * call-seq: graph.clear => graph
147
- *
148
- * Removes from graph all vertices that are in graph
149
- */
150
- static
151
- VALUE graph_clear(VALUE self)
152
- {
153
- RubyGraph& graph = graph_wrapped(self);
154
-
155
- vertex_iterator begin, end;
156
- tie(begin, end) = vertices(graph);
157
- for (vertex_iterator it = begin; it != end; ++it)
158
- {
159
- VALUE vertex_value = graph[*it];
160
- graph_map& vertex_graphs = vertex_descriptor_map(vertex_value);
161
-
162
- graph_map::iterator it = vertex_graphs.find(self);
163
- vertex_graphs.erase(it);
164
- }
165
- graph.clear();
166
- return self;
167
- }
168
-
169
- /*
170
- * call-seq:
171
- * graph.include?(vertex) => true of false
172
- *
173
- * Returns true if +vertex+ is part of this graph.
174
- */
175
- static
176
- VALUE graph_include_p(VALUE self, VALUE vertex)
177
- {
178
- bool includes;
179
- tie(tuples::ignore, includes) = rb_to_vertex(vertex, self);
180
- return includes ? Qtrue : Qfalse;
181
- }
182
-
183
- // Make sure that the Vertex object +vertex+ is present in +self+, and returns
184
- // its descriptor
185
- static vertex_descriptor graph_ensure_inserted_vertex(VALUE self, VALUE vertex)
186
- {
187
- vertex_descriptor v; bool exists;
188
- tie(v, exists) = rb_to_vertex(vertex, self);
189
- if (! exists)
190
- {
191
- graph_insert(self, vertex);
192
- tie(v, tuples::ignore) = rb_to_vertex(vertex, self);
193
- }
194
-
195
- return v;
196
- }
197
-
198
- /*
199
- * call-seq:
200
- * graph.link(source, target, info) => graph
201
- *
202
- * Adds an edge from +source+ to +target+, with +info+ as property
203
- * Raises ArgumentError if the edge already exists.
204
- */
205
- static
206
- VALUE graph_link(VALUE self, VALUE source, VALUE target, VALUE info)
207
- {
208
- RubyGraph& graph = graph_wrapped(self);
209
-
210
- vertex_descriptor
211
- s = graph_ensure_inserted_vertex(self, source),
212
- t = graph_ensure_inserted_vertex(self, target);
213
-
214
- bool inserted = add_edge(s, t, EdgeProperty(info), graph).second;
215
- if (! inserted)
216
- rb_raise(rb_eArgError, "edge already exists");
217
-
218
- return self;
219
- }
220
-
221
- /*
222
- * call-seq:
223
- * graph.unlink(source, target, info) => graph
224
- *
225
- * Removes the edge from +source+ to +target+. Does nothing if the
226
- * edge does not exist.
227
- */
228
- static
229
- VALUE graph_unlink(VALUE self, VALUE source, VALUE target)
230
- {
231
- RubyGraph& graph = graph_wrapped(self);
232
-
233
- vertex_descriptor s, t; bool exists;
234
- tie(s, exists) = rb_to_vertex(source, self);
235
- if (! exists) return self;
236
- tie(t, exists) = rb_to_vertex(target, self);
237
- if (! exists) return self;
238
- remove_edge(s, t, graph);
239
- return self;
240
- }
241
-
242
- /*
243
- * call-seq:
244
- * graph.linked?(source, target) => true or false
245
- *
246
- * Checks if there is an edge from +source+ to +target+
247
- */
248
- static
249
- VALUE graph_linked_p(VALUE self, VALUE source, VALUE target)
250
- {
251
- RubyGraph& graph = graph_wrapped(self);
252
-
253
- vertex_descriptor s, t; bool exists;
254
- tie(s, exists) = rb_to_vertex(source, self);
255
- if (! exists) return Qfalse;
256
- tie(t, exists) = rb_to_vertex(target, self);
257
- if (! exists) return Qfalse;
258
- return edge(s, t, graph).second ? Qtrue : Qfalse;
259
- }
260
-
261
- /*
262
- * call-seq:
263
- * graph.each_edge { |source, target, info| ... } => graph
264
- *
265
- * Iterates on all edges in this graph. +source+ and +target+ are the
266
- * edge vertices, +info+ is the data associated with the edge. See #link.
267
- */
268
- static
269
- VALUE graph_each_edge(VALUE self)
270
- {
271
- RubyGraph& graph = graph_wrapped(self);
272
-
273
- edge_iterator begin, end;
274
- tie(begin, end) = edges(graph);
275
-
276
- for (edge_iterator it = begin; it != end;)
277
- {
278
- VALUE from = graph[source(*it, graph)];
279
- VALUE to = graph[target(*it, graph)];
280
- VALUE data = graph[*it].info;
281
- ++it;
282
-
283
- rb_yield_values(3, from, to, data);
284
- }
285
- return self;
286
- }
287
-
288
-
289
-
290
-
291
- /**********************************************************************
292
- * BGL::Vertex
293
- */
294
-
295
- static void vertex_free(graph_map* map) { delete map; }
296
- static void vertex_mark(graph_map* map)
297
- {
298
- for (graph_map::iterator it = map->begin(); it != map->end(); ++it)
299
- rb_gc_mark(it->first);
300
- }
301
-
302
- /* Returns the graph => descriptor map for +self+ */
303
- graph_map& vertex_descriptor_map(VALUE self)
304
- {
305
- graph_map* map;
306
- VALUE descriptors = rb_ivar_get(self, id_rb_graph_map);
307
- if (RTEST(descriptors))
308
- {
309
- Data_Get_Struct(descriptors, graph_map, map);
310
- }
311
- else
312
- {
313
- map = new graph_map;
314
- VALUE rb_map = Data_Wrap_Struct(rb_cObject, vertex_mark, vertex_free, map);
315
- rb_ivar_set(self, id_rb_graph_map, rb_map);
316
- }
317
-
318
- return *map;
319
- }
320
-
321
- /*
322
- * call-seq:
323
- * vertex.each_graph { |graph| ... } => self
324
- *
325
- * Iterates on all graphs this object is part of
326
- */
327
- static VALUE vertex_each_graph(VALUE self)
328
- {
329
- graph_map& graphs = vertex_descriptor_map(self);
330
- for (graph_map::iterator it = graphs.begin(); it != graphs.end();)
331
- {
332
- VALUE graph = it->first;
333
- // increment before calling rb_yield since the block
334
- // can call Graph#remove for instance
335
- ++it;
336
- rb_yield(graph);
337
- }
338
- return self;
339
- }
340
-
341
- /*
342
- * call-seq:
343
- * vertex.parent_object?(object[, graph]) => true of false
344
- *
345
- * Checks if +object+ is a parent of +vertex+. If +graph+ is given,
346
- * check only in this graph. Otherwise, check in all graphs +vertex+
347
- * is part of.
348
- */
349
- static VALUE vertex_parent_p(int argc, VALUE* argv, VALUE self)
350
- {
351
- VALUE rb_parent, rb_graph = Qnil;
352
- rb_scan_args(argc, argv, "11", &rb_parent, &rb_graph);
353
-
354
- if (! NIL_P(rb_graph))
355
- return graph_linked_p(rb_graph, rb_parent, self);
356
-
357
- graph_map::iterator it, end;
358
- for (tie(it, end) = vertex_descriptors(self); it != end; ++it)
359
- {
360
- RubyGraph& graph = graph_wrapped(it->first);
361
- vertex_descriptor child = it->second;
362
- vertex_descriptor parent; bool in_graph;
363
- tie(parent, in_graph) = rb_to_vertex(rb_parent, it->first);
364
-
365
- if (in_graph && edge(parent, child, graph).second)
366
- return Qtrue;
367
- }
368
- return Qfalse;
369
- }
370
-
371
- /*
372
- * call-seq:
373
- * vertex.child_vertex?(object[, graph]) => true or false
374
- *
375
- * Checks if +object+ is a child of +vertex+ in +graph+. If +graph+ is given,
376
- * check only in this graph. Otherwise, check in all graphs +vertex+ is part
377
- * of.
378
- */
379
- static VALUE vertex_child_p(int argc, VALUE* argv, VALUE self)
380
- {
381
- swap(argv[0], self);
382
- return vertex_parent_p(argc, argv, self);
383
- }
384
-
385
- /*
386
- * call-seq:
387
- * vertex.related_vertex?(object[, graph]) => true or false
388
- *
389
- * Checks if +object+ is a child or a parent of +vertex+ in +graph+. If
390
- * +graph+ is given, check only in this graph. Otherwise, check in all graphs
391
- * +vertex+ is part of.
392
- */
393
- static VALUE vertex_related_p(int argc, VALUE* argv, VALUE self)
394
- {
395
- if (vertex_parent_p(argc, argv, self) == Qtrue)
396
- return Qtrue;
397
- return vertex_child_p(argc, argv, self);
398
- }
399
-
400
- template <bool directed>
401
- static VALUE vertex_each_related(int argc, VALUE* argv, VALUE self)
402
- {
403
- VALUE graph = Qnil;
404
- rb_scan_args(argc, argv, "01", &graph);
405
-
406
- if (NIL_P(graph))
407
- {
408
- set<VALUE> already_seen;
409
- for_each_graph(self, bind(for_each_adjacent_uniq<RubyGraph, directed>, _1, _2, ref(already_seen)));
410
- }
411
- else
412
- {
413
- vertex_descriptor v; bool exists;
414
- tie(v, exists) = rb_to_vertex(self, graph);
415
- if (! exists)
416
- return self;
417
-
418
- RubyGraph& g = graph_wrapped(graph);
419
- for_each_value(details::vertex_range<RubyGraph, directed>::get(v, g), g, rb_yield);
420
- }
421
- return self;
422
- }
423
-
424
- /*
425
- * call-seq:
426
- * vertex.each_parent_vertex([graph]) { |object| ... } => vertex
427
- *
428
- * Iterates on all parents of +vertex+. If +graph+ is given, only iterate on
429
- * the vertices that are parent in +graph+.
430
- */
431
- static VALUE vertex_each_parent(int argc, VALUE* argv, VALUE self)
432
- { return vertex_each_related<false>(argc, argv, self); }
433
-
434
- /*
435
- * call-seq:
436
- * vertex.each_child_vertex([graph]) { |child| ... } => vertex
437
- *
438
- * Iterates on all children of +vertex+. If +graph+ is given, iterates only on
439
- * the vertices which are a child of +vertex+ in +graph+
440
- */
441
- static VALUE vertex_each_child(int argc, VALUE* argv, VALUE self)
442
- { return vertex_each_related<true>(argc, argv, self); }
443
-
444
- /*
445
- * call-seq:
446
- * vertex.singleton_vertex? => true or false
447
- *
448
- * Returns true if the vertex is linked to no other vertex
449
- */
450
- static VALUE vertex_singleton_p(VALUE self)
451
- {
452
- graph_map::iterator it, end;
453
- for (tie(it, end) = vertex_descriptors(self); it != end; ++it)
454
- {
455
- RubyGraph& graph = graph_wrapped(it->first);
456
- vertex_descriptor v = it->second;
457
- if (in_degree(v, graph) || out_degree(v, graph))
458
- return Qfalse;
459
- }
460
- return Qtrue;
461
- }
462
-
463
- /*
464
- * call-seq:
465
- * vertex[child, graph] => info
466
- *
467
- * Get the data associated with the vertex => +child+ edge in +graph+.
468
- * Raises ArgumentError if there is no such edge.
469
- */
470
- static VALUE vertex_get_info(VALUE self, VALUE child, VALUE rb_graph)
471
- {
472
- vertex_descriptor source, target; bool exists;
473
-
474
- tie(source, exists) = rb_to_vertex(self, rb_graph);
475
- if (! exists)
476
- rb_raise(rb_eArgError, "self is not in graph");
477
- tie(target, exists) = rb_to_vertex(child, rb_graph);
478
- if (! exists)
479
- rb_raise(rb_eArgError, "child is not in graph");
480
-
481
- RubyGraph& graph = graph_wrapped(rb_graph);
482
- edge_descriptor e;
483
- tie(e, exists) = edge(source, target, graph);
484
- if (! exists)
485
- rb_raise(rb_eArgError, "no such edge in graph");
486
-
487
- return graph[e].info;
488
- }
489
-
490
- /*
491
- * call-seq:
492
- * vertex[child, graph] = new_value => new_value
493
- *
494
- * Sets the data associated with the vertex => +child+ edge in +graph+.
495
- * Raises ArgumentError if there is no such edge.
496
- */
497
- static VALUE vertex_set_info(VALUE self, VALUE child, VALUE rb_graph, VALUE new_value)
498
- {
499
- vertex_descriptor source, target; bool exists;
500
-
501
- tie(source, exists) = rb_to_vertex(self, rb_graph);
502
- if (! exists)
503
- rb_raise(rb_eArgError, "self is not in graph");
504
- tie(target, exists) = rb_to_vertex(child, rb_graph);
505
- if (! exists)
506
- rb_raise(rb_eArgError, "child is not in graph");
507
-
508
- RubyGraph& graph = graph_wrapped(rb_graph);
509
- edge_descriptor e;
510
- tie(e, exists) = edge(source, target, graph);
511
- if (! exists)
512
- rb_raise(rb_eArgError, "no such edge in graph");
513
-
514
- return (graph[e].info = new_value);
515
- }
516
-
517
-
518
- /*
519
- * call-seq:
520
- * vertex.root?([graph])
521
- *
522
- * Checks if +vertex+ is a root node in +graph+ (it has no parents), or if graph is not given, in all graphs
523
- */
524
- static VALUE vertex_root_p(int argc, VALUE* argv, VALUE self)
525
- { return vertex_has_adjacent<false>(argc, argv, self); }
526
-
527
-
528
- /*
529
- * call-seq:
530
- * vertex.leaf?([graph])
531
- *
532
- * Checks if +vertex+ is a root node in +graph+ (it has no children), or if graph is not given, in all graphs
533
- */
534
- static VALUE vertex_leaf_p(int argc, VALUE* argv, VALUE self)
535
- { return vertex_has_adjacent<true>(argc, argv, self); }
536
-
537
- void Init_graph_algorithms();
538
- extern "C" void Init_roby_bgl()
539
- {
540
- id_rb_graph_map = rb_intern("@__bgl_graphs__");
541
-
542
- bglModule = rb_define_module("BGL");
543
- bglGraph = rb_define_class_under(bglModule, "Graph", rb_cObject);
544
- rb_define_alloc_func(bglGraph, graph_alloc);
545
-
546
- // Functions to manipulate BGL::Vertex objects in Graphs
547
- rb_define_method(bglGraph, "size", RUBY_METHOD_FUNC(graph_size), 0);
548
- rb_define_method(bglGraph, "insert", RUBY_METHOD_FUNC(graph_insert), 1);
549
- rb_define_method(bglGraph, "remove", RUBY_METHOD_FUNC(graph_remove), 1);
550
- rb_define_method(bglGraph, "include?", RUBY_METHOD_FUNC(graph_include_p), 1);
551
- rb_define_method(bglGraph, "link", RUBY_METHOD_FUNC(graph_link), 3);
552
- rb_define_method(bglGraph, "unlink", RUBY_METHOD_FUNC(graph_unlink), 2);
553
- rb_define_method(bglGraph, "linked?", RUBY_METHOD_FUNC(graph_linked_p), 2);
554
- rb_define_method(bglGraph, "each_vertex", RUBY_METHOD_FUNC(graph_each_vertex), 0);
555
- rb_define_method(bglGraph, "each_edge", RUBY_METHOD_FUNC(graph_each_edge), 0);
556
- rb_define_method(bglGraph, "clear", RUBY_METHOD_FUNC(graph_clear), 0);
557
-
558
- bglVertex = rb_define_module_under(bglModule, "Vertex");
559
- rb_define_method(bglVertex, "related_vertex?", RUBY_METHOD_FUNC(vertex_related_p), -1);
560
- rb_define_method(bglVertex, "parent_vertex?", RUBY_METHOD_FUNC(vertex_parent_p), -1);
561
- rb_define_method(bglVertex, "child_vertex?", RUBY_METHOD_FUNC(vertex_child_p), -1);
562
- rb_define_method(bglVertex, "each_child_vertex", RUBY_METHOD_FUNC(vertex_each_child), -1);
563
- rb_define_method(bglVertex, "each_parent_vertex", RUBY_METHOD_FUNC(vertex_each_parent), -1);
564
- rb_define_method(bglVertex, "each_graph", RUBY_METHOD_FUNC(vertex_each_graph), 0);
565
- rb_define_method(bglVertex, "root?", RUBY_METHOD_FUNC(vertex_root_p), -1);
566
- rb_define_method(bglVertex, "leaf?", RUBY_METHOD_FUNC(vertex_leaf_p), -1);
567
- rb_define_method(bglVertex, "[]", RUBY_METHOD_FUNC(vertex_get_info), 2);
568
- rb_define_method(bglVertex, "[]=", RUBY_METHOD_FUNC(vertex_set_info), 3);
569
- rb_define_method(bglVertex, "singleton_vertex?", RUBY_METHOD_FUNC(vertex_singleton_p), 0);
570
-
571
- bglReverseGraph = rb_define_class_under(bglGraph, "Reverse", rb_cObject);
572
- bglUndirectedGraph = rb_define_class_under(bglGraph, "Undirected", rb_cObject);
573
- Init_graph_algorithms();
574
- }
575
-