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,240 @@
1
+ /*
2
+ * Main authors:
3
+ * Mikael Lagerkvist <lagerkvist@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Mikael Lagerkvist, 2006
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-10-25 10:29:03 +0200 (Wed, 25 Oct 2006) $ by $Author: tack $
10
+ * $Revision: 3783 $
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
+
23
+ #include "examples/support.hh"
24
+ #include "gecode/set.hh"
25
+ #include "gecode/minimodel.hh"
26
+
27
+
28
+ /** \name Constant sets for attacking queens.
29
+ *
30
+ * \relates QueenArmies
31
+ */
32
+ IntSet *A;
33
+
34
+ /**
35
+ * \brief %Example: Peacable co-existing armies of queens.
36
+ *
37
+ * The goal of this problem is to place as many white and black queens
38
+ * on a chess-board without any two queens of different color
39
+ * attacking each other. The number of black queens should
40
+ * be greater than or equal to the number of white queens.
41
+ *
42
+ * This model is based on the one presented in "Models and Symmetry
43
+ * Breaking for 'Peaceable Armies of Queens'", by Barbara M. Smith, Karen
44
+ * E. Petrie, and Ian P. Gent.
45
+ *
46
+ * The smart version uses a custom branching implementing a heuristic
47
+ * from the above paper, that helps speeding up the proof of
48
+ * optimality.
49
+ *
50
+ * \ingroup Example
51
+ *
52
+ */
53
+ class QueenArmies : public Example {
54
+ public:
55
+ const int n;
56
+ SetVar U, ///< Set of un-attacked squares
57
+ W; ///< Set of squares occupied by white queens
58
+ BoolVarArray w, ///< The placement of the white queens
59
+ b; ///< The placement of the black queens
60
+ IntVar q; ///< The number of white queens placed.
61
+
62
+ QueenArmies(const Options& o) :
63
+ n(o.size),
64
+ U(this, IntSet::empty, IntSet(0, n*n)),
65
+ W(this, IntSet::empty, IntSet(0, n*n)),
66
+ w(this, n*n, 0, 1),
67
+ b(this, n*n, 0, 1),
68
+ q(this, 0, n*n)
69
+ {
70
+ // Basic rules of the model
71
+ for (int i = n*n; i--; ) {
72
+ // w[i] means that no blacks are allowed on A[i]
73
+ dom(this, U, SRT_DISJ, A[i], w[i]);
74
+ // Make sure blacks and whites are disjoint.
75
+ post(this, w[i] + b[i] <= 1);
76
+ // If i in U, then b[i] has a piece.
77
+ dom(this, U, SRT_SUP, i, b[i]);
78
+ }
79
+
80
+ // Connect optimization variable to number of pieces
81
+ linear(this, w, IRT_EQ, q);
82
+ linear(this, b, IRT_GQ, q);
83
+
84
+ // Connect cardinality of U to the number of black pieces.
85
+ IntVar unknowns(this, 0, n*n);
86
+ cardinality(this, U, unknowns);
87
+ post(this, q <= unknowns);
88
+ linear(this, b, IRT_EQ, unknowns);
89
+
90
+ if (o.naive) {
91
+ branch(this, w, BVAR_NONE, BVAL_MAX);
92
+ branch(this, b, BVAR_NONE, BVAL_MAX);
93
+ } else {
94
+ QueenBranch::post(this);
95
+ assign(this, b, AVAL_MAX);
96
+ }
97
+ }
98
+
99
+ QueenArmies(bool share, QueenArmies& s)
100
+ : Example(share,s), n(s.n)
101
+ {
102
+ U.update(this, share, s.U);
103
+ W.update(this, share, s.W);
104
+ w.update(this, share, s.w);
105
+ b.update(this, share, s.b);
106
+ q.update(this, share, s.q);
107
+ }
108
+
109
+ virtual Space*
110
+ copy(bool share) {
111
+ return new QueenArmies(share,*this);
112
+ }
113
+
114
+ void
115
+ constrain(Space* s) {
116
+ rel(this, q, IRT_GR, static_cast<QueenArmies*>(s)->q.val());
117
+ }
118
+
119
+
120
+ virtual void
121
+ print(void) {
122
+ std::cout << '\t';
123
+ for (int i = 0; i < n*n; ++i) {
124
+ if (w[i].val()) std::cout << "W";
125
+ else if (b[i].val()) std::cout << "B";
126
+ else std::cout << ".";
127
+ if ((i+1)%n == 0) std::cout << std::endl << (i!=(n*n-1)?"\t":"");
128
+ }
129
+ std::cout << "Number of white queens: " << q << std::endl << std::endl;
130
+ }
131
+
132
+ /** \brief Custom branching for Peacable queens.
133
+ *
134
+ * Custom branching that tries to place white queens so that they
135
+ * maximise the amount of un-attacked squares that become attacked.
136
+ */
137
+ class QueenBranch : Branching {
138
+ mutable int pos;
139
+ QueenBranch(Space* home)
140
+ : Branching(home), pos(-1) {}
141
+ QueenBranch(Space* home, bool share, QueenBranch& b)
142
+ : Branching(home, share, b), pos(b.pos) {}
143
+
144
+ public:
145
+ virtual bool status(const Space* home) const {
146
+ const QueenArmies *q = static_cast<const QueenArmies*>(home);
147
+ int maxsize = -1;
148
+ pos = -1;
149
+
150
+ for (int i = q->n*q->n; i--; ) {
151
+ if (q->w[i].assigned()) continue;
152
+ IntSetRanges ai(A[i]);
153
+ SetVarUnknownRanges qU(q->U);
154
+ Iter::Ranges::Inter<IntSetRanges, SetVarUnknownRanges> r(ai, qU);
155
+ int size = Iter::Ranges::size(r);
156
+ if (size > maxsize) {
157
+ maxsize = size;
158
+ pos = i;
159
+ }
160
+ }
161
+ if (pos == -1) return false;
162
+ return true;
163
+ }
164
+ virtual BranchingDesc* description(const Space*) const {
165
+ assert(pos != -1);
166
+ return new PosValDesc<bool>(this, pos, true);
167
+ }
168
+ virtual ExecStatus commit(Space* home, const BranchingDesc* d, unsigned int a) {
169
+ QueenArmies *q = static_cast<QueenArmies*>(home);
170
+ const PosValDesc<bool> *pvd = static_cast<const PosValDesc<bool>*>(d);
171
+ bool val = a == 0 ? pvd->val() : !pvd->val();
172
+ return me_failed(Int::BoolView(q->w[pvd->pos()]).eq(q, val))
173
+ ? ES_FAILED
174
+ : ES_OK;
175
+ }
176
+ virtual Actor* copy(Space *home, bool share) {
177
+ return new (home) QueenBranch(home, share, *this);
178
+ }
179
+
180
+ static void post(QueenArmies* home) {
181
+ (void) new (home) QueenBranch(home);
182
+ }
183
+ };
184
+ };
185
+
186
+ /// Position of a piece in a square board
187
+ int pos(int i, int j, int n) {
188
+ return i*n + j;
189
+ }
190
+
191
+ /** \brief Main-function
192
+ * \relates QueenArmies
193
+ */
194
+ int
195
+ main(int argc, char** argv) {
196
+ Options o("QueenArmies");
197
+ o.size = 6;
198
+ o.naive = false;
199
+ o.solutions = 0;
200
+ o.parse(argc,argv);
201
+
202
+ // Set up the A-sets
203
+ // A[i] will contain the values attacked by a queen at position i
204
+ int n = o.size;
205
+ A = new IntSet[n*n];
206
+ int *p = new int[std::max(n*n, 25)];
207
+ int pn = 0;
208
+ for (int i = n; i--; ) {
209
+ for (int j = n; j--; ) {
210
+ int dir[][2] = {
211
+ { 0, 1},
212
+ { 1, 1},
213
+ { 1, 0},
214
+ { 0, -1},
215
+ {-1, -1},
216
+ {-1, 0},
217
+ { 1, -1},
218
+ {-1, 1}
219
+ };
220
+ p[pn++] = pos(i, j, n);
221
+ for (int k = 8; k--; ) {
222
+ for (int l = 0; l < n
223
+ && 0 <= (i+l*dir[k][0]) && (i+l*dir[k][0]) < n
224
+ && 0 <= (j+l*dir[k][1]) && (j+l*dir[k][1]) < n; ++l) {
225
+ p[pn++] = pos(i+l*dir[k][0], j+l*dir[k][1], n);
226
+ }
227
+ }
228
+
229
+ A[pos(i, j, n)] = IntSet(p, pn);
230
+
231
+ pn = 0;
232
+ }
233
+ }
234
+ delete [] p;
235
+
236
+ Example::run<QueenArmies,BAB>(o);
237
+ return 0;
238
+ }
239
+
240
+ // STATISTICS: example-any
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2001
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-03 13:51:17 +0200 (Thu, 03 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3506 $
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 "examples/support.hh"
23
+ #include "gecode/minimodel.hh"
24
+
25
+ /**
26
+ * \brief %Example: n-%Queens puzzle
27
+ *
28
+ * Place n queens on an n times n chessboard such that they do not
29
+ * attack each other.
30
+ *
31
+ * \ingroup Example
32
+ *
33
+ */
34
+ class Queens : public Example {
35
+ protected:
36
+ /// Position of queens on boards
37
+ IntVarArray q;
38
+ public:
39
+ /// The actual problem
40
+ Queens(const Options& opt)
41
+ : q(this,opt.size,0,opt.size-1) {
42
+ const int n = q.size();
43
+ if (opt.naive) {
44
+ for (int i = 0; i<n; i++)
45
+ for (int j = i+1; j<n; j++) {
46
+ post(this, q[i] != q[j]);
47
+ post(this, q[i]+i != q[j]+j);
48
+ post(this, q[i]-i != q[j]-j);
49
+ }
50
+ } else {
51
+ IntArgs c(n);
52
+ for (int i = n; i--; ) c[i] = i;
53
+ distinct(this, c,q, opt.icl);
54
+ for (int i = n; i--; ) c[i] = -i;
55
+ distinct(this, c,q, opt.icl);
56
+ distinct(this, q, opt.icl);
57
+ }
58
+ branch(this, q, BVAR_SIZE_MIN, BVAL_MIN);
59
+ }
60
+
61
+ /// Constructor for cloning \a s
62
+ Queens(bool share, Queens& s) : Example(share,s) {
63
+ q.update(this, share, s.q);
64
+ }
65
+
66
+ /// Perform copying during cloning
67
+ virtual Space*
68
+ copy(bool share) {
69
+ return new Queens(share,*this);
70
+ }
71
+
72
+ /// Print solution
73
+ virtual void
74
+ print(void) {
75
+ std::cout << "\t";
76
+ for (int i = 0; i < q.size(); i++) {
77
+ std::cout << q[i] << ", ";
78
+ if ((i+1) % 10 == 0)
79
+ std::cout << std::endl << "\t";
80
+ }
81
+ std::cout << std::endl;
82
+ }
83
+ };
84
+
85
+ /** \brief Main-function
86
+ * \relates Alpha
87
+ */
88
+ int
89
+ main(int argc, char** argv) {
90
+ Options opt("Queens");
91
+ opt.iterations = 500;
92
+ opt.size = 100;
93
+ opt.parse(argc,argv);
94
+ Example::run<Queens,DFS>(opt);
95
+ return 0;
96
+ }
97
+
98
+ // STATISTICS: example-any
99
+
@@ -0,0 +1,454 @@
1
+ /*
2
+ * Main authors:
3
+ * Patrick Pekczynski <pekczynski@ps.uni-sb.de>
4
+ *
5
+ * Copyright:
6
+ * Patrick Pekczynski, 2004
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-04 16:06:52 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3517 $
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 "examples/support.hh"
23
+ #include "gecode/minimodel.hh"
24
+
25
+ /**
26
+ * \brief Triple forming an entry in the round robin schedule
27
+ * \relates SportsLeague
28
+ *
29
+ */
30
+
31
+ struct Play {
32
+ /// number of the home team
33
+ int h;
34
+ /// number of the away team
35
+ int a;
36
+ /// game number
37
+ int g;
38
+ };
39
+
40
+ typedef PrimArgArray<Play> RRSArray;
41
+
42
+ /**
43
+ * \brief %Example: %Sports League Scheduling
44
+ *
45
+ * Prob026: round robin tournaments from http://www.csplip.org
46
+ *
47
+ *
48
+ * -# There are \f$ t \f$ teams (\f$ t \f$ even).
49
+ * -# The season lasts \f$ t - 1 \f$ weeks.
50
+ * -# Each game between two different teams occurs exactly once.
51
+ * -# Every team plays one game in each week of the season.
52
+ * -# There are \f$ \displaystyle\frac{t}{2} \f$ periods and each week
53
+ * every period is scheduled for one game.
54
+ * -# No team plays more than twice in the same period over
55
+ * the course of the season.
56
+ *
57
+ * \ingroup Example
58
+ */
59
+ class SportsLeague : public Example {
60
+ private:
61
+ /// require t to be even and t!=4 (has only failures)
62
+ /// number of considered teams
63
+ int t;
64
+ /// number of weeks
65
+ int weeks;
66
+ /// inserting a dummy week according to R�gin
67
+ int eweeks;
68
+ /// number of periods
69
+ int periods;
70
+ /// the whole season
71
+ int season;
72
+ /// the maximum value a game number can take
73
+ int value;
74
+ /// variables for home teams
75
+ IntVarArray home;
76
+ /// variables for away teams
77
+ IntVarArray away;
78
+ /// variables for game numbers
79
+ IntVarArray game;
80
+ /// \brief Round robin schedule
81
+ RRSArray rrs_array;
82
+ protected:
83
+ // return the number of digits of n
84
+ int digit(int n) {
85
+ int f = n;
86
+ int fdigit = 0;
87
+ while (f / 10) {
88
+ fdigit++;
89
+ f = f / 10;
90
+ }
91
+ return fdigit;
92
+ }
93
+
94
+ // printing function that makes the schedule more readable
95
+ void blank(int n) {
96
+ for (int d = digit(t) - digit(n); d--; ) {
97
+ std::cout << " ";
98
+ }
99
+ std::cout << n;
100
+ }
101
+
102
+ void blankv(int n) {
103
+ for (int d = digit(value) - digit(n); d--; ) {
104
+ std::cout << " ";
105
+ }
106
+ std::cout << n;
107
+ }
108
+
109
+ void blank_only(int n) {
110
+ for (int i = digit(n); i--; ) {
111
+ std::cout << " ";
112
+ }
113
+ }
114
+
115
+ public:
116
+ /// Access the home team in period \a p and week \a w
117
+ IntVar& h (int p, int w) {
118
+ return home[p * eweeks + w];
119
+ }
120
+
121
+ /// Access the away team in period \a p and week \a w
122
+ IntVar& a (int p, int w) {
123
+ return away[p * eweeks + w];
124
+ }
125
+
126
+ /**
127
+ * \brief Access the game number associated with the game
128
+ * in period \a p and week \a w
129
+ */
130
+ IntVar& g (int p, int w) {
131
+ return game[p * weeks + w];
132
+ }
133
+
134
+ /**
135
+ * \brief Access the entry in the round robin schedule for
136
+ * period \a p and week \a w
137
+ */
138
+ Play& rrs(int p, int w) {
139
+ return rrs_array[p * weeks + w];
140
+ }
141
+
142
+ /**
143
+ * \brief Compute game numbers
144
+ *
145
+ * Given the game \f$ (h,a) \f$ between a
146
+ * home team \f$ h \f$ and an away team \f$ a \f$ this function
147
+ * computes the unique game number
148
+ * \f$g = (h - 1) * t + a \Leftrightarrow t = t * h + a - g\f$
149
+ */
150
+
151
+ int gn(int h, int a) {
152
+ return (t * (h - 1) + a);
153
+ }
154
+
155
+ /**
156
+ * \brief Build a feasible schedule
157
+ *
158
+ * The games of the first week are fixed as:
159
+ * \f$ \langle 1,2 \rangle \cup
160
+ * \{\langle p + 2, t - p + 1\rangle | p \geq 1\}\f$. \n
161
+ * The remaining games are computed by transforming a game
162
+ * \f$ \langle h, a, g \rangle \f$ from the previous week
163
+ * in a new game \f$ \langle h', a'\rangle \f$, where: \n
164
+ * \f$ h' = \left\{
165
+ * \begin{tabular}{l c l}
166
+ * 1 & & if $h = 1$ \\
167
+ * 2 & & if $h = t$ \\
168
+ * $h + 1$ & & otherwise
169
+ * \end{tabular}\right.
170
+ * \f$ and
171
+ * \f$ a' = \left\{
172
+ * \begin{tabular}{l c l}
173
+ * 2 & & if $h = t$ \\
174
+ * a + 1 & & otherwise
175
+ * \end{tabular}\right.
176
+ * \f$
177
+ *
178
+ *
179
+ */
180
+
181
+ void init_rrs(void) {
182
+
183
+ // Initialize the array
184
+ for(int p = 0; p < periods; p++)
185
+ for (int w = 0; w < weeks; w++) {
186
+ rrs(p, w).h = 0;
187
+ rrs(p, w).a = 0;
188
+ rrs(p, w).g = 0;
189
+ }
190
+
191
+ // Determine the first game (week 0 period 0)
192
+ rrs(0, 0).h = 1;
193
+ rrs(0, 0).a = 2;
194
+ rrs(0, 0).g = 2;
195
+
196
+ // Determine the other games of the first week
197
+ for(int p = 1; p < periods; p++){
198
+ rrs(p, 0).h = (p + 1) + 1;
199
+ rrs(p, 0).a = t - (p + 1 - 2);
200
+ rrs(p, 0).g = gn(rrs(p, 0).h, rrs(p, 0).a);
201
+ }
202
+
203
+ // Compute the games for the subsequent weeks
204
+ for (int w = 1; w < weeks; w++) {
205
+ for (int p = 0; p < periods; p++) {
206
+ if (rrs(p, w - 1).h == t) {
207
+ rrs(p, w).h = 2;
208
+ } else {
209
+ if (rrs(p, w - 1).h == 1) {
210
+ rrs(p, w).h = 1;
211
+ } else {
212
+ rrs(p, w).h = rrs(p, w - 1).h + 1;
213
+ }
214
+ }
215
+ if (rrs(p, w - 1).a == t) {
216
+ rrs(p, w).a = 2;
217
+ } else {
218
+ rrs(p, w).a = rrs(p, w - 1).a + 1;
219
+ }
220
+
221
+ // maintain symmetry for (h, a): h < a
222
+ if (rrs(p, w).h > rrs(p, w).a) {
223
+ int buffer = rrs(p, w).h;
224
+ rrs(p, w).h = rrs(p, w).a;
225
+ rrs(p, w).a = buffer;
226
+ }
227
+ rrs(p, w).g = gn(rrs(p, w).h, rrs(p, w).a);
228
+ }
229
+ }
230
+ }
231
+
232
+ SportsLeague(const Options& op) :
233
+ t (op.size),
234
+ weeks (t - 1),
235
+ eweeks (t),
236
+ periods (t / 2),
237
+ season (weeks * periods),
238
+ value (t * (t - 2) + t),
239
+ home (this, periods * eweeks),
240
+ away (this, periods * eweeks),
241
+ game (this, season),
242
+ rrs_array (periods * weeks){
243
+
244
+ IntSet dom_all (1, t);
245
+ IntSet dom_game (2, value);
246
+ IntSet dom_home (1, t - 1);
247
+ IntSet dom_away (2, t);
248
+ IntSet dom_index (0, periods - 1);
249
+
250
+ for (int i = eweeks * periods; i--; ) {
251
+ home[i].init(this, dom_home);
252
+ away[i].init(this, dom_away);
253
+ }
254
+ for (int i = season; i--; ) {
255
+ game[i].init(this, dom_game);
256
+ }
257
+
258
+
259
+ // Initialize the round robin schedule
260
+ init_rrs();
261
+
262
+ // domain for the gamenumber of period
263
+ for (int w = 0; w < weeks; w++) {
264
+ IntArgs gamenum(periods);
265
+ IntArgs fst(periods);
266
+ IntArgs snd(periods);
267
+
268
+ for(int p = 0; p < periods; p++){
269
+ gamenum[p] = rrs(p, w).g;
270
+ fst[p] = rrs(p, w).h;
271
+ snd[p] = rrs(p, w).a;
272
+ }
273
+
274
+ IntVarArray n(this, periods, 0, periods - 1);
275
+ distinct(this, n, ICL_DOM);
276
+
277
+ for(int p = 0; p < periods; p++){
278
+ element(this, gamenum, n[p], g(p, w), op.icl);
279
+ element(this, fst, n[p], h(p, w), op.icl);
280
+ element(this, snd, n[p], a(p, w), op.icl);
281
+ }
282
+ }
283
+
284
+
285
+ /**
286
+ * Symmetrie breaking:
287
+ * we consider (h, a) and (a, h) as the same game and focus
288
+ * on the home game for h, i.e. (h, a) with h < a
289
+ */
290
+
291
+ // fix the first pair
292
+ rel(this, h(0,0), IRT_EQ, 1);
293
+ rel(this, a(0,0), IRT_EQ, 2);
294
+
295
+ for (int p = 0; p < periods; p++) {
296
+ for (int w = 0; w < eweeks; w++) {
297
+ rel(this, h(p, w), IRT_LE, a(p, w));
298
+ }
299
+ }
300
+
301
+ // home teams in the first week are ordered
302
+ for (int p = 0; p < periods - 1; p++) {
303
+ rel(this, h(p, 0), IRT_LE, h(p + 1, 0));
304
+ }
305
+
306
+ /**
307
+ * Constraint on each column:
308
+ * each team occurs exactly once.
309
+ * (you need two teams in order to form a match).
310
+ */
311
+
312
+ for(int w = 0; w < eweeks; w++ ) {
313
+ IntVarArray col(this, t);
314
+ int k = 0;
315
+ for( int p = 0; p < periods; p++ ) {
316
+ col[k] = h(p, w);
317
+ k++;
318
+ col[k] = a(p, w);
319
+ k++;
320
+ }
321
+ distinct(this, col, ICL_DOM);
322
+ }
323
+
324
+ /**
325
+ * Constraint on each row:
326
+ * no team appears more than twice
327
+ * (you do not want a team to play more than twice a week in the same slot
328
+ * the same time.)
329
+ *
330
+ */
331
+
332
+ for(int p = 0; p < periods; p++) {
333
+ IntVarArray row(this, 2 * eweeks);
334
+ for (int w = 0; w < 2 * eweeks; w +=2) {
335
+ row[w] = h(p, w / 2);
336
+ row[w + 1] = a(p, w / 2);
337
+ }
338
+ gcc(this, row, 2, op.icl); // cardvars
339
+ }
340
+
341
+
342
+
343
+ for(int p = 0; p < periods; p++) {
344
+ for(int w = 0; w < weeks; w ++) {
345
+ post(this, t * h(p, w) + 1 * a(p, w) - 1* g(p, w) == t);
346
+ }
347
+ }
348
+
349
+ distinct(this, game, ICL_DOM);
350
+
351
+ branch(this, game, BVAR_NONE, BVAL_MIN);
352
+
353
+ }
354
+
355
+ SportsLeague(bool share, SportsLeague& s)
356
+ : Example(share, s),
357
+ t(s.t), weeks(s.weeks), eweeks(s.eweeks),
358
+ periods(s.periods), season(s.season),
359
+ value(s.value), rrs_array(s.rrs_array) {
360
+ home.update(this, share, s.home);
361
+ away.update(this, share, s.away);
362
+ game.update(this, share, s.game);
363
+ }
364
+
365
+ virtual Space*
366
+ copy(bool share) {
367
+ return new SportsLeague(share, *this);
368
+ }
369
+
370
+ virtual void print(void){
371
+ // print feasible schedule
372
+ // t is the number of the greatest game
373
+ std::cout << "\nSchedule for " << t << " teams"
374
+ << " and "<< weeks << " weeks:" << std::endl;
375
+ // print period index
376
+ std::cout << " ";
377
+ blank_only(t);
378
+ std::cout << " ";
379
+ for (int p = 0; p < periods; p++) {
380
+ blank_only(t);
381
+ std::cout << "P[";
382
+ blank(p);
383
+ std::cout <<"]";
384
+ blank_only(t);
385
+ }
386
+ std::cout <<"\n";
387
+
388
+ // print entries
389
+ for(int w = 0; w < weeks; w++){
390
+ std::cout << "W[";
391
+ blank(w + 1);
392
+ std::cout <<"]: ";
393
+ for(int p = 0; p < periods; p++){
394
+ if (h(p, w).assigned() && a(p, w).assigned()) {
395
+ std::cout <<" ";
396
+ blank(h(p, w).val());
397
+ std::cout <<",";
398
+ blank(a(p, w).val());
399
+ std::cout <<" ";
400
+ } else {
401
+ blank_only(t);
402
+ std::cout << " x ";
403
+ blank_only(t);
404
+ }
405
+ }
406
+ std::cout << "\n";
407
+ }
408
+ std::cout << "\n";
409
+
410
+ //print gamenumbers
411
+ std::cout << "\nUnique game numbers:\n";
412
+ std::cout <<"\n";
413
+ for(int p = 0; p < periods; p++){
414
+ std::cout << "Period[";
415
+ blank(p + 1);
416
+ std::cout <<"]: " ;
417
+ for(int w = 0; w < weeks; w++){
418
+ if (g(p, w).assigned()) {
419
+ blankv(g(p, w).val());
420
+ std::cout << " ";
421
+ } else {
422
+ for (int i = digit(value); i--; ) {
423
+ std::cout << " ";
424
+ }
425
+ std::cout << " ";
426
+ }
427
+ }
428
+ std::cout << "\n";
429
+ }
430
+ std::cout << "\n";
431
+
432
+ }
433
+ };
434
+
435
+
436
+ int main(int argc, char** argv){
437
+ Options o("Sports League Scheduling ");
438
+ o.solutions = 1;
439
+ o.size = 18;
440
+ o.parse(argc, argv);
441
+ if (o.size == 4) {
442
+ std::cerr<< "No Solution for t = 4!\n";
443
+ return -1;
444
+ }
445
+ if (o.size % 2 != 0) {
446
+ std::cerr << "Number of t has to be even!\n";
447
+ return -1;
448
+ }
449
+ Example::run<SportsLeague, DFS>(o);
450
+ return 0;
451
+ }
452
+
453
+ // STATISTICS: example-any
454
+