gecoder-with-gecode 0.7.1

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 (634) hide show
  1. data/CHANGES +81 -0
  2. data/COPYING +17 -0
  3. data/LGPL-LICENSE +458 -0
  4. data/README +45 -0
  5. data/Rakefile +13 -0
  6. data/example/example_helper.rb +1 -0
  7. data/example/magic_sequence.rb +43 -0
  8. data/example/queens.rb +43 -0
  9. data/example/raw_bindings.rb +42 -0
  10. data/example/send_more_money.rb +43 -0
  11. data/example/send_most_money.rb +58 -0
  12. data/example/square_tiling.rb +84 -0
  13. data/example/sudoku-set.rb +110 -0
  14. data/example/sudoku.rb +61 -0
  15. data/ext/extconf.rb +29 -0
  16. data/ext/gecode-1.3.1/LICENSE +34 -0
  17. data/ext/gecode-1.3.1/Makefile.contribs +71 -0
  18. data/ext/gecode-1.3.1/Makefile.dep +3928 -0
  19. data/ext/gecode-1.3.1/Makefile.in +966 -0
  20. data/ext/gecode-1.3.1/changelog.in +1065 -0
  21. data/ext/gecode-1.3.1/configure +8590 -0
  22. data/ext/gecode-1.3.1/configure.ac +179 -0
  23. data/ext/gecode-1.3.1/configure.ac.in +175 -0
  24. data/ext/gecode-1.3.1/contribs/README +26 -0
  25. data/ext/gecode-1.3.1/contribs/graph/INSTALL +53 -0
  26. data/ext/gecode-1.3.1/contribs/graph/LICENSE +11 -0
  27. data/ext/gecode-1.3.1/contribs/graph/Makefile +167 -0
  28. data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +169 -0
  29. data/ext/gecode-1.3.1/contribs/graph/TODO +28 -0
  30. data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +82 -0
  31. data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +186 -0
  32. data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +257 -0
  33. data/ext/gecode-1.3.1/contribs/graph/configure +2160 -0
  34. data/ext/gecode-1.3.1/contribs/graph/configure.ac +33 -0
  35. data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +1226 -0
  36. data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +132 -0
  37. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +94 -0
  38. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +104 -0
  39. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +105 -0
  40. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +92 -0
  41. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +273 -0
  42. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +311 -0
  43. data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +1 -0
  44. data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +1 -0
  45. data/ext/gecode-1.3.1/contribs/graph/graph.hh +51 -0
  46. data/ext/gecode-1.3.1/contribs/graph/graphutils.h +46 -0
  47. data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +140 -0
  48. data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +1 -0
  49. data/ext/gecode-1.3.1/contribs/graph/path.hh +116 -0
  50. data/ext/gecode-1.3.1/contribs/graph/path.icc +64 -0
  51. data/ext/gecode-1.3.1/contribs/graph/path/path.icc +139 -0
  52. data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +133 -0
  53. data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +341 -0
  54. data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +1 -0
  55. data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +105 -0
  56. data/ext/gecode-1.3.1/contribs/graph/var.icc +106 -0
  57. data/ext/gecode-1.3.1/contribs/graph/view.icc +373 -0
  58. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +162 -0
  59. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +78 -0
  60. data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +349 -0
  61. data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +148 -0
  62. data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +337 -0
  63. data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +493 -0
  64. data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +60 -0
  65. data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +600 -0
  66. data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +135 -0
  67. data/ext/gecode-1.3.1/contribs/map/COMPILING +68 -0
  68. data/ext/gecode-1.3.1/contribs/map/LICENSE +11 -0
  69. data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +173 -0
  70. data/ext/gecode-1.3.1/contribs/map/configure +2285 -0
  71. data/ext/gecode-1.3.1/contribs/map/configure.ac +32 -0
  72. data/ext/gecode-1.3.1/contribs/map/constraints.hh +46 -0
  73. data/ext/gecode-1.3.1/contribs/map/constraints.icc +84 -0
  74. data/ext/gecode-1.3.1/contribs/map/doxygen.conf +1229 -0
  75. data/ext/gecode-1.3.1/contribs/map/doxygen.hh +33 -0
  76. data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +199 -0
  77. data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +1 -0
  78. data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +1 -0
  79. data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
  80. data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +148 -0
  81. data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
  82. data/ext/gecode-1.3.1/contribs/map/examples/map.cc +80 -0
  83. data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +155 -0
  84. data/ext/gecode-1.3.1/contribs/map/map.hh +65 -0
  85. data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +235 -0
  86. data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +771 -0
  87. data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +2 -0
  88. data/ext/gecode-1.3.1/contribs/map/var.icc +346 -0
  89. data/ext/gecode-1.3.1/contribs/map/var/imp.cc +42 -0
  90. data/ext/gecode-1.3.1/contribs/map/var/imp.icc +436 -0
  91. data/ext/gecode-1.3.1/doxygen.conf.in +1225 -0
  92. data/ext/gecode-1.3.1/doxygen.hh.in +877 -0
  93. data/ext/gecode-1.3.1/examples/all-interval-sort.cc +201 -0
  94. data/ext/gecode-1.3.1/examples/all-interval.cc +114 -0
  95. data/ext/gecode-1.3.1/examples/alpha.cc +112 -0
  96. data/ext/gecode-1.3.1/examples/baseline.cc +71 -0
  97. data/ext/gecode-1.3.1/examples/bibd.cc +173 -0
  98. data/ext/gecode-1.3.1/examples/black-hole.cc +281 -0
  99. data/ext/gecode-1.3.1/examples/cars.cc +165 -0
  100. data/ext/gecode-1.3.1/examples/crew.cc +220 -0
  101. data/ext/gecode-1.3.1/examples/crowded-chess.cc +312 -0
  102. data/ext/gecode-1.3.1/examples/donald.cc +93 -0
  103. data/ext/gecode-1.3.1/examples/eq20.cc +111 -0
  104. data/ext/gecode-1.3.1/examples/golf.cc +242 -0
  105. data/ext/gecode-1.3.1/examples/golomb.cc +141 -0
  106. data/ext/gecode-1.3.1/examples/graph-color.cc +371 -0
  107. data/ext/gecode-1.3.1/examples/grocery.cc +107 -0
  108. data/ext/gecode-1.3.1/examples/hamming.cc +107 -0
  109. data/ext/gecode-1.3.1/examples/ind-set.cc +130 -0
  110. data/ext/gecode-1.3.1/examples/knights.cc +146 -0
  111. data/ext/gecode-1.3.1/examples/langfordnum.cc +244 -0
  112. data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +93 -0
  113. data/ext/gecode-1.3.1/examples/magic-sequence.cc +108 -0
  114. data/ext/gecode-1.3.1/examples/magic-square.cc +120 -0
  115. data/ext/gecode-1.3.1/examples/money.cc +92 -0
  116. data/ext/gecode-1.3.1/examples/ortho-latin.cc +156 -0
  117. data/ext/gecode-1.3.1/examples/packing.cc +211 -0
  118. data/ext/gecode-1.3.1/examples/partition.cc +126 -0
  119. data/ext/gecode-1.3.1/examples/photo.cc +155 -0
  120. data/ext/gecode-1.3.1/examples/picture-puzzle.cc +481 -0
  121. data/ext/gecode-1.3.1/examples/queen-armies.cc +240 -0
  122. data/ext/gecode-1.3.1/examples/queens.cc +99 -0
  123. data/ext/gecode-1.3.1/examples/sports-league.cc +454 -0
  124. data/ext/gecode-1.3.1/examples/steiner.cc +148 -0
  125. data/ext/gecode-1.3.1/examples/stress-domain.cc +86 -0
  126. data/ext/gecode-1.3.1/examples/stress-element.cc +95 -0
  127. data/ext/gecode-1.3.1/examples/stress-exec.cc +74 -0
  128. data/ext/gecode-1.3.1/examples/stress-min.cc +84 -0
  129. data/ext/gecode-1.3.1/examples/stress-search.cc +72 -0
  130. data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +282 -0
  131. data/ext/gecode-1.3.1/examples/sudoku-set.cc +162 -0
  132. data/ext/gecode-1.3.1/examples/sudoku.cc +188 -0
  133. data/ext/gecode-1.3.1/examples/sudoku.icc +703 -0
  134. data/ext/gecode-1.3.1/examples/support.cc +160 -0
  135. data/ext/gecode-1.3.1/examples/support.hh +98 -0
  136. data/ext/gecode-1.3.1/examples/support.icc +187 -0
  137. data/ext/gecode-1.3.1/examples/timer.cc +47 -0
  138. data/ext/gecode-1.3.1/examples/timer.hh +72 -0
  139. data/ext/gecode-1.3.1/examples/warehouses.cc +176 -0
  140. data/ext/gecode-1.3.1/extconf.rb +8 -0
  141. data/ext/gecode-1.3.1/gecode.m4 +736 -0
  142. data/ext/gecode-1.3.1/gecode/config.icc.in +50 -0
  143. data/ext/gecode-1.3.1/gecode/int.hh +1426 -0
  144. data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +87 -0
  145. data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +292 -0
  146. data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +213 -0
  147. data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +196 -0
  148. data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +478 -0
  149. data/ext/gecode-1.3.1/gecode/int/array.cc +61 -0
  150. data/ext/gecode-1.3.1/gecode/int/array.icc +264 -0
  151. data/ext/gecode-1.3.1/gecode/int/bool.cc +187 -0
  152. data/ext/gecode-1.3.1/gecode/int/bool.hh +255 -0
  153. data/ext/gecode-1.3.1/gecode/int/bool/base.icc +123 -0
  154. data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +89 -0
  155. data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +132 -0
  156. data/ext/gecode-1.3.1/gecode/int/bool/or.icc +380 -0
  157. data/ext/gecode-1.3.1/gecode/int/branch.cc +81 -0
  158. data/ext/gecode-1.3.1/gecode/int/branch.hh +444 -0
  159. data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +83 -0
  160. data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +76 -0
  161. data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +104 -0
  162. data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +219 -0
  163. data/ext/gecode-1.3.1/gecode/int/channel.cc +62 -0
  164. data/ext/gecode-1.3.1/gecode/int/channel.hh +144 -0
  165. data/ext/gecode-1.3.1/gecode/int/channel/base.icc +60 -0
  166. data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +313 -0
  167. data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +59 -0
  168. data/ext/gecode-1.3.1/gecode/int/channel/val.icc +239 -0
  169. data/ext/gecode-1.3.1/gecode/int/count.cc +174 -0
  170. data/ext/gecode-1.3.1/gecode/int/count.hh +401 -0
  171. data/ext/gecode-1.3.1/gecode/int/count/int.icc +495 -0
  172. data/ext/gecode-1.3.1/gecode/int/count/rel.icc +100 -0
  173. data/ext/gecode-1.3.1/gecode/int/count/view.icc +332 -0
  174. data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +210 -0
  175. data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +118 -0
  176. data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +377 -0
  177. data/ext/gecode-1.3.1/gecode/int/distinct.cc +77 -0
  178. data/ext/gecode-1.3.1/gecode/int/distinct.hh +272 -0
  179. data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +73 -0
  180. data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +335 -0
  181. data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +62 -0
  182. data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +740 -0
  183. data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +96 -0
  184. data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +107 -0
  185. data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +97 -0
  186. data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +171 -0
  187. data/ext/gecode-1.3.1/gecode/int/dom.cc +81 -0
  188. data/ext/gecode-1.3.1/gecode/int/dom.hh +101 -0
  189. data/ext/gecode-1.3.1/gecode/int/dom/range.icc +85 -0
  190. data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +85 -0
  191. data/ext/gecode-1.3.1/gecode/int/element.cc +58 -0
  192. data/ext/gecode-1.3.1/gecode/int/element.hh +203 -0
  193. data/ext/gecode-1.3.1/gecode/int/element/int.icc +396 -0
  194. data/ext/gecode-1.3.1/gecode/int/element/view.icc +443 -0
  195. data/ext/gecode-1.3.1/gecode/int/exception.icc +137 -0
  196. data/ext/gecode-1.3.1/gecode/int/gcc.cc +708 -0
  197. data/ext/gecode-1.3.1/gecode/int/gcc.hh +338 -0
  198. data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +629 -0
  199. data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +504 -0
  200. data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +760 -0
  201. data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +2375 -0
  202. data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +375 -0
  203. data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +687 -0
  204. data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +236 -0
  205. data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +373 -0
  206. data/ext/gecode-1.3.1/gecode/int/int-set.cc +115 -0
  207. data/ext/gecode-1.3.1/gecode/int/int-set.icc +151 -0
  208. data/ext/gecode-1.3.1/gecode/int/linear.cc +247 -0
  209. data/ext/gecode-1.3.1/gecode/int/linear.hh +1056 -0
  210. data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +439 -0
  211. data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +422 -0
  212. data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +311 -0
  213. data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +503 -0
  214. data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +857 -0
  215. data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +264 -0
  216. data/ext/gecode-1.3.1/gecode/int/linear/post.cc +542 -0
  217. data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +255 -0
  218. data/ext/gecode-1.3.1/gecode/int/propagator.icc +194 -0
  219. data/ext/gecode-1.3.1/gecode/int/regular.cc +40 -0
  220. data/ext/gecode-1.3.1/gecode/int/regular.hh +83 -0
  221. data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +466 -0
  222. data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +172 -0
  223. data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +480 -0
  224. data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +738 -0
  225. data/ext/gecode-1.3.1/gecode/int/rel.cc +293 -0
  226. data/ext/gecode-1.3.1/gecode/int/rel.hh +526 -0
  227. data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +640 -0
  228. data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +212 -0
  229. data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +246 -0
  230. data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +188 -0
  231. data/ext/gecode-1.3.1/gecode/int/sortedness.cc +124 -0
  232. data/ext/gecode-1.3.1/gecode/int/sortedness.hh +108 -0
  233. data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +177 -0
  234. data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +243 -0
  235. data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +232 -0
  236. data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +727 -0
  237. data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +666 -0
  238. data/ext/gecode-1.3.1/gecode/int/var-imp.vis +198 -0
  239. data/ext/gecode-1.3.1/gecode/int/var.icc +590 -0
  240. data/ext/gecode-1.3.1/gecode/int/var/bool.icc +52 -0
  241. data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +65 -0
  242. data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +191 -0
  243. data/ext/gecode-1.3.1/gecode/int/var/imp.cc +361 -0
  244. data/ext/gecode-1.3.1/gecode/int/var/imp.icc +579 -0
  245. data/ext/gecode-1.3.1/gecode/int/var/int.cc +63 -0
  246. data/ext/gecode-1.3.1/gecode/int/var/int.icc +135 -0
  247. data/ext/gecode-1.3.1/gecode/int/view.icc +1219 -0
  248. data/ext/gecode-1.3.1/gecode/int/view/bool.icc +270 -0
  249. data/ext/gecode-1.3.1/gecode/int/view/constint.icc +306 -0
  250. data/ext/gecode-1.3.1/gecode/int/view/int.icc +221 -0
  251. data/ext/gecode-1.3.1/gecode/int/view/iter.icc +49 -0
  252. data/ext/gecode-1.3.1/gecode/int/view/minus.icc +285 -0
  253. data/ext/gecode-1.3.1/gecode/int/view/offset.icc +274 -0
  254. data/ext/gecode-1.3.1/gecode/int/view/print.cc +109 -0
  255. data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +215 -0
  256. data/ext/gecode-1.3.1/gecode/int/view/scale.icc +373 -0
  257. data/ext/gecode-1.3.1/gecode/iter.hh +65 -0
  258. data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +130 -0
  259. data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +208 -0
  260. data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +123 -0
  261. data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +143 -0
  262. data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +206 -0
  263. data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +127 -0
  264. data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +96 -0
  265. data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +202 -0
  266. data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +103 -0
  267. data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +138 -0
  268. data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +112 -0
  269. data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +142 -0
  270. data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +224 -0
  271. data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +71 -0
  272. data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +131 -0
  273. data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +211 -0
  274. data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +125 -0
  275. data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +91 -0
  276. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +247 -0
  277. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +227 -0
  278. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +236 -0
  279. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +126 -0
  280. data/ext/gecode-1.3.1/gecode/kernel.hh +141 -0
  281. data/ext/gecode-1.3.1/gecode/kernel/array.icc +954 -0
  282. data/ext/gecode-1.3.1/gecode/kernel/branching.icc +233 -0
  283. data/ext/gecode-1.3.1/gecode/kernel/core.cc +417 -0
  284. data/ext/gecode-1.3.1/gecode/kernel/core.icc +1681 -0
  285. data/ext/gecode-1.3.1/gecode/kernel/exception.cc +49 -0
  286. data/ext/gecode-1.3.1/gecode/kernel/exception.icc +104 -0
  287. data/ext/gecode-1.3.1/gecode/kernel/macros.icc +98 -0
  288. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +41 -0
  289. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +438 -0
  290. data/ext/gecode-1.3.1/gecode/kernel/memory.icc +205 -0
  291. data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +53 -0
  292. data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +680 -0
  293. data/ext/gecode-1.3.1/gecode/kernel/view.icc +583 -0
  294. data/ext/gecode-1.3.1/gecode/limits.hh +87 -0
  295. data/ext/gecode-1.3.1/gecode/minimodel.hh +942 -0
  296. data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +137 -0
  297. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +207 -0
  298. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +191 -0
  299. data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +66 -0
  300. data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +59 -0
  301. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +103 -0
  302. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +192 -0
  303. data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +200 -0
  304. data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +118 -0
  305. data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +241 -0
  306. data/ext/gecode-1.3.1/gecode/search.hh +745 -0
  307. data/ext/gecode-1.3.1/gecode/search/bab.cc +153 -0
  308. data/ext/gecode-1.3.1/gecode/search/bab.icc +101 -0
  309. data/ext/gecode-1.3.1/gecode/search/dfs.cc +63 -0
  310. data/ext/gecode-1.3.1/gecode/search/dfs.icc +144 -0
  311. data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +109 -0
  312. data/ext/gecode-1.3.1/gecode/search/lds.cc +237 -0
  313. data/ext/gecode-1.3.1/gecode/search/lds.icc +57 -0
  314. data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +219 -0
  315. data/ext/gecode-1.3.1/gecode/search/restart.icc +76 -0
  316. data/ext/gecode-1.3.1/gecode/search/statistics.icc +30 -0
  317. data/ext/gecode-1.3.1/gecode/search/stop.cc +58 -0
  318. data/ext/gecode-1.3.1/gecode/search/stop.icc +100 -0
  319. data/ext/gecode-1.3.1/gecode/set.hh +419 -0
  320. data/ext/gecode-1.3.1/gecode/set/array.cc +114 -0
  321. data/ext/gecode-1.3.1/gecode/set/array.icc +134 -0
  322. data/ext/gecode-1.3.1/gecode/set/branch.cc +57 -0
  323. data/ext/gecode-1.3.1/gecode/set/branch.hh +176 -0
  324. data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +72 -0
  325. data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +112 -0
  326. data/ext/gecode-1.3.1/gecode/set/cardinality.cc +49 -0
  327. data/ext/gecode-1.3.1/gecode/set/convex.cc +43 -0
  328. data/ext/gecode-1.3.1/gecode/set/convex.hh +92 -0
  329. data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +81 -0
  330. data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +51 -0
  331. data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +100 -0
  332. data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +52 -0
  333. data/ext/gecode-1.3.1/gecode/set/distinct.cc +48 -0
  334. data/ext/gecode-1.3.1/gecode/set/distinct.hh +97 -0
  335. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +151 -0
  336. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +50 -0
  337. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +46 -0
  338. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +157 -0
  339. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +124 -0
  340. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +58 -0
  341. data/ext/gecode-1.3.1/gecode/set/dom.cc +224 -0
  342. data/ext/gecode-1.3.1/gecode/set/exception.icc +132 -0
  343. data/ext/gecode-1.3.1/gecode/set/int.cc +139 -0
  344. data/ext/gecode-1.3.1/gecode/set/int.hh +226 -0
  345. data/ext/gecode-1.3.1/gecode/set/int/card.cc +61 -0
  346. data/ext/gecode-1.3.1/gecode/set/int/card.icc +54 -0
  347. data/ext/gecode-1.3.1/gecode/set/int/channel.cc +100 -0
  348. data/ext/gecode-1.3.1/gecode/set/int/channel.icc +75 -0
  349. data/ext/gecode-1.3.1/gecode/set/int/match.cc +148 -0
  350. data/ext/gecode-1.3.1/gecode/set/int/match.icc +67 -0
  351. data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +109 -0
  352. data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +63 -0
  353. data/ext/gecode-1.3.1/gecode/set/int/weights.cc +182 -0
  354. data/ext/gecode-1.3.1/gecode/set/int/weights.icc +174 -0
  355. data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +148 -0
  356. data/ext/gecode-1.3.1/gecode/set/projectors.cc +109 -0
  357. data/ext/gecode-1.3.1/gecode/set/projectors.hh +319 -0
  358. data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +841 -0
  359. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +69 -0
  360. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +66 -0
  361. data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +125 -0
  362. data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +79 -0
  363. data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +127 -0
  364. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +96 -0
  365. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +106 -0
  366. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +76 -0
  367. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +53 -0
  368. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +306 -0
  369. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +192 -0
  370. data/ext/gecode-1.3.1/gecode/set/propagator.icc +96 -0
  371. data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +233 -0
  372. data/ext/gecode-1.3.1/gecode/set/rel-op.cc +96 -0
  373. data/ext/gecode-1.3.1/gecode/set/rel-op.hh +267 -0
  374. data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +528 -0
  375. data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +312 -0
  376. data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +131 -0
  377. data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +198 -0
  378. data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +150 -0
  379. data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +151 -0
  380. data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +292 -0
  381. data/ext/gecode-1.3.1/gecode/set/rel.cc +201 -0
  382. data/ext/gecode-1.3.1/gecode/set/rel.hh +250 -0
  383. data/ext/gecode-1.3.1/gecode/set/rel/common.icc +109 -0
  384. data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +101 -0
  385. data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +88 -0
  386. data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +132 -0
  387. data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +142 -0
  388. data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +121 -0
  389. data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +80 -0
  390. data/ext/gecode-1.3.1/gecode/set/select.cc +88 -0
  391. data/ext/gecode-1.3.1/gecode/set/select.hh +113 -0
  392. data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +267 -0
  393. data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +59 -0
  394. data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +91 -0
  395. data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +112 -0
  396. data/ext/gecode-1.3.1/gecode/set/select/inter.icc +300 -0
  397. data/ext/gecode-1.3.1/gecode/set/sequence.cc +48 -0
  398. data/ext/gecode-1.3.1/gecode/set/sequence.hh +97 -0
  399. data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +79 -0
  400. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +83 -0
  401. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +63 -0
  402. data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +61 -0
  403. data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +53 -0
  404. data/ext/gecode-1.3.1/gecode/set/var-imp.vis +205 -0
  405. data/ext/gecode-1.3.1/gecode/set/var.icc +1090 -0
  406. data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +192 -0
  407. data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +235 -0
  408. data/ext/gecode-1.3.1/gecode/set/var/imp.cc +127 -0
  409. data/ext/gecode-1.3.1/gecode/set/var/imp.icc +356 -0
  410. data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +256 -0
  411. data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +512 -0
  412. data/ext/gecode-1.3.1/gecode/set/var/iter.icc +47 -0
  413. data/ext/gecode-1.3.1/gecode/set/var/set.cc +99 -0
  414. data/ext/gecode-1.3.1/gecode/set/var/set.icc +282 -0
  415. data/ext/gecode-1.3.1/gecode/set/view.icc +1075 -0
  416. data/ext/gecode-1.3.1/gecode/set/view/complement.icc +525 -0
  417. data/ext/gecode-1.3.1/gecode/set/view/const.icc +651 -0
  418. data/ext/gecode-1.3.1/gecode/set/view/print.cc +120 -0
  419. data/ext/gecode-1.3.1/gecode/set/view/set.icc +217 -0
  420. data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +348 -0
  421. data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +152 -0
  422. data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +131 -0
  423. data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +157 -0
  424. data/ext/gecode-1.3.1/gecode/support/random.hh +100 -0
  425. data/ext/gecode-1.3.1/gecode/support/shared-array.hh +255 -0
  426. data/ext/gecode-1.3.1/gecode/support/sort.hh +193 -0
  427. data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +240 -0
  428. data/ext/gecode-1.3.1/gecode/support/static-stack.hh +117 -0
  429. data/ext/gecode-1.3.1/install-sh +323 -0
  430. data/ext/gecode-1.3.1/misc/debian/Makefile.am +8 -0
  431. data/ext/gecode-1.3.1/misc/debian/changelog +6 -0
  432. data/ext/gecode-1.3.1/misc/debian/control +11 -0
  433. data/ext/gecode-1.3.1/misc/debian/copyright +44 -0
  434. data/ext/gecode-1.3.1/misc/debian/gecode.info +9 -0
  435. data/ext/gecode-1.3.1/misc/debian/gecode.install +2 -0
  436. data/ext/gecode-1.3.1/misc/debian/gecode.spec +58 -0
  437. data/ext/gecode-1.3.1/misc/debian/rules +81 -0
  438. data/ext/gecode-1.3.1/misc/doxygen/back.png +0 -0
  439. data/ext/gecode-1.3.1/misc/doxygen/footer.html +3 -0
  440. data/ext/gecode-1.3.1/misc/doxygen/gecode-logo-100.png +0 -0
  441. data/ext/gecode-1.3.1/misc/doxygen/header.html +46 -0
  442. data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +460 -0
  443. data/ext/gecode-1.3.1/misc/fixproperties.sh +32 -0
  444. data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +12 -0
  445. data/ext/gecode-1.3.1/misc/gecode-search.pc.in +12 -0
  446. data/ext/gecode-1.3.1/misc/gecode.pc.in +12 -0
  447. data/ext/gecode-1.3.1/misc/genchangelog.perl +190 -0
  448. data/ext/gecode-1.3.1/misc/genlicense.perl +113 -0
  449. data/ext/gecode-1.3.1/misc/genstatistics.perl +155 -0
  450. data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +170 -0
  451. data/ext/gecode-1.3.1/misc/genvarimp.perl +666 -0
  452. data/ext/gecode-1.3.1/misc/getrevision.perl +32 -0
  453. data/ext/gecode-1.3.1/misc/makedepend.perl +66 -0
  454. data/ext/gecode-1.3.1/test/int.cc +497 -0
  455. data/ext/gecode-1.3.1/test/int.hh +119 -0
  456. data/ext/gecode-1.3.1/test/int/arithmetic.cc +262 -0
  457. data/ext/gecode-1.3.1/test/int/basic.cc +42 -0
  458. data/ext/gecode-1.3.1/test/int/bool.cc +189 -0
  459. data/ext/gecode-1.3.1/test/int/channel.cc +79 -0
  460. data/ext/gecode-1.3.1/test/int/count.cc +264 -0
  461. data/ext/gecode-1.3.1/test/int/distinct.cc +121 -0
  462. data/ext/gecode-1.3.1/test/int/dom.cc +69 -0
  463. data/ext/gecode-1.3.1/test/int/element.cc +132 -0
  464. data/ext/gecode-1.3.1/test/int/gcc.cc +592 -0
  465. data/ext/gecode-1.3.1/test/int/linear.cc +315 -0
  466. data/ext/gecode-1.3.1/test/int/minimodel.cc +451 -0
  467. data/ext/gecode-1.3.1/test/int/regular.cc +105 -0
  468. data/ext/gecode-1.3.1/test/int/rel.cc +283 -0
  469. data/ext/gecode-1.3.1/test/int/scheduling.cc +259 -0
  470. data/ext/gecode-1.3.1/test/int/sortedness.cc +272 -0
  471. data/ext/gecode-1.3.1/test/intset.cc +40 -0
  472. data/ext/gecode-1.3.1/test/log.cc +515 -0
  473. data/ext/gecode-1.3.1/test/log.hh +68 -0
  474. data/ext/gecode-1.3.1/test/set.cc +542 -0
  475. data/ext/gecode-1.3.1/test/set.hh +152 -0
  476. data/ext/gecode-1.3.1/test/set/convex.cc +94 -0
  477. data/ext/gecode-1.3.1/test/set/distinct.cc +148 -0
  478. data/ext/gecode-1.3.1/test/set/dom.cc +67 -0
  479. data/ext/gecode-1.3.1/test/set/int.cc +249 -0
  480. data/ext/gecode-1.3.1/test/set/projection.cc +333 -0
  481. data/ext/gecode-1.3.1/test/set/rel-op.cc +662 -0
  482. data/ext/gecode-1.3.1/test/set/rel.cc +198 -0
  483. data/ext/gecode-1.3.1/test/set/select.cc +108 -0
  484. data/ext/gecode-1.3.1/test/set/sequence.cc +83 -0
  485. data/ext/gecode-1.3.1/test/stress.cc +93 -0
  486. data/ext/gecode-1.3.1/test/stress.hh +74 -0
  487. data/ext/gecode-1.3.1/test/stress/distinct.cc +70 -0
  488. data/ext/gecode-1.3.1/test/stress/domain.cc +69 -0
  489. data/ext/gecode-1.3.1/test/stress/exec.cc +60 -0
  490. data/ext/gecode-1.3.1/test/stress/minsort.cc +63 -0
  491. data/ext/gecode-1.3.1/test/stress/regular.cc +112 -0
  492. data/ext/gecode-1.3.1/test/test.cc +215 -0
  493. data/ext/gecode-1.3.1/test/test.hh +107 -0
  494. data/ext/missing.cpp +328 -0
  495. data/ext/missing.h +120 -0
  496. data/ext/vararray.cpp +330 -0
  497. data/ext/vararray.h +149 -0
  498. data/lib/gecoder.rb +5 -0
  499. data/lib/gecoder/bindings.rb +34 -0
  500. data/lib/gecoder/bindings/bindings.rb +2209 -0
  501. data/lib/gecoder/interface.rb +8 -0
  502. data/lib/gecoder/interface/binding_changes.rb +313 -0
  503. data/lib/gecoder/interface/branch.rb +152 -0
  504. data/lib/gecoder/interface/constraints.rb +397 -0
  505. data/lib/gecoder/interface/constraints/bool/boolean.rb +246 -0
  506. data/lib/gecoder/interface/constraints/bool/linear.rb +29 -0
  507. data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +84 -0
  508. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +8 -0
  509. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +75 -0
  510. data/lib/gecoder/interface/constraints/int/arithmetic.rb +71 -0
  511. data/lib/gecoder/interface/constraints/int/domain.rb +78 -0
  512. data/lib/gecoder/interface/constraints/int/linear.rb +295 -0
  513. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +72 -0
  514. data/lib/gecoder/interface/constraints/int_enum/channel.rb +100 -0
  515. data/lib/gecoder/interface/constraints/int_enum/count.rb +92 -0
  516. data/lib/gecoder/interface/constraints/int_enum/distinct.rb +69 -0
  517. data/lib/gecoder/interface/constraints/int_enum/element.rb +82 -0
  518. data/lib/gecoder/interface/constraints/int_enum/equality.rb +38 -0
  519. data/lib/gecoder/interface/constraints/int_enum/sort.rb +126 -0
  520. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +37 -0
  521. data/lib/gecoder/interface/constraints/int_var_constraints.rb +58 -0
  522. data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
  523. data/lib/gecoder/interface/constraints/set/cardinality.rb +75 -0
  524. data/lib/gecoder/interface/constraints/set/connection.rb +193 -0
  525. data/lib/gecoder/interface/constraints/set/domain.rb +109 -0
  526. data/lib/gecoder/interface/constraints/set/operation.rb +132 -0
  527. data/lib/gecoder/interface/constraints/set/relation.rb +178 -0
  528. data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
  529. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +80 -0
  530. data/lib/gecoder/interface/constraints/set_enum/operation.rb +60 -0
  531. data/lib/gecoder/interface/constraints/set_enum/selection.rb +217 -0
  532. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +34 -0
  533. data/lib/gecoder/interface/constraints/set_var_constraints.rb +72 -0
  534. data/lib/gecoder/interface/enum_matrix.rb +64 -0
  535. data/lib/gecoder/interface/enum_wrapper.rb +153 -0
  536. data/lib/gecoder/interface/model.rb +251 -0
  537. data/lib/gecoder/interface/search.rb +123 -0
  538. data/lib/gecoder/interface/variables.rb +254 -0
  539. data/lib/gecoder/version.rb +4 -0
  540. data/specs/binding_changes.rb +76 -0
  541. data/specs/bool_var.rb +74 -0
  542. data/specs/branch.rb +170 -0
  543. data/specs/constraints/arithmetic.rb +266 -0
  544. data/specs/constraints/bool_enum.rb +140 -0
  545. data/specs/constraints/boolean.rb +232 -0
  546. data/specs/constraints/cardinality.rb +154 -0
  547. data/specs/constraints/channel.rb +126 -0
  548. data/specs/constraints/connection.rb +373 -0
  549. data/specs/constraints/constraint_helper.rb +180 -0
  550. data/specs/constraints/constraints.rb +74 -0
  551. data/specs/constraints/count.rb +139 -0
  552. data/specs/constraints/distinct.rb +218 -0
  553. data/specs/constraints/element.rb +106 -0
  554. data/specs/constraints/equality.rb +31 -0
  555. data/specs/constraints/int_domain.rb +69 -0
  556. data/specs/constraints/int_relation.rb +78 -0
  557. data/specs/constraints/linear.rb +332 -0
  558. data/specs/constraints/reification_sugar.rb +96 -0
  559. data/specs/constraints/selection.rb +292 -0
  560. data/specs/constraints/set_domain.rb +181 -0
  561. data/specs/constraints/set_operation.rb +285 -0
  562. data/specs/constraints/set_relation.rb +201 -0
  563. data/specs/constraints/sort.rb +175 -0
  564. data/specs/enum_matrix.rb +43 -0
  565. data/specs/enum_wrapper.rb +122 -0
  566. data/specs/int_var.rb +144 -0
  567. data/specs/logging.rb +24 -0
  568. data/specs/model.rb +190 -0
  569. data/specs/search.rb +246 -0
  570. data/specs/set_var.rb +68 -0
  571. data/specs/spec_helper.rb +93 -0
  572. data/tasks/all_tasks.rb +1 -0
  573. data/tasks/distribution.rake +129 -0
  574. data/tasks/rcov.rake +17 -0
  575. data/tasks/specs.rake +15 -0
  576. data/tasks/svn.rake +11 -0
  577. data/tasks/website.rake +51 -0
  578. data/vendor/rust/README +28 -0
  579. data/vendor/rust/bin/cxxgenerator.rb +93 -0
  580. data/vendor/rust/include/rust_checks.hh +115 -0
  581. data/vendor/rust/include/rust_conversions.hh +102 -0
  582. data/vendor/rust/rust.rb +67 -0
  583. data/vendor/rust/rust/attribute.rb +51 -0
  584. data/vendor/rust/rust/bindings.rb +172 -0
  585. data/vendor/rust/rust/class.rb +339 -0
  586. data/vendor/rust/rust/constants.rb +48 -0
  587. data/vendor/rust/rust/container.rb +110 -0
  588. data/vendor/rust/rust/cppifaceparser.rb +129 -0
  589. data/vendor/rust/rust/cwrapper.rb +72 -0
  590. data/vendor/rust/rust/cxxclass.rb +98 -0
  591. data/vendor/rust/rust/element.rb +81 -0
  592. data/vendor/rust/rust/enum.rb +63 -0
  593. data/vendor/rust/rust/function.rb +407 -0
  594. data/vendor/rust/rust/namespace.rb +61 -0
  595. data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
  596. data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
  597. data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
  598. data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
  599. data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
  600. data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
  601. data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
  602. data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
  603. data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +91 -0
  604. data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
  605. data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
  606. data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
  607. data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
  608. data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
  609. data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
  610. data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
  611. data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
  612. data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
  613. data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
  614. data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
  615. data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
  616. data/vendor/rust/rust/type.rb +98 -0
  617. data/vendor/rust/test/Makefile +4 -0
  618. data/vendor/rust/test/constants.rb +36 -0
  619. data/vendor/rust/test/cppclass.cc +45 -0
  620. data/vendor/rust/test/cppclass.hh +67 -0
  621. data/vendor/rust/test/cppclass.rb +59 -0
  622. data/vendor/rust/test/cwrapper.c +74 -0
  623. data/vendor/rust/test/cwrapper.h +41 -0
  624. data/vendor/rust/test/cwrapper.rb +56 -0
  625. data/vendor/rust/test/dummyclass.hh +31 -0
  626. data/vendor/rust/test/lib/extension-test.rb +98 -0
  627. data/vendor/rust/test/operators.cc +41 -0
  628. data/vendor/rust/test/operators.hh +39 -0
  629. data/vendor/rust/test/operators.rb +39 -0
  630. data/vendor/rust/test/test-constants.rb +43 -0
  631. data/vendor/rust/test/test-cppclass.rb +82 -0
  632. data/vendor/rust/test/test-cwrapper.rb +80 -0
  633. data/vendor/rust/test/test-operators.rb +42 -0
  634. metadata +826 -0
@@ -0,0 +1,118 @@
1
+ /*
2
+ * Main authors:
3
+ * Mikael Lagerkvist <lagerkvist@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Mikael Lagerkvist, 2005
7
+ *
8
+ * Bugfixes provided by:
9
+ * Olof Sivertsson <olof@olofsivertsson.com>
10
+ *
11
+ * Last modified:
12
+ * $Date: 2006-08-04 16:05:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
13
+ * $Revision: 3513 $
14
+ *
15
+ * This file is part of Gecode, the generic constraint
16
+ * development environment:
17
+ * http://www.gecode.org
18
+ *
19
+ * See the file "LICENSE" for information on usage and
20
+ * redistribution of this file, and for a
21
+ * DISCLAIMER OF ALL WARRANTIES.
22
+ *
23
+ */
24
+
25
+ namespace Gecode { namespace MiniModel {
26
+
27
+ template <class A>
28
+ inline
29
+ Matrix<A>::Slice::Slice(Matrix<A>& a,
30
+ unsigned int fc, unsigned int tc,
31
+ unsigned int fr, unsigned int tr)
32
+ : _r(0), _fc(fc), _tc(tc), _fr(fr), _tr(tr) {
33
+ if (tc > a.width() || tr > a.height())
34
+ throw ArgumentOutOfRange("MiniModel::Matrix::Slice::Slice");
35
+ if (fc >= tc || fr >= tr)
36
+ throw ArgumentOutOfRange("MiniModel::Matrix::Slice::Slice");
37
+
38
+ _r = args_type((tc-fc)*(tr-fr));
39
+
40
+ int i = 0;
41
+ for (unsigned int h = fr; h < tr; ++h) {
42
+ for (unsigned int w = fc; w < tc; ++w) {
43
+ _r[i++] = a(w, h);
44
+ }
45
+ }
46
+ }
47
+
48
+ template <class A>
49
+ inline
50
+ Matrix<A>::Slice::operator typename Matrix<A>::args_type(void) {
51
+ return _r;
52
+ }
53
+ template <class A>
54
+ inline
55
+ Matrix<A>::Slice::operator Matrix<typename Matrix<A>::args_type>(void) {
56
+ return Matrix<args_type>(_r, _tc-_fc, _tr-_fr);
57
+ }
58
+
59
+
60
+ template <class A>
61
+ inline
62
+ Matrix<A>::Matrix(A a, unsigned int w, unsigned int h)
63
+ : _a(a), _w(w), _h(h) {
64
+ if (_w * _h != static_cast<unsigned int>(_a.size()))
65
+ throw ArgumentSizeMismatch("MiniModel::Matrix::Matrix(A, w, h)");
66
+ }
67
+
68
+ template <class A>
69
+ inline
70
+ Matrix<A>::Matrix(A a, unsigned int n)
71
+ : _a(a), _w(n), _h(n) {
72
+ if (n*n != static_cast<unsigned int>(_a.size()))
73
+ throw ArgumentSizeMismatch("MiniModel::Matrix::Matrix(A, n)");
74
+ }
75
+
76
+ template <class A>
77
+ inline unsigned int
78
+ Matrix<A>::width(void) const { return _w; }
79
+ template <class A>
80
+ inline unsigned int
81
+ Matrix<A>::height(void) const { return _h; }
82
+ template <class A>
83
+ inline typename Matrix<A>::args_type const
84
+ Matrix<A>::get_array(void) {
85
+ return args_type(_a);
86
+ }
87
+
88
+ template <class A>
89
+ inline typename Matrix<A>::value_type&
90
+ Matrix<A>::operator()(unsigned int c, unsigned int r) {
91
+ if (c >= _w || r >= _h)
92
+ throw ArgumentOutOfRange("MiniModel::Matrix::operator()");
93
+
94
+ return _a[r*_w + c];
95
+ }
96
+
97
+ template <class A>
98
+ inline typename Matrix<A>::Slice
99
+ Matrix<A>::slice(unsigned int fc, unsigned int tc,
100
+ unsigned int fr, unsigned int tr) {
101
+ return Slice(*this, fc, tc, fr, tr);
102
+ }
103
+
104
+ template <class A>
105
+ inline typename Matrix<A>::args_type
106
+ Matrix<A>::row(int r) {
107
+ return slice(0, width(), r, r+1);
108
+ }
109
+
110
+ template <class A>
111
+ inline typename Matrix<A>::args_type
112
+ Matrix<A>::col(int c) {
113
+ return slice(c, c+1, 0, height());
114
+ }
115
+
116
+ }}
117
+
118
+ // STATISTICS: minimodel-any
@@ -0,0 +1,241 @@
1
+ /*
2
+ * Main authors:
3
+ * Mikael Lagerkvist <lagerkvist@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Mikael Lagerkvist, 2005
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-09-04 14:13:40 +0200 (Mon, 04 Sep 2006) $ by $Author: zayenz $
10
+ * $Revision: 3584 $
11
+ *
12
+ * This file is part of Gecode, the generic constraint
13
+ * development environment:
14
+ * http://www.gecode.org
15
+ *
16
+ * See the file "LICENSE" for information on usage and
17
+ * redistribution of this file, and for a
18
+ * DISCLAIMER OF ALL WARRANTIES.
19
+ *
20
+ */
21
+
22
+ #include "gecode/minimodel.hh"
23
+
24
+ #include <algorithm>
25
+
26
+ namespace Gecode {
27
+
28
+ using namespace Int;
29
+
30
+ void
31
+ producer_consumer(Space *home,
32
+ const IntVarArgs& produce_date, const IntArgs& produce_amount,
33
+ const IntVarArgs& consume_date, const IntArgs& consume_amount,
34
+ int initial, IntConLevel cl)
35
+ {
36
+ if (produce_date.size() != produce_amount.size() ||
37
+ consume_date.size() != consume_amount.size())
38
+ throw new ArgumentSizeMismatch("Minimodel::producer_consumer");
39
+
40
+ int ntasks = produce_date.size() + consume_date.size();
41
+
42
+ IntArgs machine(ntasks), height(ntasks), limit(1);
43
+ IntVarArgs start(ntasks), duration(ntasks), end(ntasks);
44
+
45
+ int i = 0;
46
+ int sum_height = initial;
47
+ if (initial < Limits::Int::int_min ||
48
+ initial > Limits::Int::int_max)
49
+ throw new NumericalOverflow("MiniModel::producer_consumer");
50
+
51
+ int maxval = 0;
52
+ for (int j = produce_date.size(); j--; )
53
+ maxval = std::max(produce_date[i].max(), maxval);
54
+ for (int j = consume_date.size(); j--; )
55
+ maxval = std::max(consume_date[j].max(), maxval);
56
+ ++maxval;
57
+
58
+ IntVar minvar = IntVar(home, 0, 0);
59
+ IntVar maxvar = IntVar(home, maxval, maxval);
60
+
61
+
62
+ // Construct producer tasks
63
+ for (int k = produce_date.size(); k--; ++i) {
64
+ sum_height += produce_amount[k];
65
+ machine[i] = 0;
66
+
67
+ start[i] = minvar;
68
+ end[i] = produce_date[k];
69
+ duration[i] = IntVar(home, end[i].min(), end[i].max());
70
+ height[i] = produce_amount[k];
71
+ if (height[i] < Limits::Int::int_min ||
72
+ height[i] > Limits::Int::int_max)
73
+ throw new NumericalOverflow("MiniModel::producer_consumer");
74
+ }
75
+
76
+ // Construct consumer tasks
77
+ for (int k = consume_date.size(); k--; ++i) {
78
+ machine[i] = 0;
79
+
80
+ start[i] = consume_date[k];
81
+ end[i] = maxvar;
82
+ duration[i] = IntVar(home, maxval - start[i].max(),
83
+ maxval - start[i].min());
84
+ height[i] = consume_amount[k];
85
+ if (height[i] < Limits::Int::int_min ||
86
+ height[i] > Limits::Int::int_max)
87
+ throw new NumericalOverflow("MiniModel::producer_consumer");
88
+ }
89
+
90
+ limit[0] = sum_height;
91
+
92
+ cumulatives(home, machine, start, duration, end, height, limit, true, cl);
93
+ }
94
+
95
+
96
+ namespace {
97
+ /// Delayed optimized construction of constant value.
98
+ class ConstVar {
99
+ Space *home_;
100
+ int val_;
101
+ public:
102
+ ConstVar(Space *home, int val) : home_(home), val_(val) {}
103
+
104
+ operator int() { return val_; }
105
+ operator IntVar() { return IntVar(home_, val_, val_); }
106
+ };
107
+
108
+ /// Return an IntVar representing the constant value \a val
109
+ IntVar make_intvar(Space *home, int val)
110
+ {
111
+ return IntVar(home, val, val);
112
+ }
113
+
114
+ /// Return the IntVar \a iv directly
115
+ IntVar make_intvar(Space *home, IntVar iv)
116
+ {
117
+ return iv;
118
+ }
119
+
120
+ template<class Duration, class Height>
121
+ void
122
+ post_cumulative(Space *home, const IntVarArgs& start, const Duration& duration,
123
+ const Height& height, int limit, bool at_most, IntConLevel cl)
124
+ {
125
+ if (start.size() != duration.size() ||
126
+ duration.size() != height.size())
127
+ throw new ArgumentSizeMismatch("MiniModel::cumulative");
128
+
129
+ if (limit < Limits::Int::int_min ||
130
+ limit > Limits::Int::int_max)
131
+ throw new NumericalOverflow("MiniModel::cumulative");
132
+
133
+ int n = start.size() + !at_most;
134
+ IntArgs m(n), l(1, limit);
135
+ IntVarArgs s(n), d(n), e(n);
136
+ Height h(n);
137
+
138
+ if (!at_most) {
139
+ int smin = Limits::Int::int_max,
140
+ smax = Limits::Int::int_min,
141
+ emin = Limits::Int::int_max,
142
+ emax = Limits::Int::int_min;
143
+ IntVarArgs end(n-1);
144
+ for (int i = start.size(); i--; ) {
145
+ m[i] = 0;
146
+ s[i] = start[i];
147
+ smin = std::min(s[i].min(), smin);
148
+ smax = std::max(s[i].max(), smax);
149
+ d[i] = make_intvar(home, duration[i]);
150
+ e[i] = IntVar(home, Limits::Int::int_min, Limits::Int::int_max);
151
+ end[i] = e[i];
152
+ emin = std::min(e[i].min(), emin);
153
+ emax = std::max(e[i].max(), emax);
154
+ h[i] = height[i];
155
+ }
156
+ m[n-1] = 0;
157
+ s[n-1] = IntVar(home, smin, smax);
158
+ d[n-1] = IntVar(home, 0, emax - smin);
159
+ e[n-1] = IntVar(home, emin, emax);
160
+ h[n-1] = ConstVar(home, 0);
161
+
162
+ min(home, start, s[n-1]);
163
+ max(home, end, e[n-1]);
164
+ } else {
165
+ for (int i = start.size(); i--; ) {
166
+ m[i] = 0;
167
+ s[i] = start[i];
168
+ d[i] = make_intvar(home, duration[i]);
169
+ e[i] = IntVar(home, s[i].min()+d[i].min(), s[i].max()+d[i].max());
170
+ h[i] = height[i];
171
+ }
172
+ }
173
+
174
+ cumulatives(home, m, s, d, e, h, l, at_most, cl);
175
+ }
176
+
177
+ }
178
+
179
+ void
180
+ cumulative(Space *home, const IntVarArgs& start, const IntVarArgs& duration,
181
+ const IntVarArgs& height, int limit, bool at_most, IntConLevel cl)
182
+ {
183
+ post_cumulative(home, start, duration, height, limit, at_most, cl);
184
+ }
185
+
186
+ void
187
+ cumulative(Space *home, const IntVarArgs& start, const IntArgs& duration,
188
+ const IntVarArgs& height, int limit, bool at_most, IntConLevel cl)
189
+ {
190
+ post_cumulative(home, start, duration, height, limit, at_most, cl);
191
+ }
192
+
193
+ void
194
+ cumulative(Space *home, const IntVarArgs& start, const IntVarArgs& duration,
195
+ const IntArgs& height, int limit, bool at_most, IntConLevel cl)
196
+ {
197
+ post_cumulative(home, start, duration, height, limit, at_most, cl);
198
+ }
199
+
200
+ void
201
+ cumulative(Space *home, const IntVarArgs& start, const IntArgs& duration,
202
+ const IntArgs& height, int limit, bool at_most, IntConLevel cl)
203
+ {
204
+ post_cumulative(home, start, duration, height, limit, at_most, cl);
205
+ }
206
+
207
+
208
+ namespace {
209
+ template <class Duration>
210
+ void
211
+ post_serialized(Space *home, const IntVarArgs& start, const Duration& duration,
212
+ IntConLevel cl)
213
+ {
214
+ if (start.size() != duration.size())
215
+ throw new ArgumentSizeMismatch("MiniModel::serialized");
216
+
217
+ IntArgs height(start.size());
218
+ for (int i = start.size(); i--; ) height[i] = 1;
219
+
220
+ post_cumulative(home, start, duration, height, 1, true, cl);
221
+ }
222
+ }
223
+
224
+ void
225
+ serialized(Space *home, const IntVarArgs& start, const IntVarArgs& duration,
226
+ IntConLevel cl)
227
+ {
228
+ post_serialized(home, start, duration, cl);
229
+ }
230
+
231
+
232
+ void
233
+ serialized(Space *home, const IntVarArgs& start, const IntArgs& duration,
234
+ IntConLevel cl)
235
+ {
236
+ post_serialized(home, start, duration, cl);
237
+ }
238
+
239
+ }
240
+
241
+ // STATISTICS: minimodel-any
@@ -0,0 +1,745 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ * Guido Tack <tack@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2002
8
+ * Guido Tack, 2004
9
+ *
10
+ * Last modified:
11
+ * $Date: 2006-08-04 16:06:38 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
12
+ * $Revision: 3516 $
13
+ *
14
+ * This file is part of Gecode, the generic constraint
15
+ * development environment:
16
+ * http://www.gecode.org
17
+ *
18
+ * See the file "LICENSE" for information on usage and
19
+ * redistribution of this file, and for a
20
+ * DISCLAIMER OF ALL WARRANTIES.
21
+ *
22
+ */
23
+
24
+ #ifndef __GECODE_SEARCH_HH__
25
+ #define __GECODE_SEARCH_HH__
26
+
27
+ #include <ctime>
28
+
29
+ #include "gecode/kernel.hh"
30
+
31
+ /*
32
+ * Support for DLLs under Windows
33
+ *
34
+ */
35
+
36
+ #if !defined(GECODE_STATIC_LIBS) && \
37
+ (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
38
+
39
+ #ifdef GECODE_BUILD_SEARCH
40
+ #define GECODE_SEARCH_EXPORT __declspec( dllexport )
41
+ #else
42
+ #define GECODE_SEARCH_EXPORT __declspec( dllimport )
43
+ #endif
44
+
45
+ #else
46
+
47
+ #ifdef GCC_HASCLASSVISIBILITY
48
+
49
+ #define GECODE_SEARCH_EXPORT __attribute__ ((visibility("default")))
50
+
51
+ #else
52
+
53
+ #define GECODE_SEARCH_EXPORT
54
+
55
+ #endif
56
+ #endif
57
+
58
+ #include "gecode/support/dynamic-stack.hh"
59
+
60
+ namespace Gecode {
61
+
62
+ /// %Search engines
63
+ namespace Search {
64
+
65
+ /**
66
+ * \brief %Search configuration
67
+ *
68
+ * \ingroup TaskIntSearch
69
+ */
70
+ namespace Config {
71
+ /// Create a clone after every \a c_d commits
72
+ const unsigned int c_d = 8;
73
+ /// Create a clone during recomputation if distance is greater than \a a_d
74
+ const unsigned int a_d = 2;
75
+ }
76
+
77
+ /**
78
+ * \brief %Search engine statistics
79
+ * \ingroup TaskIntSearch
80
+ */
81
+ class Statistics {
82
+ public:
83
+ /// Number of propagation steps
84
+ unsigned long int propagate;
85
+ /// Number of failed nodes in search tree
86
+ unsigned long int fail;
87
+ /// Number of clones created
88
+ unsigned long int clone;
89
+ /// Number of commit operations performed
90
+ unsigned long int commit;
91
+ /// Peak memory allocated
92
+ size_t memory;
93
+ /// Initialize with all numbers zero
94
+ Statistics(void);
95
+ };
96
+
97
+
98
+ /**
99
+ * \defgroup TaskIntSearchStop Stop-objects for stopping search
100
+ * \ingroup TaskIntSearch
101
+ *
102
+ * Allows to specify various criteria when a search engine should
103
+ * stop exploration. Only exploration but neither recomputation
104
+ * nor propagation will be interrupted.
105
+ *
106
+ */
107
+
108
+ /**
109
+ * \brief Base-class for %Stop-object
110
+ * \ingroup TaskIntSearchStop
111
+ */
112
+ class GECODE_SEARCH_EXPORT Stop {
113
+ public:
114
+ /// Default constructor
115
+ Stop(void);
116
+ /// Stop search, if returns true (can be based on statistics \a s)
117
+ virtual bool stop(const Statistics& s) = 0;
118
+ /// Destructor
119
+ virtual ~Stop(void);
120
+ };
121
+
122
+ /**
123
+ * \brief %Stop-object based on memory consumption
124
+ *
125
+ * \ingroup TaskIntSearchStop
126
+ */
127
+ class GECODE_SEARCH_EXPORT MemoryStop : public Stop {
128
+ protected:
129
+ /// Size limit
130
+ size_t l;
131
+ public:
132
+ /// Stop if memory limit \a l (in bytes) is exceeded
133
+ MemoryStop(size_t l);
134
+ /// Return current limit
135
+ size_t limit(void) const;
136
+ /// Set current limit to \a l (in bytes)
137
+ void limit(size_t l);
138
+ /// Return true if memory limit is exceeded
139
+ virtual bool stop(const Statistics& s);
140
+ };
141
+
142
+ /**
143
+ * \brief %Stop-object based on number of failures
144
+ *
145
+ * The number of failures reported (by the statistics) is the
146
+ * number since the engine started exploration. It is not the
147
+ * number since the last stop!
148
+ * \ingroup TaskIntSearchStop
149
+ */
150
+ class GECODE_SEARCH_EXPORT FailStop : public Stop {
151
+ protected:
152
+ /// Failure limit
153
+ unsigned long int l;
154
+ public:
155
+ /// Stop if failure limit \a l is exceeded
156
+ FailStop(unsigned long int l);
157
+ /// Return current limit
158
+ unsigned long int limit(void) const;
159
+ /// Set current limit to \a l failures
160
+ void limit(unsigned long int l);
161
+ /// Return true if failure limit is exceeded
162
+ virtual bool stop(const Statistics& s);
163
+ };
164
+
165
+ /**
166
+ * \brief %Stop-object based on time
167
+ * \ingroup TaskIntSearchStop
168
+ */
169
+ class GECODE_SEARCH_EXPORT TimeStop : public Stop {
170
+ protected:
171
+ /// Clock when execution should stop
172
+ clock_t s;
173
+ /// Current limit in milliseconds
174
+ unsigned long int l;
175
+ public:
176
+ /// Stop if search exceeds \a l milliseconds (from creation of this object)
177
+ TimeStop(unsigned long int l);
178
+ /// Return current limit in milliseconds
179
+ unsigned long int limit(void) const;
180
+ /// Set current limit to \a l milliseconds
181
+ void limit(unsigned long int l);
182
+ /// Reset time to zero
183
+ void reset(void);
184
+ /// Return true if time limit is exceeded
185
+ virtual bool stop(const Statistics& s);
186
+ };
187
+
188
+
189
+ /**
190
+ * \brief %Search engine control including memory information
191
+ */
192
+ class EngineCtrl : public Statistics {
193
+ protected:
194
+ /// %Stop-object to be used
195
+ Stop* st;
196
+ /// Whether engine has been stopped
197
+ bool _stopped;
198
+ /// Memory required for a single space
199
+ size_t mem_space;
200
+ /// Memory for the current space (including memory for caching)
201
+ size_t mem_cur;
202
+ /// Current total memory
203
+ size_t mem_total;
204
+ public:
205
+ /// Initialize with stop-object \a st and space size \a sz
206
+ EngineCtrl(Stop* st, size_t sz);
207
+ /// Reset stop information
208
+ void start(void);
209
+ /// Check whether engine must be stopped (with additional stackspace \a sz)
210
+ bool stop(size_t sz);
211
+ /// Check whether engine has been stopped
212
+ bool stopped(void) const;
213
+ /// New space \a s and branching description \a d get pushed on stack
214
+ void push(const Space* s, const BranchingDesc* d);
215
+ /// Space \a s1 is replaced by space \a s2 due to constraining
216
+ void constrained(const Space* s1, const Space* s2);
217
+ /// New space \a s is added for adaptive recomputation
218
+ void adapt(const Space* s);
219
+ /// Space \a s and branching description \a d get popped from stack
220
+ void pop(const Space* s, const BranchingDesc* d);
221
+ /// Space \a s gets used for LAO (removed from stack)
222
+ void lao(const Space* s);
223
+ /// Space \a s becomes current space (\a s = NULL: current space deleted)
224
+ void current(const Space* s);
225
+ /// Reset statistics for space \a s
226
+ void reset(const Space* s);
227
+ };
228
+
229
+ /**
230
+ * \brief %Search tree node for recomputation
231
+ *
232
+ */
233
+ class ReCoNode {
234
+ protected:
235
+ /// Space corresponding to this node (might be NULL)
236
+ Space* _space;
237
+ /// Current alternative
238
+ unsigned int _alt;
239
+ /// Braching description
240
+ const BranchingDesc* _desc;
241
+ public:
242
+ /// Node for space \a s with clone \a c (possibly NULL)
243
+ ReCoNode(Space* s, Space* c);
244
+
245
+ /// Return space for node
246
+ Space* space(void) const;
247
+ /// Set space to \a s
248
+ void space(Space* s);
249
+
250
+ /// Return branching description
251
+ const BranchingDesc* desc(void) const;
252
+
253
+ /// Return number for alternatives
254
+ unsigned int alt(void) const;
255
+ /// Test whether current alternative is rightmost
256
+ bool rightmost(void) const;
257
+ /// Move to next alternative
258
+ void next(void);
259
+
260
+ /// Free memory for node
261
+ void dispose(void);
262
+ };
263
+
264
+
265
+ /**
266
+ * \brief Stack of nodes supporting recomputation
267
+ *
268
+ * Maintains the invariant that it contains
269
+ * the path of the node being currently explored. This
270
+ * is required to support recomputation, of course.
271
+ *
272
+ * The stack supports adaptive recomputation controlled
273
+ * by the value of a_d: only if the recomputation
274
+ * distance is at least this large, an additional
275
+ * clone is created.
276
+ *
277
+ */
278
+ class ReCoStack {
279
+ private:
280
+ /// Stack to store node information
281
+ Support::DynamicStack<ReCoNode> ds;
282
+ /// Adaptive recomputation distance
283
+ const unsigned int a_d;
284
+ public:
285
+ /// Initialize with adaptive recomputation distance \a a_d
286
+ ReCoStack(unsigned int a_d);
287
+ /// Push space \a c (a clone of \a s or NULL)
288
+ const BranchingDesc* push(Space* s, Space* c);
289
+ /// Generate path for next node and return whether a next node exists
290
+ bool next(EngineCtrl& s);
291
+ /// Return position on stack of last copy
292
+ int lc(Space*& s) const;
293
+ /// Unwind the stack up to position \a l (after failure)
294
+ void unwind(int l);
295
+ /// Commit space \a s as described by stack entry at position \a i
296
+ void commit(Space* s, int i) const;
297
+ /**
298
+ * \brief Recompute space according to path with copying distance \a d
299
+ *
300
+ * The template parameter \a constrained describes whether the stack
301
+ * might contain spaces not propagated (from constraining during
302
+ * branch-and-bound).
303
+ */
304
+ template <bool constrained>
305
+ Space* recompute(unsigned int& d, EngineCtrl& s);
306
+ /// Return number of entries on stack
307
+ int entries(void) const;
308
+ /// Return stack size used
309
+ size_t stacksize(void) const;
310
+ /// Reset stack
311
+ void reset(void);
312
+ };
313
+
314
+ /**
315
+ * \brief Depth-first search engine implementation
316
+ *
317
+ */
318
+ class DfsEngine : public EngineCtrl {
319
+ private:
320
+ /// Recomputation stack of nodes
321
+ ReCoStack rcs;
322
+ /// Current space being explored
323
+ Space* cur;
324
+ /// Copying recomputation distance
325
+ const unsigned int c_d;
326
+ /// Distance until next clone
327
+ unsigned int d;
328
+ public:
329
+ /**
330
+ * \brief Initialize engine
331
+ * \param c_d minimal recomputation distance
332
+ * \param a_d adaptive recomputation distance
333
+ * \param st %Stop-object
334
+ * \param sz size of one space
335
+ */
336
+ DfsEngine(unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
337
+ /// Initialize engine to start at space \a s
338
+ void init(Space* s);
339
+ /// Reset engine to restart at space \a s
340
+ void reset(Space* s);
341
+ /// %Search for next solution
342
+ Space* explore(void);
343
+ /// Return stack size used by engine
344
+ size_t stacksize(void) const;
345
+ /// Destructor
346
+ ~DfsEngine(void);
347
+ };
348
+
349
+ /**
350
+ * \brief Depth-first search engine
351
+ *
352
+ * This class implements depth-first exploration for spaces. In order to
353
+ * use depth-first search on subclasses of Space, additional
354
+ * functionality providing the necessary typecasts is available
355
+ * in Gecode::DFS.
356
+ */
357
+ class GECODE_SEARCH_EXPORT DFS {
358
+ protected:
359
+ /// Engine used for exploration
360
+ DfsEngine e;
361
+ public:
362
+ /**
363
+ * \brief Initialize search engine
364
+ * \param s root node (subclass of Space)
365
+ * \param c_d minimal recomputation distance
366
+ * \param a_d adaptive recomputation distance
367
+ * \param st %Stop-object
368
+ * \param sz size of one space
369
+ */
370
+ DFS(Space* s, unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
371
+ /// Return next solution (NULL, if none exists or search has been stopped)
372
+ Space* next(void);
373
+ /// Return statistics
374
+ Statistics statistics(void) const;
375
+ /// Check whether engine has been stopped
376
+ bool stopped(void) const;
377
+ };
378
+
379
+ }
380
+
381
+ /**
382
+ * \brief Depth-first search engine
383
+ *
384
+ * This class supports depth-first search for subclasses \a T of
385
+ * Space.
386
+ * \ingroup TaskIntSearch
387
+ */
388
+ template <class T>
389
+ class DFS : public Search::DFS {
390
+ public:
391
+ /**
392
+ * \brief Initialize search engine
393
+ * \param s root node (subclass of Space)
394
+ * \param c_d minimal recomputation distance
395
+ * \param a_d adaptive recomputation distance
396
+ * \param st %Stop-object
397
+ */
398
+ DFS(T* s,
399
+ unsigned int c_d=Search::Config::c_d,
400
+ unsigned int a_d=Search::Config::a_d,
401
+ Search::Stop* st=NULL);
402
+ /// Return next solution (NULL, if none exists or search has been stopped)
403
+ T* next(void);
404
+ };
405
+
406
+ /**
407
+ * \brief Invoke depth-first search engine
408
+ * \param s root node (subclass \a T of Space)
409
+ * \param c_d minimal recomputation distance
410
+ * \param a_d adaptive recomputation distance
411
+ * \param st %Stop-object
412
+ * \ingroup TaskIntSearch
413
+ */
414
+ template <class T>
415
+ T* dfs(T* s,
416
+ unsigned int c_d=Search::Config::c_d,
417
+ unsigned int a_d=Search::Config::a_d,
418
+ Search::Stop* st=NULL);
419
+
420
+
421
+
422
+ namespace Search {
423
+
424
+ /**
425
+ * \brief Probing engine for %LDS
426
+ *
427
+ */
428
+ class ProbeEngine : public EngineCtrl {
429
+ protected:
430
+ /// %Node in the search tree for %LDS
431
+ class ProbeNode {
432
+ private:
433
+ /// %Space of current node
434
+ Space* _space;
435
+ /// Branching description
436
+ const BranchingDesc* _desc;
437
+ /// Next alternative to try
438
+ unsigned int _alt;
439
+ public:
440
+ /// Initialize with node \a s, description \a d, and alternative \a a
441
+ ProbeNode(Space* s, const BranchingDesc* d, unsigned int a);
442
+ /// Return space
443
+ Space* space(void) const;
444
+ /// Return branching description
445
+ const BranchingDesc* desc(void) const;
446
+ /// Return next alternative
447
+ unsigned int alt(void) const;
448
+ /// %Set next alternative
449
+ void next(void);
450
+ };
451
+ /// %Stack storing current path in search tree
452
+ Support::DynamicStack<ProbeNode> ds;
453
+ /// Current space
454
+ Space* cur;
455
+ /// Current discrepancy
456
+ unsigned int d;
457
+ public:
458
+ /// Initialize for spaces of size \a s
459
+ ProbeEngine(Stop* st, size_t s);
460
+ /// Initialize with space \a s and discrepancy \a d
461
+ void init(Space* s, unsigned int d);
462
+ /// Reset with space \a s and discrepancy \a d
463
+ void reset(Space* s, unsigned int d);
464
+ /// Return stack size used by engine
465
+ size_t stacksize(void) const;
466
+ /// Destructor
467
+ ~ProbeEngine(void);
468
+ /// %Search for next solution
469
+ Space* explore(void);
470
+ };
471
+
472
+ /**
473
+ * \brief Limited discrepancy search engine
474
+ */
475
+ class GECODE_SEARCH_EXPORT LDS {
476
+ protected:
477
+ Space* root; ///< Root node for problem
478
+ unsigned int d_cur; ///< Current discrepancy
479
+ unsigned int d_max; ///< Maximal discrepancy
480
+ bool no_solution; ///< Solution found for current discrepancy
481
+ ProbeEngine e; ///< The probe engine
482
+ public:
483
+ /** Initialize engine
484
+ * \param s root node
485
+ * \param d maximal discrepancy
486
+ * \param st %Stop-object
487
+ * \param sz size of space
488
+ */
489
+ LDS(Space* s, unsigned int d, Stop* st, size_t sz);
490
+ /// Return next solution (NULL, if none exists or search has been stopped)
491
+ Space* next(void);
492
+ /// Return statistics
493
+ Statistics statistics(void) const;
494
+ /// Check whether engine has been stopped
495
+ bool stopped(void) const;
496
+ /// Destructor
497
+ ~LDS(void);
498
+ };
499
+
500
+ }
501
+
502
+ /**
503
+ * \brief Limited discrepancy search engine
504
+ * \ingroup TaskIntSearch
505
+ */
506
+ template <class T>
507
+ class LDS : public Search::LDS {
508
+ public:
509
+ /** \brief Initialize engine
510
+ * \param s root node (subclass \a T of Space)
511
+ * \param d maximal discrepancy
512
+ * \param st %Stop-object
513
+ */
514
+ LDS(T* s, unsigned int d, Search::Stop* st=NULL);
515
+ /// Return next solution (NULL, if none exists or search has been stopped)
516
+ T* next(void);
517
+ };
518
+
519
+ /**
520
+ * \brief Invoke limited-discrepancy search
521
+ * \param s root node (subclass \a T of Space)
522
+ * \param d maximum number of discrepancies
523
+ * \param st %Stop-object
524
+ * \ingroup TaskIntSearch
525
+ */
526
+ template <class T>
527
+ T* lds(T* s,unsigned int d, Search::Stop* st=NULL);
528
+
529
+
530
+
531
+
532
+
533
+ /*
534
+ * Best solution search engines
535
+ *
536
+ */
537
+
538
+ namespace Search {
539
+
540
+ /**
541
+ * \brief Implementation of depth-first branch-and-bound search engines
542
+ */
543
+ class BabEngine : public EngineCtrl {
544
+ public:
545
+ /// Status of the explore function
546
+ enum ExploreStatus {
547
+ ES_SOLUTION,
548
+ ES_CONSTRAIN
549
+ };
550
+ private:
551
+ /// Recomputation stack of nodes
552
+ ReCoStack rcs;
553
+ /// Current space being explored
554
+ Space* cur;
555
+ /// Number of entries not yet constrained to be better
556
+ int mark;
557
+ /// Record which current operation is in progress
558
+ ExploreStatus es;
559
+ /// Best solution found so far
560
+ Space* best;
561
+ /// Copying recomputation distance
562
+ const unsigned int c_d;
563
+ /// Distance until next clone
564
+ unsigned int d;
565
+ public:
566
+ /**
567
+ * \brief Initialize engine
568
+ * \param c_d minimal recomputation distance
569
+ * \param a_d adaptive recomputation distance
570
+ * \param st %Stop-object
571
+ * \param sz size of one space
572
+ */
573
+ BabEngine(unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
574
+ /// Initialize engine to start at space \a s
575
+ void init(Space* s);
576
+ /**
577
+ * \brief %Search for next better solution
578
+ *
579
+ * If \c ES_SOLUTION is returned, a next better solution has been found.
580
+ * This solution is available from \a s1.
581
+ *
582
+ * If \c ES_CONSTRAIN is returned, the engine requires that the
583
+ * space \a s1 is constrained to be better by the so-far best
584
+ * solution \a s2.
585
+ *
586
+ */
587
+ GECODE_SEARCH_EXPORT
588
+ ExploreStatus explore(Space*& s1, Space*& s2);
589
+ /// Return stack size used by engine
590
+ size_t stacksize(void) const;
591
+ /// Destructor
592
+ ~BabEngine(void);
593
+ };
594
+
595
+ /**
596
+ * \brief Depth-first branch-and-bound search engine
597
+ *
598
+ * This class implements depth-first branch-and-bound exploration
599
+ * for spaces. In order to use it on subclasses of Space, additional
600
+ * functionality providing the necessary typecasts is available
601
+ * in Gecode::BAB:
602
+ *
603
+ */
604
+ class GECODE_SEARCH_EXPORT BAB {
605
+ protected:
606
+ /// Engine used for exploration
607
+ BabEngine e;
608
+ public:
609
+ /**
610
+ * \brief Initialize engine
611
+ * \param s root node
612
+ * \param c_d minimal recomputation distance
613
+ * \param a_d adaptive recomputation distance
614
+ * \param st %Stop-object
615
+ * \param sz size of one space
616
+ */
617
+ BAB(Space* s, unsigned int c_d, unsigned int a_d, Stop* st, size_t sz);
618
+ /// Check whether engine has been stopped
619
+ bool stopped(void) const;
620
+ /// Return statistics
621
+ Statistics statistics(void) const;
622
+ };
623
+
624
+ }
625
+
626
+ /**
627
+ * \brief Depth-first branch-and-bound search engine
628
+ * \ingroup TaskIntSearch
629
+ */
630
+ template <class T>
631
+ class BAB : public Search::BAB {
632
+ public:
633
+ /**
634
+ * \brief Initialize engine
635
+ * \param s Root node (subclass \a T of Space).
636
+ * Additionally, \a s must implement
637
+ * a member function \code void constrain(T* t) \endcode
638
+ * Whenever exploration requires to add a constraint
639
+ * to the space \a c currently being explored, the engine
640
+ * executes \c c->constrain(t) where \a t is the so-far
641
+ * best solution.
642
+ * \param c_d Minimal recomputation distance
643
+ * \param a_d Adaptive recomputation distance
644
+ * \param st %Stop-object
645
+ */
646
+ BAB(T* s,
647
+ unsigned int c_d=Search::Config::c_d,
648
+ unsigned int a_d=Search::Config::a_d,
649
+ Search::Stop* st=NULL);
650
+ /// Return next better solution (NULL, if none exists or search has been stopped)
651
+ T* next(void);
652
+ };
653
+
654
+ /**
655
+ * \brief Perform depth-first branch-and-bound search
656
+ * \param s root node (subclass \a T of Space).
657
+ * Additionally, \a s must implement
658
+ * a member function \code void constrain(T* t) \endcode
659
+ * Whenever exploration requires to add a constraint
660
+ * to the space \a c currently being explored, the engine
661
+ * executes \c c->constrain(t) where \a t is the so-far
662
+ * best solution.
663
+ * \param c_d minimal recomputation distance
664
+ * \param a_d adaptive recomputation distance
665
+ * \param st %Stop-object
666
+ * \ingroup TaskIntSearch
667
+ */
668
+ template <class T>
669
+ T* bab(T* s,
670
+ unsigned int c_d=Search::Config::c_d,
671
+ unsigned int a_d=Search::Config::a_d,
672
+ Search::Stop* st=NULL);
673
+
674
+
675
+
676
+ /**
677
+ * \brief Depth-first restart best solution search engine
678
+ * \ingroup TaskIntSearch
679
+ */
680
+ template <class T>
681
+ class Restart : public DFS<T> {
682
+ protected:
683
+ /// Root node
684
+ Space* root;
685
+ /// So-far best solution
686
+ Space* best;
687
+ public:
688
+ /**
689
+ * \brief Initialize engine
690
+ * \param s root node (subclass \a T of Space).
691
+ * Additionally, \a s must implement
692
+ * a member function \code void constrain(T* t) \endcode
693
+ * Whenever exploration requires to add a constraint
694
+ * to the space \a c currently being explored, the engine
695
+ * executes \c c->constrain(t) where \a t is the so-far
696
+ * best solution.
697
+ * \param c_d minimal recomputation distance
698
+ * \param a_d adaptive recomputation distance
699
+ * \param st %Stop-object
700
+ */
701
+ Restart(T* s,
702
+ unsigned int c_d=Search::Config::c_d,
703
+ unsigned int a_d=Search::Config::a_d,
704
+ Search::Stop* st=NULL);
705
+ /// Destructor
706
+ ~Restart(void);
707
+ /// Return next better solution (NULL, if none exists or search has been stopped)
708
+ T* next(void);
709
+ };
710
+
711
+ /**
712
+ * \brief Perform depth-first restart best solution search
713
+ * \param s root node (subclass \a T of Space).
714
+ * Additionally, \a s must implement
715
+ * a member function \code void constrain(T* t) \endcode
716
+ * Whenever exploration requires to add a constraint
717
+ * to the space \a c currently being explored, the engine
718
+ * executes \c c->constrain(t) where \a t is the so-far
719
+ * best solution.
720
+ * \param c_d minimal recomputation distance
721
+ * \param a_d adaptive recomputation distance
722
+ * \param st %Stop-object
723
+ */
724
+ template <class T>
725
+ T* restart(T* s,
726
+ unsigned int c_d=Search::Config::c_d,
727
+ unsigned int a_d=Search::Config::a_d,
728
+ Search::Stop* st=NULL);
729
+
730
+ }
731
+
732
+ #include "gecode/search/statistics.icc"
733
+ #include "gecode/search/stop.icc"
734
+ #include "gecode/search/engine-ctrl.icc"
735
+
736
+ #include "gecode/search/reco-stack.icc"
737
+
738
+ #include "gecode/search/dfs.icc"
739
+ #include "gecode/search/lds.icc"
740
+ #include "gecode/search/bab.icc"
741
+ #include "gecode/search/restart.icc"
742
+
743
+ #endif
744
+
745
+ // STATISTICS: search-any