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,311 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2004
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-09-07 11:03:52 +0200 (Thu, 07 Sep 2006) $ by $Author: schulte $
10
+ * $Revision: 3609 $
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
+ namespace Gecode { namespace Int { namespace Linear {
23
+
24
+ /*
25
+ * Base-class
26
+ *
27
+ */
28
+ template <class XV, class YV>
29
+ LinBoolView<XV,YV>::LinBoolView(Space* home,
30
+ ViewArray<XV>& x0, YV y0, int c0)
31
+ : Propagator(home), x(x0), y(y0), c(c0) {
32
+ x.subscribe(home,this,PC_INT_VAL);
33
+ y.subscribe(home,this,PC_INT_BND);
34
+ }
35
+
36
+ template <class XV, class YV>
37
+ size_t
38
+ LinBoolView<XV,YV>::dispose(Space* home) {
39
+ assert(!home->failed());
40
+ x.cancel(home,this,PC_INT_VAL);
41
+ y.cancel(home,this,PC_INT_BND);
42
+ (void) Propagator::dispose(home);
43
+ return sizeof(*this);
44
+ }
45
+
46
+ template <class XV, class YV>
47
+ forceinline
48
+ LinBoolView<XV,YV>::LinBoolView(Space* home, bool share, LinBoolView& p)
49
+ : Propagator(home,share,p), c(p.c) {
50
+ x.update(home,share,p.x);
51
+ y.update(home,share,p.y);
52
+ }
53
+
54
+ template <class XV, class YV>
55
+ PropCost
56
+ LinBoolView<XV,YV>::cost(void) const {
57
+ return cost_lo(x.size(),PC_LINEAR_LO);
58
+ }
59
+
60
+
61
+
62
+ /*
63
+ * Equality propagator
64
+ *
65
+ */
66
+ template <class XV, class YV>
67
+ forceinline
68
+ EqBoolView<XV,YV>::EqBoolView(Space* home, ViewArray<XV>& x, YV y, int c)
69
+ : LinBoolView<XV,YV>(home,x,y,c) {}
70
+
71
+ template <class XV, class YV>
72
+ ExecStatus
73
+ EqBoolView<XV,YV>::post(Space* home, ViewArray<XV>& x, YV y, int c) {
74
+ if (y.assigned())
75
+ return EqBoolInt<XV>::post(home,x,y.val()+c);
76
+ int n = x.size();
77
+ for (int i = n; i--; )
78
+ if (x[i].one()) {
79
+ x[i]=x[--n]; c--;
80
+ } else if (x[i].zero()) {
81
+ x[i]=x[--n];
82
+ }
83
+ x.size(n);
84
+ GECODE_ME_CHECK(y.lq(home,n-c));
85
+ GECODE_ME_CHECK(y.gq(home,-c));
86
+ if (n == 0)
87
+ return ES_OK;
88
+ if (y.min()+c == n) {
89
+ assert(y.assigned());
90
+ for (int i = n; i--; )
91
+ x[i].t_one_none(home);
92
+ return ES_OK;
93
+ }
94
+ if (y.max()+c == 0) {
95
+ assert(y.assigned());
96
+ for (int i = n; i--; )
97
+ x[i].t_zero_none(home);
98
+ return ES_OK;
99
+ }
100
+ (void) new (home) EqBoolView<XV,YV>(home,x,y,c);
101
+ return ES_OK;
102
+ }
103
+
104
+ template <class XV, class YV>
105
+ forceinline
106
+ EqBoolView<XV,YV>::EqBoolView(Space* home, bool share, EqBoolView<XV,YV>& p)
107
+ : LinBoolView<XV,YV>(home,share,p) {}
108
+
109
+ template <class XV, class YV>
110
+ Actor*
111
+ EqBoolView<XV,YV>::copy(Space* home, bool share) {
112
+ return new (home) EqBoolView<XV,YV>(home,share,*this);
113
+ }
114
+
115
+ template <class XV, class YV>
116
+ ExecStatus
117
+ EqBoolView<XV,YV>::propagate(Space* home) {
118
+ int n = x.size();
119
+ for (int i = n; i--; )
120
+ if (x[i].one()) {
121
+ x[i]=x[--n]; c--;
122
+ } else if (x[i].zero()) {
123
+ x[i]=x[--n];
124
+ }
125
+ x.size(n);
126
+ GECODE_ME_CHECK(y.lq(home,n-c));
127
+ GECODE_ME_CHECK(y.gq(home,-c));
128
+ if (n == 0)
129
+ return ES_SUBSUMED;
130
+ if (y.min()+c == n) {
131
+ assert(y.assigned());
132
+ for (int i = n; i--; )
133
+ x[i].t_one_none(home);
134
+ return ES_SUBSUMED;
135
+ }
136
+ if (y.max()+c == 0) {
137
+ assert(y.assigned());
138
+ for (int i = n; i--; )
139
+ x[i].t_zero_none(home);
140
+ return ES_SUBSUMED;
141
+ }
142
+ if (y.assigned()) {
143
+ GECODE_ES_CHECK(EqBoolInt<XV>::post(home,x,y.val()+c));
144
+ return ES_SUBSUMED;
145
+ }
146
+ return ES_FIX;
147
+ }
148
+
149
+
150
+ /*
151
+ * Disequality propagator
152
+ *
153
+ */
154
+ template <class XV, class YV>
155
+ forceinline
156
+ NqBoolView<XV,YV>::NqBoolView(Space* home, ViewArray<XV>& x, YV y, int c)
157
+ : LinBoolView<XV,YV>(home,x,y,c) {}
158
+
159
+ template <class XV, class YV>
160
+ ExecStatus
161
+ NqBoolView<XV,YV>::post(Space* home, ViewArray<XV>& x, YV y, int c) {
162
+ if (y.assigned())
163
+ return NqBoolInt<XV>::post(home,x,y.val()+c);
164
+ int n = x.size();
165
+ for (int i = n; i--; )
166
+ if (x[i].one()) {
167
+ x[i]=x[--n]; c--;
168
+ } else if (x[i].zero()) {
169
+ x[i]=x[--n];
170
+ }
171
+ x.size(n);
172
+ if ((n-c < y.min() ) || (-c > y.max()))
173
+ return ES_OK;
174
+ if (n == 0) {
175
+ GECODE_ME_CHECK(y.nq(home,-c));
176
+ return ES_OK;
177
+ }
178
+ if ((n == 1) && y.assigned()) {
179
+ if (y.val()+c == 1) {
180
+ x[0].t_zero_none(home);
181
+ } else {
182
+ assert(y.val()+c == 0);
183
+ x[0].t_one_none(home);
184
+ }
185
+ return ES_OK;
186
+ }
187
+ (void) new (home) NqBoolView<XV,YV>(home,x,y,c);
188
+ return ES_OK;
189
+ }
190
+
191
+
192
+ template <class XV, class YV>
193
+ forceinline
194
+ NqBoolView<XV,YV>::NqBoolView(Space* home, bool share, NqBoolView<XV,YV>& p)
195
+ : LinBoolView<XV,YV>(home,share,p) {}
196
+
197
+ template <class XV, class YV>
198
+ Actor*
199
+ NqBoolView<XV,YV>::copy(Space* home, bool share) {
200
+ return new (home) NqBoolView<XV,YV>(home,share,*this);
201
+ }
202
+
203
+
204
+ template <class XV, class YV>
205
+ ExecStatus
206
+ NqBoolView<XV,YV>::propagate(Space* home) {
207
+ int n = x.size();
208
+ for (int i = n; i--; )
209
+ if (x[i].one()) {
210
+ x[i]=x[--n]; c--;
211
+ } else if (x[i].zero()) {
212
+ x[i]=x[--n];
213
+ }
214
+ x.size(n);
215
+ if ((n-c < y.min() ) || (-c > y.max()))
216
+ return ES_SUBSUMED;
217
+ if (n == 0) {
218
+ GECODE_ME_CHECK(y.nq(home,-c));
219
+ return ES_SUBSUMED;
220
+ }
221
+ if ((n == 1) && y.assigned()) {
222
+ if (y.val()+c == 1) {
223
+ x[0].t_zero_none(home);
224
+ } else {
225
+ assert(y.val()+c == 0);
226
+ x[0].t_one_none(home);
227
+ }
228
+ return ES_SUBSUMED;
229
+ }
230
+ return ES_FIX;
231
+ }
232
+
233
+
234
+ /*
235
+ * Greater or equal propagator
236
+ *
237
+ */
238
+ template <class XV, class YV>
239
+ forceinline
240
+ GqBoolView<XV,YV>::GqBoolView(Space* home, ViewArray<XV>& x, YV y, int c)
241
+ : LinBoolView<XV,YV>(home,x,y,c) {}
242
+
243
+ template <class XV, class YV>
244
+ ExecStatus
245
+ GqBoolView<XV,YV>::post(Space* home, ViewArray<XV>& x, YV y, int c) {
246
+ if (y.assigned())
247
+ return GqBoolInt<XV>::post(home,x,y.val()+c);
248
+ // Eliminate assigned views
249
+ int n = x.size();
250
+ for (int i = n; i--; )
251
+ if (x[i].one()) {
252
+ x[i]=x[--n]; c--;
253
+ } else if (x[i].zero()) {
254
+ x[i]=x[--n];
255
+ }
256
+ x.size(n);
257
+ GECODE_ME_CHECK(y.lq(home,n-c));
258
+ if (-c >= y.max())
259
+ return ES_OK;
260
+ if (y.min()+c == n) {
261
+ for (int i = n; i--; )
262
+ x[i].t_one_none(home);
263
+ return ES_OK;
264
+ }
265
+ (void) new (home) GqBoolView<XV,YV>(home,x,y,c);
266
+ return ES_OK;
267
+ }
268
+
269
+
270
+ template <class XV, class YV>
271
+ forceinline
272
+ GqBoolView<XV,YV>::GqBoolView(Space* home, bool share, GqBoolView<XV,YV>& p)
273
+ : LinBoolView<XV,YV>(home,share,p) {}
274
+
275
+ template <class XV, class YV>
276
+ Actor*
277
+ GqBoolView<XV,YV>::copy(Space* home, bool share) {
278
+ return new (home) GqBoolView<XV,YV>(home,share,*this);
279
+ }
280
+
281
+
282
+ template <class XV, class YV>
283
+ ExecStatus
284
+ GqBoolView<XV,YV>::propagate(Space* home) {
285
+ int n = x.size();
286
+ for (int i = n; i--; )
287
+ if (x[i].one()) {
288
+ x[i]=x[--n]; c--;
289
+ } else if (x[i].zero()) {
290
+ x[i]=x[--n];
291
+ }
292
+ x.size(n);
293
+ GECODE_ME_CHECK(y.lq(home,n-c));
294
+ if (-c >= y.max())
295
+ return ES_SUBSUMED;
296
+ if (y.min()+c == n) {
297
+ for (int i = n; i--; )
298
+ x[i].t_one_none(home);
299
+ return ES_SUBSUMED;
300
+ }
301
+ if (y.assigned()) {
302
+ GECODE_ES_CHECK(GqBoolInt<XV>::post(home,x,y.val()+c));
303
+ return ES_SUBSUMED;
304
+ }
305
+ return ES_FIX;
306
+ }
307
+
308
+ }}}
309
+
310
+ // STATISTICS: int-prop
311
+
@@ -0,0 +1,503 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2006
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3512 $
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/int/linear.hh"
23
+
24
+ #include "gecode/iter.hh"
25
+
26
+ namespace Gecode { namespace Int { namespace Linear {
27
+
28
+ /**
29
+ * \brief Set for support information
30
+ *
31
+ * Records supported positions of values such that with iteration
32
+ * the supported values can be reconstructed.
33
+ *
34
+ */
35
+ class SupportSet {
36
+ private:
37
+ /// Number of bits per unsigned integer
38
+ static const unsigned int bpui = sizeof(unsigned int) * 8;
39
+ /// Array of bits
40
+ unsigned int* bits;
41
+ public:
42
+ /// Initialize support set with cardinality \arg n
43
+ void init(unsigned int n);
44
+ /// Record that there is support at position \arg i
45
+ void support(unsigned int i);
46
+ /// Check whether position \arg i has support
47
+ bool supported(unsigned int i) const;
48
+
49
+ private:
50
+ /// Support-based iterator
51
+ class ResultIter : public ViewValues<IntView> {
52
+ protected:
53
+ /// The support set used
54
+ const SupportSet* s;
55
+ /// The current position of the value
56
+ unsigned int p;
57
+ public:
58
+ /// Initialize iterator
59
+ ResultIter(const SupportSet* s0, const IntView& x);
60
+ /// Increment to next supported value
61
+ void operator++(void);
62
+ };
63
+
64
+ public:
65
+ /// Perform tell according to recorded support information on \arg x
66
+ ModEvent tell(Space* home, IntView& x) const;
67
+ /// Release memory
68
+ void dispose(void);
69
+ };
70
+
71
+ /**
72
+ * \brief Base-class for support-based iterator
73
+ *
74
+ */
75
+ template <class Val>
76
+ class SupportIter {
77
+ protected:
78
+ /// Integer coefficient for view
79
+ int a;
80
+ /// Integer view
81
+ IntView x;
82
+ /// Set of support for values in x
83
+ SupportSet s;
84
+ /// Current value
85
+ int c;
86
+ /// Position of current value
87
+ unsigned int p;
88
+ /// Lower bound information for value
89
+ Val l;
90
+ /// Upper bound information for value
91
+ Val u;
92
+ public:
93
+ /// Initialize view
94
+ void init(int a, const IntView& x, Val l, Val u);
95
+ /// Record value at current position as supported
96
+ void support(void);
97
+ /// Tell back new variable domain according to support found
98
+ ModEvent tell(Space* home);
99
+ /// Finalize memory for support set
100
+ void dispose(void);
101
+ };
102
+
103
+
104
+ /**
105
+ * \brief Support-based iterator for positive view
106
+ *
107
+ */
108
+ template <class Val>
109
+ class PosSupportIter : public SupportIter<Val> {
110
+ private:
111
+ /// Iterate ranges of integer view in increasing order
112
+ IntVarImpFwd i;
113
+ // Using-declarations for dependant names
114
+ using SupportIter<Val>::a;
115
+ using SupportIter<Val>::x;
116
+ using SupportIter<Val>::s;
117
+ using SupportIter<Val>::c;
118
+ using SupportIter<Val>::p;
119
+ using SupportIter<Val>::l;
120
+ using SupportIter<Val>::u;
121
+ public:
122
+ /// Reset iterator to beginning and adjust \arg d accordingly
123
+ bool reset(Val& d);
124
+ /// Adjust \arg d and return true if next value still works
125
+ bool adjust(Val& d);
126
+ };
127
+
128
+
129
+ /**
130
+ * \brief Support-based iterator for negative view
131
+ *
132
+ */
133
+ template <class Val>
134
+ class NegSupportIter : public SupportIter<Val> {
135
+ private:
136
+ /// Iterate ranges of integer view in decreasing order
137
+ IntVarImpBwd i;
138
+ // Using-declarations for dependant names
139
+ using SupportIter<Val>::a;
140
+ using SupportIter<Val>::x;
141
+ using SupportIter<Val>::s;
142
+ using SupportIter<Val>::c;
143
+ using SupportIter<Val>::p;
144
+ using SupportIter<Val>::l;
145
+ using SupportIter<Val>::u;
146
+ public:
147
+ /// Reset iterator to beginning and adjust \arg d accordingly
148
+ bool reset(Val& d);
149
+ /// Adjust \arg d and return true if next value still works
150
+ bool adjust(Val& d);
151
+ };
152
+
153
+
154
+ /*
155
+ * Support set
156
+ *
157
+ */
158
+ forceinline void
159
+ SupportSet::init(unsigned int n) {
160
+ bits = Memory::bmalloc<unsigned int>((n / bpui) + 1);
161
+ for (unsigned int i = (n / bpui) + 1; i--; )
162
+ bits[i] = 0;
163
+ }
164
+ forceinline void
165
+ SupportSet::support(unsigned int i) {
166
+ unsigned int p = i / bpui;
167
+ bits[p] |= 1 << (i-p*bpui);
168
+ }
169
+ forceinline bool
170
+ SupportSet::supported(unsigned int i) const {
171
+ unsigned int p = i / bpui;
172
+ return (bits[p] & (1 << (i-p*bpui))) != 0;
173
+ }
174
+
175
+ forceinline
176
+ SupportSet::ResultIter::ResultIter(const SupportSet* s0, const IntView& x)
177
+ : ViewValues<IntView>(x), s(s0), p(0) {
178
+ while (ViewValues<IntView>::operator()() && !s->supported(p)) {
179
+ ViewValues<IntView>::operator++(); ++p;
180
+ }
181
+ }
182
+ forceinline void
183
+ SupportSet::ResultIter::operator++(void) {
184
+ do {
185
+ ViewValues<IntView>::operator++(); ++p;
186
+ } while (ViewValues<IntView>::operator()() && !s->supported(p));
187
+ }
188
+
189
+
190
+ inline ModEvent
191
+ SupportSet::tell(Space* home, IntView& x) const {
192
+ unsigned int n = x.size() / bpui;
193
+ // Check whether all bits are zero: failure
194
+ for (unsigned int i=n+1; i--; )
195
+ if (bits[i] != 0)
196
+ goto all;
197
+ return ME_INT_FAILED;
198
+ all:
199
+ // Check whether all bits are one: nothing changed
200
+ for (unsigned int i=n; i--; )
201
+ if (bits[i] != ~0U)
202
+ goto tell;
203
+ // Now check the bits in the last word
204
+ for (unsigned int i=n*bpui; i<x.size(); i++)
205
+ if (!supported(i))
206
+ goto tell;
207
+ return ME_INT_NONE;
208
+ tell:
209
+ {
210
+ ResultIter i(this,x);
211
+ Iter::Values::ToRanges<ResultIter> r(i);
212
+ return x.narrow(home,r);
213
+ }
214
+ }
215
+
216
+ forceinline void
217
+ SupportSet::dispose(void) {
218
+ Memory::free(bits);
219
+ }
220
+
221
+
222
+ /*
223
+ * Base-class for support-based iterator
224
+ *
225
+ */
226
+ template <class Val>
227
+ forceinline void
228
+ SupportIter<Val>::init(int a0, const IntView& x0, Val l0, Val u0) {
229
+ a=a0; x=x0; l=l0; u=u0;
230
+ s.init(x.size());
231
+ }
232
+ template <class Val>
233
+ forceinline void
234
+ SupportIter<Val>::support(void) {
235
+ s.support(p);
236
+ }
237
+ template <class Val>
238
+ forceinline ModEvent
239
+ SupportIter<Val>::tell(Space* home) {
240
+ return s.tell(home,x);
241
+ }
242
+ template <class Val>
243
+ forceinline void
244
+ SupportIter<Val>::dispose(void) {
245
+ s.dispose();
246
+ }
247
+
248
+
249
+ /*
250
+ * Support-based iterator for positive view
251
+ *
252
+ */
253
+ template <class Val>
254
+ forceinline bool
255
+ PosSupportIter<Val>::reset(Val& d) {
256
+ // Way too small, no value can make it big enough
257
+ if (d + static_cast<Val>(a)*x.max() < u)
258
+ return false;
259
+ // Restart iterator and position of values
260
+ i.init(x.variable()); p = 0;
261
+ // Skip all ranges which are too small
262
+ while (d + static_cast<Val>(a)*i.max() < u) {
263
+ p += i.width(); ++i;
264
+ }
265
+ // There is at least one range left (check of max)
266
+ assert(i());
267
+ // Initialize current range and adjust value
268
+ c = i.min();
269
+ // Skip all values which are too small
270
+ while (d + static_cast<Val>(a)*c < u) {
271
+ p++; c++;
272
+ }
273
+ // Adjust to new value
274
+ d += static_cast<Val>(a) * c;
275
+ return true;
276
+ }
277
+ template <class Val>
278
+ forceinline bool
279
+ PosSupportIter<Val>::adjust(Val& d) {
280
+ // Current value
281
+ Val v = static_cast<Val>(a) * c;
282
+ // Subtract current value from d
283
+ d -= v;
284
+ // Move to next position (number of value)
285
+ p++;
286
+ // Still in the same range
287
+ if (c < i.max()) {
288
+ // Decrement current values
289
+ c += 1; v += a;
290
+ } else {
291
+ // Go to next range
292
+ ++i;
293
+ if (!i())
294
+ return false;
295
+ c = i.min(); v = static_cast<Val>(a) * c;
296
+ }
297
+ // Is d with the current value too large?
298
+ if (d + v > l)
299
+ return false;
300
+ // Update d
301
+ d += v;
302
+ return true;
303
+ }
304
+
305
+
306
+ /*
307
+ * Support-based iterator for negative view
308
+ *
309
+ */
310
+ template <class Val>
311
+ forceinline bool
312
+ NegSupportIter<Val>::reset(Val& d) {
313
+ // Way too small, no value can make it big enough
314
+ if (d + static_cast<Val>(a)*x.min() < u)
315
+ return false;
316
+ // Restart iterator and position of values
317
+ i.init(x.variable()); p = x.size()-1;
318
+ // Skip all ranges which are too small
319
+ while (d + static_cast<Val>(a)*i.min() < u) {
320
+ p -= i.width(); ++i;
321
+ }
322
+ // There is at least one range left (check of max)
323
+ assert(i());
324
+ // Initialize current range
325
+ c = i.max();
326
+ // Skip all values which are too small
327
+ while (d + static_cast<Val>(a)*c < u) {
328
+ p--; c--;
329
+ }
330
+ // Adjust to new value
331
+ d += static_cast<Val>(a) * c;
332
+ return true;
333
+ }
334
+ template <class Val>
335
+ forceinline bool
336
+ NegSupportIter<Val>::adjust(Val& d) {
337
+ // Current value
338
+ Val v = static_cast<Val>(a) * c;
339
+ // Subtract current value from d
340
+ d -= v;
341
+ // Move to next position (number of value)
342
+ p--;
343
+ // Still in the same range
344
+ if (c > i.min()) {
345
+ // Decrement current values
346
+ c -= 1; v -= a;
347
+ } else {
348
+ // Go to next range
349
+ ++i;
350
+ if (!i())
351
+ return false;
352
+ c = i.max(); v = static_cast<Val>(a) * c;
353
+ }
354
+ // Is d with the current value too large?
355
+ if (d + v > l)
356
+ return false;
357
+ // Update d
358
+ d += v;
359
+ return true;
360
+ }
361
+
362
+
363
+
364
+ /*
365
+ * The domain-consisten equality propagator
366
+ *
367
+ */
368
+ template <class Val, class View>
369
+ forceinline
370
+ DomEq<Val,View>::DomEq(Space* home,
371
+ ViewArray<View >& x, ViewArray<View >& y,
372
+ Val c)
373
+ : Lin<Val,View,View,PC_INT_DOM>(home,x,y,c) {}
374
+
375
+ template <class Val, class View>
376
+ ExecStatus
377
+ DomEq<Val,View>::post(Space* home,
378
+ ViewArray<View>& x, ViewArray<View>& y,
379
+ Val c) {
380
+ (void) new (home) DomEq<Val,View>(home,x,y,c);
381
+ return ES_OK;
382
+ }
383
+
384
+ template <class Val, class View>
385
+ forceinline
386
+ DomEq<Val,View>::DomEq(Space* home, bool share, DomEq<Val,View>& p)
387
+ : Lin<Val,View,View,PC_INT_DOM>(home,share,p) {}
388
+
389
+ template <class Val, class View>
390
+ Actor*
391
+ DomEq<Val,View>::copy(Space* home, bool share) {
392
+ return new (home) DomEq<Val,View>(home,share,*this);
393
+ }
394
+
395
+ template <class Val, class View>
396
+ PropCost
397
+ DomEq<Val,View>::cost(void) const {
398
+ return (View::pme(this) != ME_INT_DOM)
399
+ ? cost_hi(x.size()+y.size(),PC_LINEAR_LO)
400
+ : cost_hi(x.size()+y.size(),PC_CRAZY_HI);
401
+ }
402
+
403
+ template <class Val, class View>
404
+ ExecStatus
405
+ DomEq<Val,View>::propagate(Space* home) {
406
+ if (View::pme(this) != ME_INT_DOM) {
407
+ ExecStatus es = prop_bnd<Val,View,View>(this,home,x,y,c);
408
+ if ((es == ES_SUBSUMED) || (es == ES_FAILED))
409
+ return es;
410
+ return ES_FIX_PARTIAL(View::pme(ME_INT_DOM));
411
+ }
412
+
413
+ // Value of equation for partial assignment
414
+ Val d = -c;
415
+
416
+ int n = x.size();
417
+ int m = y.size();
418
+
419
+ // Create support-base iterators
420
+ GECODE_AUTOARRAY(PosSupportIter<Val>, xp, n);
421
+ GECODE_AUTOARRAY(NegSupportIter<Val>, yp, m);
422
+
423
+ // Initialize views for assignments
424
+ {
425
+ Val l = 0;
426
+ Val u = 0;
427
+ for (int j=m; j--; ) {
428
+ yp[j].init(-y[j].scale(),y[j].base(),l,u);
429
+ l += y[j].max(); u += y[j].min();
430
+ }
431
+ for (int i=n; i--; ) {
432
+ xp[i].init(x[i].scale(),x[i].base(),l,u);
433
+ l -= x[i].min(); u -= x[i].max();
434
+ }
435
+ }
436
+
437
+ // Collect support information by iterating assignments
438
+ {
439
+ // Force reset of all iterators in first round
440
+ int i = 0;
441
+ int j = 0;
442
+
443
+ next_i:
444
+ // Reset all iterators for positive views and update d
445
+ while (i<n) {
446
+ if (!xp[i].reset(d)) goto prev_i;
447
+ i++;
448
+ }
449
+ next_j:
450
+ // Reset all iterators for negative views and update d
451
+ while (j<m) {
452
+ if (!yp[j].reset(d)) goto prev_j;
453
+ j++;
454
+ }
455
+ // Check whether current assignment is solution
456
+ if (d == 0) {
457
+ // Record support
458
+ for (int is=n; is--; ) xp[is].support();
459
+ for (int js=m; js--; ) yp[js].support();
460
+ }
461
+ prev_j:
462
+ // Try iterating to next assignment: negative views
463
+ while (j>0) {
464
+ if (yp[j-1].adjust(d)) goto next_j;
465
+ j--;
466
+ }
467
+ prev_i:
468
+ // Try iterating to next assignment: positive views
469
+ while (i>0) {
470
+ if (xp[i-1].adjust(d)) goto next_i;
471
+ i--;
472
+ }
473
+ }
474
+
475
+ // Tell back new variable domains
476
+ ExecStatus es = ES_SUBSUMED;
477
+ for (int i=n; i--; ) {
478
+ ModEvent me = xp[i].tell(home);
479
+ if (me_failed(me)) {
480
+ es = ES_FAILED; goto dispose;
481
+ }
482
+ if (!x[i].assigned())
483
+ es = ES_FIX;
484
+ }
485
+ for (int j=m; j--; ) {
486
+ ModEvent me = yp[j].tell(home);
487
+ if (me_failed(me)) {
488
+ es = ES_FAILED; goto dispose;
489
+ }
490
+ if (!y[j].assigned())
491
+ es = ES_FIX;
492
+ }
493
+
494
+ // Release memory
495
+ dispose:
496
+ for (int i=n; i--; ) xp[i].dispose();
497
+ for (int j=m; j--; ) yp[j].dispose();
498
+ return es;
499
+ }
500
+
501
+ }}}
502
+
503
+ // STATISTICS: int-prop