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,401 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ * Guido Tack <tack@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2002
8
+ * Guido Tack, 2004
9
+ *
10
+ * Last modified:
11
+ * $Date: 2006-09-19 16:52:16 +0200 (Tue, 19 Sep 2006) $ by $Author: schulte $
12
+ * $Revision: 3684 $
13
+ *
14
+ * This file is part of Gecode, the generic constraint
15
+ * development environment:
16
+ * http://www.gecode.org
17
+ *
18
+ * See the file "LICENSE" for information on usage and
19
+ * redistribution of this file, and for a
20
+ * DISCLAIMER OF ALL WARRANTIES.
21
+ *
22
+ */
23
+
24
+ #ifndef __GECODE_INT_COUNT_HH__
25
+ #define __GECODE_INT_COUNT_HH__
26
+
27
+ #include "gecode/int.hh"
28
+
29
+ /**
30
+ * \namespace Gecode::Int::Count
31
+ * \brief Counting propagators
32
+ */
33
+
34
+ namespace Gecode { namespace Int { namespace Count {
35
+
36
+ /**
37
+ * Relations for domain-consistent counting
38
+ *
39
+ */
40
+ //@{
41
+ /// Test whether \a x and \a y are equal
42
+ template <class VX>
43
+ RelTest holds(VX x, VX y);
44
+ /// Test whether \a x and \a y are equal
45
+ template <class VX>
46
+ RelTest holds(VX x, ConstIntView y);
47
+ /// Post that all views in \a x are equal to \a y
48
+ template <class VX>
49
+ ExecStatus post_true(Space* home, ViewArray<VX>& x, VX y);
50
+ /// Post that all views in \a x are equal to \a y
51
+ template <class VX>
52
+ ExecStatus post_true(Space* home, ViewArray<VX>& x, ConstIntView y);
53
+ /// Post that all views in \a x are not equal to \a y
54
+ template <class VX>
55
+ ExecStatus post_false(Space* home, ViewArray<VX>& x, VX y);
56
+ /// Post that all views in \a x are not equal to \a y
57
+ template <class VX>
58
+ ExecStatus post_false(Space* home, ViewArray<VX>& x, ConstIntView y);
59
+ //@}
60
+
61
+ }}}
62
+
63
+ #include "gecode/int/count/rel.icc"
64
+
65
+
66
+ namespace Gecode { namespace Int { namespace Count {
67
+
68
+ /**
69
+ * \brief Baseclass for count propagators (integer)
70
+ *
71
+ */
72
+ template <class VX, class VY>
73
+ class BaseInt : public Propagator {
74
+ protected:
75
+ /// Views still to count
76
+ ViewArray<VX> x;
77
+ /// Views from x[0] ... x[n_s-1] have subscriptions
78
+ int n_s;
79
+ /// View to compare to
80
+ VY y;
81
+ /// Number of views which are equal and have been eliminated
82
+ int c;
83
+ /// Constructor for cloning \a p
84
+ BaseInt(Space* home, bool share, BaseInt& p);
85
+ /// Constructor for creation
86
+ BaseInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
87
+ public:
88
+ /// Cost function (defined as dynamic PC_LINEAR_LO)
89
+ virtual PropCost cost(void) const;
90
+ /// Delete propagator and return its size
91
+ virtual size_t dispose(Space* home);
92
+ };
93
+
94
+ /**
95
+ * \brief %Propagator for counting views (equal integer to number of equal views)
96
+ *
97
+ * Not all combinations of views are possible. The types \a VX
98
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
99
+ *
100
+ * Requires \code #include "gecode/int/count.hh" \endcode
101
+ * \ingroup FuncIntProp
102
+ */
103
+ template <class VX, class VY>
104
+ class EqInt : public BaseInt<VX,VY> {
105
+ protected:
106
+ using BaseInt<VX,VY>::x;
107
+ using BaseInt<VX,VY>::n_s;
108
+ using BaseInt<VX,VY>::y;
109
+ using BaseInt<VX,VY>::c;
110
+ /// Constructor for cloning \a p
111
+ EqInt(Space* home, bool share, EqInt& p);
112
+ /// Constructor for creation
113
+ EqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
114
+ public:
115
+ /// Create copy during cloning
116
+ virtual Actor* copy(Space* home, bool share);
117
+ /// Perform propagation
118
+ virtual ExecStatus propagate(Space* home);
119
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}=c\f$
120
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
121
+ };
122
+
123
+ /**
124
+ * \brief %Propagator for counting views (greater or equal integer to number of equal views)
125
+ *
126
+ * Not all combinations of views are possible. The types \a VX
127
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
128
+ *
129
+ * Requires \code #include "gecode/int/count.hh" \endcode
130
+ * \ingroup FuncIntProp
131
+ */
132
+ template <class VX, class VY>
133
+ class GqInt : public BaseInt<VX,VY> {
134
+ protected:
135
+ using BaseInt<VX,VY>::x;
136
+ using BaseInt<VX,VY>::n_s;
137
+ using BaseInt<VX,VY>::y;
138
+ using BaseInt<VX,VY>::c;
139
+ /// Constructor for cloning \a p
140
+ GqInt(Space* home, bool share, GqInt& p);
141
+ /// Constructor for creation
142
+ GqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
143
+ public:
144
+ /// Create copy during cloning
145
+ virtual Actor* copy(Space* home, bool share);
146
+ /// Perform propagation
147
+ virtual ExecStatus propagate(Space* home);
148
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\geq c\f$
149
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
150
+ };
151
+
152
+ /**
153
+ * \brief %Propagator for counting views (less or equal integer to number of equal views)
154
+ *
155
+ * Not all combinations of views are possible. The types \a VX
156
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
157
+ *
158
+ * Requires \code #include "gecode/int/count.hh" \endcode
159
+ * \ingroup FuncIntProp
160
+ */
161
+ template <class VX, class VY>
162
+ class LqInt : public BaseInt<VX,VY> {
163
+ protected:
164
+ using BaseInt<VX,VY>::x;
165
+ using BaseInt<VX,VY>::n_s;
166
+ using BaseInt<VX,VY>::y;
167
+ using BaseInt<VX,VY>::c;
168
+ /// Constructor for cloning \a p
169
+ LqInt(Space* home, bool share, LqInt& p);
170
+ /// Constructor for creation
171
+ LqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
172
+ public:
173
+ /// Create copy during cloning
174
+ virtual Actor* copy(Space* home, bool share);
175
+ /// Perform propagation
176
+ virtual ExecStatus propagate(Space* home);
177
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\geq c\f$
178
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
179
+ };
180
+
181
+ /**
182
+ * \brief %Propagator for counting views (not equal integer to number of equal views)
183
+ *
184
+ * Not all combinations of views are possible. The types \a VX
185
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
186
+ *
187
+ * Requires \code #include "gecode/int/count.hh" \endcode
188
+ * \ingroup FuncIntProp
189
+ */
190
+ template<class VX, class VY>
191
+ class NqInt : public BinaryPropagator<VX,PC_INT_DOM> {
192
+ protected:
193
+ using BinaryPropagator<VX,PC_INT_DOM>::x0;
194
+ using BinaryPropagator<VX,PC_INT_DOM>::x1;
195
+ /// Views not yet subscribed to
196
+ ViewArray<VX> x;
197
+ /// View to compare with
198
+ VY y;
199
+ /// Righthandside
200
+ int c;
201
+ /// Update subscription
202
+ bool resubscribe(Space* home, VX& z);
203
+ /// Constructor for posting
204
+ NqInt(Space* home, ViewArray<VX>& x, VY y, int c);
205
+ /// Constructor for cloning \a p
206
+ NqInt(Space* home, bool share, NqInt& p);
207
+ public:
208
+ /// Copy propagator during cloning
209
+ virtual Actor* copy(Space* home, bool share);
210
+ /// Cost function (defined as PC_LINEAR_LO)
211
+ virtual PropCost cost(void) const;
212
+ /// Perform propagation
213
+ virtual ExecStatus propagate(Space* home);
214
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\neq c\f$
215
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
216
+ /// Delete propagator and return its size
217
+ virtual size_t dispose(Space* home);
218
+ };
219
+
220
+ }}}
221
+
222
+ #include "gecode/int/count/int.icc"
223
+
224
+
225
+ namespace Gecode { namespace Int { namespace Count {
226
+
227
+ /**
228
+ * \brief Base-class for count propagators (view)
229
+ *
230
+ */
231
+ template <class VX, class VY, class VZ, bool shr>
232
+ class BaseView : public Propagator {
233
+ protected:
234
+ /// Views still to count
235
+ ViewArray<VX> x;
236
+ /// View to compare to
237
+ VY y;
238
+ /// View which yields result of counting
239
+ VZ z;
240
+ /// Number of views which are equal and have been eliminated
241
+ int c;
242
+ /// Constructor for cloning \a p
243
+ BaseView(Space* home, bool shr, BaseView& p);
244
+ /// Constructor for creation
245
+ BaseView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
246
+ public:
247
+ /// Delete propagator and return its size
248
+ virtual size_t dispose(Space* home);
249
+ /// Cost function (defined as dynamic PC_LINEAR_LO)
250
+ virtual PropCost cost(void) const;
251
+ protected:
252
+ /// Count how many views are equal now
253
+ void count(Space* home);
254
+ /// How many views are at least equal
255
+ int atleast(void) const;
256
+ /// How many views are at most equal
257
+ int atmost(void) const;
258
+ /// Test whether there is sharing of \a z with \a x or \a y
259
+ static bool sharing(const ViewArray<VX>& x, const VY& y, const VZ& z);
260
+ };
261
+
262
+ /**
263
+ * \brief %Propagator for counting views (equal to number of equal views)
264
+ *
265
+ * Not all combinations of views are possible. The types \a VX
266
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
267
+ *
268
+ * Requires \code #include "gecode/int/count.hh" \endcode
269
+ * \ingroup FuncIntProp
270
+ */
271
+ template <class VX, class VY, class VZ, bool shr>
272
+ class EqView : public BaseView<VX,VY,VZ,shr> {
273
+ protected:
274
+ using BaseView<VX,VY,VZ,shr>::x;
275
+ using BaseView<VX,VY,VZ,shr>::z;
276
+ using BaseView<VX,VY,VZ,shr>::c;
277
+ using BaseView<VX,VY,VZ,shr>::y;
278
+ using BaseView<VX,VY,VZ,shr>::count;
279
+ using BaseView<VX,VY,VZ,shr>::atleast;
280
+ using BaseView<VX,VY,VZ,shr>::atmost;
281
+
282
+ /// Constructor for cloning \a p
283
+ EqView(Space* home, bool shr, EqView& p);
284
+ public:
285
+ /// Constructor for creation
286
+ EqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
287
+ /// Create copy during cloning
288
+ virtual Actor* copy(Space* home, bool shr);
289
+ /// Perform propagation
290
+ virtual ExecStatus propagate(Space* home);
291
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}=z+c\f$
292
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
293
+ };
294
+
295
+ /**
296
+ * \brief %Propagator for counting views (different from number of equal views)
297
+ *
298
+ * Not all combinations of views are possible. The types \a VX
299
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
300
+ *
301
+ * Requires \code #include "gecode/int/count.hh" \endcode
302
+ * \ingroup FuncIntProp
303
+ */
304
+ template <class VX, class VY, class VZ, bool shr>
305
+ class NqView : public BaseView<VX,VY,VZ,shr> {
306
+ protected:
307
+ using BaseView<VX,VY,VZ,shr>::x;
308
+ using BaseView<VX,VY,VZ,shr>::z;
309
+ using BaseView<VX,VY,VZ,shr>::c;
310
+ using BaseView<VX,VY,VZ,shr>::y;
311
+ using BaseView<VX,VY,VZ,shr>::count;
312
+ using BaseView<VX,VY,VZ,shr>::atleast;
313
+ using BaseView<VX,VY,VZ,shr>::atmost;
314
+
315
+ /// Constructor for cloning \a p
316
+ NqView(Space* home, bool shr, NqView& p);
317
+ public:
318
+ /// Constructor for creation
319
+ NqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
320
+ /// Create copy during cloning
321
+ virtual Actor* copy(Space* home, bool shr);
322
+ /// Perform propagation
323
+ virtual ExecStatus propagate(Space* home);
324
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\neq z+c\f$
325
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
326
+ };
327
+
328
+ /**
329
+ * \brief %Propagator for counting views (less or equal to number of equal views)
330
+ *
331
+ * Not all combinations of views are possible. The types \a VX
332
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
333
+ *
334
+ * Requires \code #include "gecode/int/count.hh" \endcode
335
+ * \ingroup FuncIntProp
336
+ */
337
+ template <class VX, class VY, class VZ, bool shr>
338
+ class LqView : public BaseView<VX,VY,VZ,shr> {
339
+ protected:
340
+ using BaseView<VX,VY,VZ,shr>::x;
341
+ using BaseView<VX,VY,VZ,shr>::z;
342
+ using BaseView<VX,VY,VZ,shr>::c;
343
+ using BaseView<VX,VY,VZ,shr>::y;
344
+ using BaseView<VX,VY,VZ,shr>::count;
345
+ using BaseView<VX,VY,VZ,shr>::atleast;
346
+ using BaseView<VX,VY,VZ,shr>::atmost;
347
+
348
+ /// Constructor for cloning \a p
349
+ LqView(Space* home, bool shr, LqView& p);
350
+ public:
351
+ /// Constructor for creation
352
+ LqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
353
+ /// Create copy during cloning
354
+ virtual Actor* copy(Space* home, bool shr);
355
+ /// Perform propagation
356
+ virtual ExecStatus propagate(Space* home);
357
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\leq z+c\f$
358
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
359
+ };
360
+
361
+ /**
362
+ * \brief %Propagator for counting views (greater or equal to number of equal views)
363
+ *
364
+ * Not all combinations of views are possible. The types \a VX
365
+ * and \a VY must be either equal, or \a VY must be ConstIntView.
366
+ *
367
+ * Requires \code #include "gecode/int/count.hh" \endcode
368
+ * \ingroup FuncIntProp
369
+ */
370
+ template <class VX, class VY, class VZ, bool shr>
371
+ class GqView : public BaseView<VX,VY,VZ,shr> {
372
+ protected:
373
+ using BaseView<VX,VY,VZ,shr>::x;
374
+ using BaseView<VX,VY,VZ,shr>::z;
375
+ using BaseView<VX,VY,VZ,shr>::c;
376
+ using BaseView<VX,VY,VZ,shr>::y;
377
+ using BaseView<VX,VY,VZ,shr>::count;
378
+ using BaseView<VX,VY,VZ,shr>::atleast;
379
+ using BaseView<VX,VY,VZ,shr>::atmost;
380
+
381
+ /// Constructor for cloning \a p
382
+ GqView(Space* home, bool shr, GqView& p);
383
+ public:
384
+ /// Constructor for creation
385
+ GqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
386
+ /// Create copy during cloning
387
+ virtual Actor* copy(Space* home, bool share);
388
+ /// Perform propagation
389
+ virtual ExecStatus propagate(Space* home);
390
+ /// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\geq z+c\f$
391
+ static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
392
+ };
393
+
394
+ }}}
395
+
396
+ #include "gecode/int/count/view.icc"
397
+
398
+ #endif
399
+
400
+ // STATISTICS: int-prop
401
+
@@ -0,0 +1,495 @@
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-08 20:36:53 +0200 (Tue, 08 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3538 $
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 Count {
23
+
24
+ /*
25
+ * General baseclass
26
+ *
27
+ */
28
+
29
+ template <class VX, class VY>
30
+ forceinline
31
+ BaseInt<VX,VY>::BaseInt(Space* home,
32
+ ViewArray<VX>& x0, int n_s0, VY y0, int c0)
33
+ : Propagator(home), x(x0), n_s(n_s0), y(y0), c(c0) {
34
+ for (int i=n_s; i--; )
35
+ x[i].subscribe(home,this,PC_INT_DOM);
36
+ y.subscribe(home,this,PC_INT_DOM);
37
+ }
38
+
39
+ template <class VX, class VY>
40
+ size_t
41
+ BaseInt<VX,VY>::dispose(Space* home) {
42
+ assert(!home->failed());
43
+ for (int i=n_s; i--; )
44
+ x[i].cancel(home,this,PC_INT_DOM);
45
+ y.cancel(home,this,PC_INT_DOM);
46
+ (void) Propagator::dispose(home);
47
+ return sizeof(*this);
48
+ }
49
+
50
+ template <class VX, class VY>
51
+ forceinline
52
+ BaseInt<VX,VY>::BaseInt(Space* home, bool share, BaseInt<VX,VY>& p)
53
+ : Propagator(home,share,p), n_s(p.n_s), c(p.c) {
54
+ x.update(home,share,p.x);
55
+ y.update(home,share,p.y);
56
+ }
57
+
58
+ template <class VX, class VY>
59
+ PropCost
60
+ BaseInt<VX,VY>::cost(void) const {
61
+ return cost_lo(x.size(),PC_LINEAR_LO);
62
+ }
63
+
64
+ /*
65
+ * Equal propagator (integer rhs)
66
+ *
67
+ */
68
+ template <class VX, class VY>
69
+ forceinline
70
+ EqInt<VX,VY>::EqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c)
71
+ : BaseInt<VX,VY>(home,x,n_s,y,c) {}
72
+
73
+ template <class VX, class VY>
74
+ ExecStatus
75
+ EqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
76
+ // Eliminate decided views
77
+ int n_x = x.size();
78
+ for (int i=n_x; i--; )
79
+ switch (holds(x[i],y)) {
80
+ case RT_FALSE:
81
+ x[i] = x[--n_x]; break;
82
+ case RT_TRUE:
83
+ x[i] = x[--n_x]; c--; break;
84
+ case RT_MAYBE:
85
+ break;
86
+ default:
87
+ GECODE_NEVER;
88
+ }
89
+ x.size(n_x);
90
+ // RHS too small or too large
91
+ if ((c < 0) || (c > n_x))
92
+ return ES_FAILED;
93
+ // All views must be different
94
+ if (c == 0) {
95
+ ExecStatus es = post_false(home,x,y);
96
+ return (es == ES_SUBSUMED) ? ES_OK : es;
97
+ }
98
+ // All views must be equal
99
+ if (c == n_x) {
100
+ ExecStatus es = post_true(home,x,y);
101
+ return (es == ES_SUBSUMED) ? ES_OK : es;
102
+ }
103
+ // Compute how many subscriptions must be created
104
+ int n_s = std::max(c,n_x-c)+1;
105
+ assert(n_s <= n_x);
106
+ (void) new (home) EqInt<VX,VY>(home,x,n_s,y,c);
107
+ return ES_OK;
108
+ }
109
+
110
+ template <class VX, class VY>
111
+ forceinline
112
+ EqInt<VX,VY>::EqInt(Space* home, bool share, EqInt<VX,VY>& p)
113
+ : BaseInt<VX,VY>(home,share,p) {}
114
+
115
+ template <class VX, class VY>
116
+ Actor*
117
+ EqInt<VX,VY>::copy(Space* home, bool share) {
118
+ return new (home) EqInt<VX,VY>(home,share,*this);
119
+ }
120
+
121
+ template <class VX, class VY>
122
+ ExecStatus
123
+ EqInt<VX,VY>::propagate(Space* home) {
124
+ // Eliminate decided views from subscribed views
125
+ int n_x = x.size();
126
+ for (int i=n_s; i--; )
127
+ switch (holds(x[i],y)) {
128
+ case RT_FALSE:
129
+ x[i].cancel(home,this,PC_INT_DOM);
130
+ x[i]=x[--n_s]; x[n_s]=x[--n_x];
131
+ break;
132
+ case RT_TRUE:
133
+ x[i].cancel(home,this,PC_INT_DOM);
134
+ x[i]=x[--n_s]; x[n_s]=x[--n_x]; c--;
135
+ break;
136
+ case RT_MAYBE:
137
+ break;
138
+ default:
139
+ GECODE_NEVER;
140
+ }
141
+ x.size(n_x);
142
+ if ((c < 0) || (c > n_x))
143
+ return ES_FAILED;
144
+ // Eliminate decided views from unsubscribed views
145
+ for (int i=n_x; i-- > n_s; )
146
+ switch (holds(x[i],y)) {
147
+ case RT_FALSE: x[i]=x[--n_x]; break;
148
+ case RT_TRUE: x[i]=x[--n_x]; c--; break;
149
+ case RT_MAYBE: break;
150
+ default: GECODE_NEVER;
151
+ }
152
+ x.size(n_x);
153
+ if ((c < 0) || (c > n_x))
154
+ return ES_FAILED;
155
+ if (c == 0)
156
+ // All views must be different
157
+ return post_false(home,x,y);
158
+ if (c == n_x)
159
+ // All views must be equal
160
+ return post_true(home,x,y);
161
+ int m = std::max(c,n_x-c)+1;
162
+ assert(m <= n_x);
163
+ // Now, there must be new subscriptions from x[n_s] up to x[m-1]
164
+ while (n_s < m)
165
+ x[n_s++].subscribe(home,this,PC_INT_DOM,false);
166
+ return ES_FIX;
167
+ }
168
+
169
+ /*
170
+ * Greater or equal propagator (integer rhs)
171
+ *
172
+ */
173
+ template <class VX, class VY>
174
+ forceinline
175
+ GqInt<VX,VY>::GqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c)
176
+ : BaseInt<VX,VY>(home,x,n_s,y,c) {}
177
+
178
+ template <class VX, class VY>
179
+ ExecStatus
180
+ GqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
181
+ // Eliminate decided views
182
+ int n_x = x.size();
183
+ for (int i=n_x; i--; )
184
+ switch (holds(x[i],y)) {
185
+ case RT_FALSE:
186
+ x[i] = x[--n_x]; break;
187
+ case RT_TRUE:
188
+ x[i] = x[--n_x]; c--; break;
189
+ case RT_MAYBE:
190
+ break;
191
+ default:
192
+ GECODE_NEVER;
193
+ }
194
+ x.size(n_x);
195
+ // RHS too large
196
+ if (n_x < c)
197
+ return ES_FAILED;
198
+ // Whatever the x[i] take for values, the inequality is subsumed
199
+ if (c <= 0)
200
+ return ES_OK;
201
+ // All views must be equal
202
+ if (c == n_x) {
203
+ ExecStatus es = post_true(home,x,y);
204
+ return (es == ES_SUBSUMED) ? ES_OK : es;
205
+ }
206
+ (void) new (home) GqInt<VX,VY>(home,x,c+1,y,c);
207
+ return ES_OK;
208
+ }
209
+
210
+ template <class VX, class VY>
211
+ forceinline
212
+ GqInt<VX,VY>::GqInt(Space* home, bool share, GqInt<VX,VY>& p)
213
+ : BaseInt<VX,VY>(home,share,p) {}
214
+
215
+ template <class VX, class VY>
216
+ Actor*
217
+ GqInt<VX,VY>::copy(Space* home, bool share) {
218
+ return new (home) GqInt<VX,VY>(home,share,*this);
219
+ }
220
+
221
+ template <class VX, class VY>
222
+ ExecStatus
223
+ GqInt<VX,VY>::propagate(Space* home) {
224
+ // Eliminate decided views from subscribed views
225
+ int n_x = x.size();
226
+ for (int i=n_s; i--; )
227
+ switch (holds(x[i],y)) {
228
+ case RT_FALSE:
229
+ x[i].cancel(home,this,PC_INT_DOM);
230
+ x[i]=x[--n_s]; x[n_s]=x[--n_x];
231
+ break;
232
+ case RT_TRUE:
233
+ x[i].cancel(home,this,PC_INT_DOM);
234
+ x[i]=x[--n_s]; x[n_s]=x[--n_x]; c--;
235
+ break;
236
+ case RT_MAYBE:
237
+ break;
238
+ default:
239
+ GECODE_NEVER;
240
+ }
241
+ x.size(n_x);
242
+ if (n_x < c)
243
+ return ES_FAILED;
244
+ if (c <= 0)
245
+ return ES_SUBSUMED;
246
+ // Eliminate decided views from unsubscribed views
247
+ for (int i=n_x; i-- > n_s; )
248
+ switch (holds(x[i],y)) {
249
+ case RT_FALSE: x[i]=x[--n_x]; break;
250
+ case RT_TRUE: x[i]=x[--n_x]; c--; break;
251
+ case RT_MAYBE: break;
252
+ default: GECODE_NEVER;
253
+ }
254
+ x.size(n_x);
255
+ if (n_x < c)
256
+ return ES_FAILED;
257
+ if (c <= 0)
258
+ return ES_SUBSUMED;
259
+ if (c == n_x)
260
+ // All views must be equal
261
+ return post_true(home,x,y);
262
+ // Now, there must be new subscriptions from x[n_s] up to x[c+1]
263
+ while (n_s <= c)
264
+ x[n_s++].subscribe(home,this,PC_INT_DOM,false);
265
+ return ES_FIX;
266
+ }
267
+
268
+ /*
269
+ * Less or equal propagator (integer rhs)
270
+ *
271
+ */
272
+ template <class VX, class VY>
273
+ forceinline
274
+ LqInt<VX,VY>::LqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c)
275
+ : BaseInt<VX,VY>(home,x,n_s,y,c) {}
276
+
277
+ template <class VX, class VY>
278
+ ExecStatus
279
+ LqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
280
+ // Eliminate decided views
281
+ int n_x = x.size();
282
+ for (int i=n_x; i--; )
283
+ switch (holds(x[i],y)) {
284
+ case RT_FALSE:
285
+ x[i] = x[--n_x]; break;
286
+ case RT_TRUE:
287
+ x[i] = x[--n_x]; c--; break;
288
+ case RT_MAYBE:
289
+ break;
290
+ default:
291
+ GECODE_NEVER;
292
+ }
293
+ x.size(n_x);
294
+ if (c < 0)
295
+ return ES_FAILED;
296
+ if (c >= n_x)
297
+ return ES_OK;
298
+ // All views must be different
299
+ if (c == 0) {
300
+ ExecStatus es = post_false(home,x,y);
301
+ return (es == ES_SUBSUMED) ? ES_OK : es;
302
+ }
303
+ (void) new (home) LqInt<VX,VY>(home,x,n_x-c+1,y,c);
304
+ return ES_OK;
305
+ }
306
+
307
+ template <class VX, class VY>
308
+ forceinline
309
+ LqInt<VX,VY>::LqInt(Space* home, bool share, LqInt<VX,VY>& p)
310
+ : BaseInt<VX,VY>(home,share,p) {}
311
+
312
+ template <class VX, class VY>
313
+ Actor*
314
+ LqInt<VX,VY>::copy(Space* home, bool share) {
315
+ return new (home) LqInt<VX,VY>(home,share,*this);
316
+ }
317
+
318
+ template <class VX, class VY>
319
+ ExecStatus
320
+ LqInt<VX,VY>::propagate(Space* home) {
321
+ // Eliminate decided views from subscribed views
322
+ int n_x = x.size();
323
+ for (int i=n_s; i--; )
324
+ switch (holds(x[i],y)) {
325
+ case RT_FALSE:
326
+ x[i].cancel(home,this,PC_INT_DOM);
327
+ x[i]=x[--n_s]; x[n_s]=x[--n_x];
328
+ break;
329
+ case RT_TRUE:
330
+ x[i].cancel(home,this,PC_INT_DOM);
331
+ x[i]=x[--n_s]; x[n_s]=x[--n_x]; c--;
332
+ break;
333
+ case RT_MAYBE:
334
+ break;
335
+ default:
336
+ GECODE_NEVER;
337
+ }
338
+ x.size(n_x);
339
+ if (c < 0)
340
+ return ES_FAILED;
341
+ if (c >= n_x)
342
+ return ES_SUBSUMED;
343
+ // Eliminate decided views from unsubscribed views
344
+ for (int i=n_x; i-- > n_s; )
345
+ switch (holds(x[i],y)) {
346
+ case RT_FALSE: x[i]=x[--n_x]; break;
347
+ case RT_TRUE: x[i]=x[--n_x]; c--; break;
348
+ case RT_MAYBE: break;
349
+ default: GECODE_NEVER;
350
+ }
351
+ x.size(n_x);
352
+ if (c < 0)
353
+ return ES_FAILED;
354
+ if (c >= n_x)
355
+ return ES_SUBSUMED;
356
+ if (c == 0)
357
+ // All views must be different
358
+ return post_false(home,x,y);
359
+ // Now, there must be new subscriptions from x[n_s] up to x[n_x-c+1]
360
+ int m = n_x-c;
361
+ while (n_s <= m)
362
+ x[n_s++].subscribe(home,this,PC_INT_DOM,false);
363
+ return ES_FIX;
364
+ }
365
+
366
+ /*
367
+ * Not-equal propagator (integer rhs)
368
+ *
369
+ */
370
+ template<class VX, class VY>
371
+ forceinline
372
+ NqInt<VX,VY>::NqInt(Space* home, ViewArray<VX>& x0, VY y0, int c0)
373
+ : BinaryPropagator<VX,PC_INT_DOM>(home,
374
+ x0[x0.size()-2],
375
+ x0[x0.size()-1]), x(x0), y(y0), c(c0) {
376
+ assert(x.size() >= 2);
377
+ x.size(x.size()-2);
378
+ y.subscribe(home,this,PC_INT_DOM);
379
+ }
380
+
381
+ template <class VX, class VY>
382
+ size_t
383
+ NqInt<VX,VY>::dispose(Space* home) {
384
+ assert(!home->failed());
385
+ y.cancel(home,this,PC_INT_DOM);
386
+ (void) BinaryPropagator<VX,PC_INT_DOM>::dispose(home);
387
+ return sizeof(*this);
388
+ }
389
+
390
+ template<class VX, class VY>
391
+ forceinline
392
+ NqInt<VX,VY>::NqInt(Space* home, bool share, NqInt<VX,VY>& p)
393
+ : BinaryPropagator<VX,PC_INT_DOM>(home,share,p), c(p.c) {
394
+ x.update(home,share,p.x);
395
+ y.update(home,share,p.y);
396
+ }
397
+
398
+ template<class VX, class VY>
399
+ forceinline ExecStatus
400
+ NqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
401
+ int n = x.size();
402
+ for (int i=n; i--; )
403
+ switch (holds(x[i],y)) {
404
+ case RT_FALSE: x[i]=x[--n]; break;
405
+ case RT_TRUE: x[i]=x[--n]; c--; break;
406
+ case RT_MAYBE: break;
407
+ default: GECODE_NEVER;
408
+ }
409
+ x.size(n);
410
+ if ((n < c) || (c < 0))
411
+ return ES_OK;
412
+ if (n == 0)
413
+ return (c == 0) ? ES_FAILED : ES_OK;
414
+ if (n == 1) {
415
+ ExecStatus es = (c == 1) ?
416
+ post_false(home,x[0],y) : post_true(home,x[0],y);
417
+ return (es == ES_SUBSUMED) ? ES_OK : es;
418
+ }
419
+ (void) new (home) NqInt(home,x,y,c);
420
+ return ES_OK;
421
+ }
422
+
423
+ template<class VX, class VY>
424
+ Actor*
425
+ NqInt<VX,VY>::copy(Space* home, bool share) {
426
+ return new (home) NqInt<VX,VY>(home,share,*this);
427
+ }
428
+
429
+ template<class VX, class VY>
430
+ PropCost
431
+ NqInt<VX,VY>::cost(void) const {
432
+ return PC_LINEAR_LO;
433
+ }
434
+
435
+ template<class VX, class VY>
436
+ forceinline bool
437
+ NqInt<VX,VY>::resubscribe(Space* home, VX& z) {
438
+ switch (holds(z,y)) {
439
+ case RT_FALSE: break;
440
+ case RT_TRUE: c--; break;
441
+ case RT_MAYBE: return true;
442
+ default: GECODE_NEVER;
443
+ }
444
+ int n = x.size();
445
+ for (int i=n; i--; )
446
+ switch (holds(x[i],y)) {
447
+ case RT_FALSE:
448
+ x[i]=x[--n];
449
+ break;
450
+ case RT_TRUE:
451
+ x[i]=x[--n]; c--;
452
+ break;
453
+ case RT_MAYBE:
454
+ // New undecided view found
455
+ z.cancel(home,this,PC_INT_DOM);
456
+ z=x[i]; x[i]=x[--n];
457
+ x.size(n);
458
+ z.subscribe(home,this,PC_INT_DOM,false);
459
+ return true;
460
+ default:
461
+ GECODE_NEVER;
462
+ }
463
+ // All views have been decided
464
+ x.size(0);
465
+ return false;
466
+ }
467
+
468
+ template<class VX, class VY>
469
+ ExecStatus
470
+ NqInt<VX,VY>::propagate(Space* home) {
471
+ bool s0 = resubscribe(home,x0);
472
+ bool s1 = resubscribe(home,x1);
473
+ int n = x.size() + s0 + s1;
474
+ if ((n < c) || (c < 0))
475
+ return ES_SUBSUMED;
476
+ if (n == 0)
477
+ return (c == 0) ? ES_FAILED : ES_SUBSUMED;
478
+ if (n == 1) {
479
+ if (s0) {
480
+ return (c == 1) ?
481
+ post_false(home,x0,y) : post_true(home,x0,y);
482
+ } else {
483
+ assert(s1);
484
+ return (c == 1) ?
485
+ post_false(home,x1,y) : post_true(home,x1,y);
486
+ }
487
+ return ES_SUBSUMED;
488
+ }
489
+ return ES_FIX;
490
+ }
491
+
492
+ }}}
493
+
494
+ // STATISTICS: int-prop
495
+