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,96 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ *
5
+ * Contributing authors:
6
+ * Gabor Szokoli <szokoli@gecode.org>
7
+ *
8
+ * Copyright:
9
+ * Guido Tack, 2004, 2005
10
+ *
11
+ * Last modified:
12
+ * $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
13
+ * $Revision: 3188 $
14
+ *
15
+ * This file is part of Gecode, the generic constraint
16
+ * development environment:
17
+ * http://www.gecode.org
18
+ *
19
+ * See the file "LICENSE" for information on usage and
20
+ * redistribution of this file, and for a
21
+ * DISCLAIMER OF ALL WARRANTIES.
22
+ *
23
+ */
24
+
25
+ #include "gecode/set.hh"
26
+ #include "gecode/iter.hh"
27
+ #include "gecode/set/rel.hh"
28
+ #include "gecode/set/rel-op.hh"
29
+
30
+ namespace Gecode {
31
+ using namespace Gecode::Set;
32
+ using namespace Gecode::Set::Rel;
33
+ using namespace Gecode::Set::RelOp;
34
+
35
+ void
36
+ rel(Space* home, SetVar x, SetOpType op, SetVar y, SetRelType r, SetVar z) {
37
+ rel_op_post<SetView,SetView,SetView>(home, x, op, y, r, z);
38
+ }
39
+
40
+ void
41
+ rel(Space* home, SetOpType op, const SetVarArgs& x, SetVar y) {
42
+ if (home->failed()) return;
43
+ ViewArray<SetView> xa(home,x);
44
+ switch(op) {
45
+ case SOT_UNION:
46
+ GECODE_ES_FAIL(home,(RelOp::UnionN<SetView,SetView>::post(home, xa, y)));
47
+ break;
48
+ case SOT_DUNION:
49
+ GECODE_ES_FAIL(home,
50
+ (RelOp::PartitionN<SetView,SetView>::post(home, xa, y)));
51
+ break;
52
+ case SOT_INTER:
53
+ {
54
+ GECODE_ES_FAIL(home,
55
+ (RelOp::IntersectionN<SetView,SetView>
56
+ ::post(home, xa, y)));
57
+ }
58
+ break;
59
+ case SOT_MINUS:
60
+ throw InvalidRelation("rel minus");
61
+ break;
62
+ }
63
+ }
64
+
65
+ void
66
+ rel(Space* home, SetOpType op, const IntVarArgs& x, SetVar y) {
67
+ if (home->failed()) return;
68
+ ViewArray<SingletonView> xa(home,x.size());
69
+ for (int i=x.size(); i--;) {
70
+ Int::IntView iv(x[i]);
71
+ SingletonView sv(iv);
72
+ xa[i] = sv;
73
+ }
74
+
75
+ switch(op) {
76
+ case SOT_UNION:
77
+ GECODE_ES_FAIL(home,(RelOp::UnionN<SingletonView,SetView>
78
+ ::post(home, xa, y)));
79
+ break;
80
+ case SOT_DUNION:
81
+ GECODE_ES_FAIL(home,(RelOp::PartitionN<SingletonView,SetView>
82
+ ::post(home, xa, y)));
83
+ break;
84
+ case SOT_INTER:
85
+ GECODE_ES_FAIL(home,
86
+ (RelOp::IntersectionN<SingletonView,SetView>
87
+ ::post(home, xa, y)));
88
+ break;
89
+ case SOT_MINUS:
90
+ throw InvalidRelation("rel minus");
91
+ break;
92
+ }
93
+ }
94
+ }
95
+
96
+ // STATISTICS: set-post
@@ -0,0 +1,267 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Contributing authors:
7
+ * Gabor Szokoli <szokoli@gecode.org>
8
+ *
9
+ * Copyright:
10
+ * Guido Tack, 2004
11
+ * Christian Schulte, 2004
12
+ * Gabor Szokoli, 2004
13
+ *
14
+ * Last modified:
15
+ * $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
16
+ * $Revision: 3188 $
17
+ *
18
+ * This file is part of Gecode, the generic constraint
19
+ * development environment:
20
+ * http://www.gecode.org
21
+ *
22
+ * See the file "LICENSE" for information on usage and
23
+ * redistribution of this file, and for a
24
+ * DISCLAIMER OF ALL WARRANTIES.
25
+ *
26
+ */
27
+
28
+ #ifndef __GECODE_SET_RELOP_HH__
29
+ #define __GECODE_SET_RELOP_HH__
30
+
31
+ #include "gecode/set.hh"
32
+ #include "gecode/iter.hh"
33
+ #include "gecode/set/rel.hh"
34
+
35
+ namespace Gecode { namespace Set { namespace RelOp {
36
+
37
+ /**
38
+ * \namespace Gecode::Set::RelOp
39
+ * \brief Standard set operation propagators
40
+ */
41
+
42
+ /**
43
+ * \brief %Propagator for the superset of intersection
44
+ *
45
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
46
+ * \ingroup FuncSetProp
47
+ */
48
+
49
+ template <class View0, class View1, class View2>
50
+ class SuperOfInter :
51
+ public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
52
+ View2,PC_SET_CLUB> {
53
+ protected:
54
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
55
+ View2,PC_SET_CLUB>::x0;
56
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
57
+ View2,PC_SET_CLUB>::x1;
58
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
59
+ View2,PC_SET_CLUB>::x2;
60
+ /// Constructor for cloning \a p
61
+ SuperOfInter(Space* home, bool share,SuperOfInter& p);
62
+ /// Constructor for posting
63
+ SuperOfInter(Space* home,View0, View1, View2);
64
+ public:
65
+ /// Copy propagator during cloning
66
+ virtual Actor* copy(Space* home,bool);
67
+ /// Perform propagation
68
+ virtual ExecStatus propagate(Space* home);
69
+ /// Post propagator \f$ z \supseteq x \cap y\f$
70
+ static ExecStatus post(Space* home, View0 x, View1 y, View2 z);
71
+ };
72
+
73
+ /**
74
+ * \brief %Propagator for the subset of union
75
+ *
76
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
77
+ * \ingroup FuncSetProp
78
+ */
79
+ template <class View0, class View1, class View2>
80
+ class SubOfUnion :
81
+ public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
82
+ View2,PC_SET_ANY> {
83
+ protected:
84
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
85
+ View2,PC_SET_ANY>::x0;
86
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
87
+ View2,PC_SET_ANY>::x1;
88
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
89
+ View2,PC_SET_ANY>::x2;
90
+ /// Constructor for cloning \a p
91
+ SubOfUnion(Space* home, bool share,SubOfUnion& p);
92
+ /// Constructor for posting
93
+ SubOfUnion(Space* home,View0, View1, View2);
94
+ public:
95
+ /// Copy propagator during cloning
96
+ virtual Actor* copy(Space* home,bool);
97
+ /// Perform propagation
98
+ virtual ExecStatus propagate(Space* home);
99
+ /// Post propagator \f$ z \subseteq x \cap y\f$
100
+ static ExecStatus post(Space* home,View0 x,View1 y,View2 z);
101
+ };
102
+
103
+
104
+ /**
105
+ * \brief %Propagator for ternary intersection
106
+ *
107
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
108
+ * \ingroup FuncSetProp
109
+ */
110
+ template <class View0, class View1, class View2>
111
+ class Intersection:
112
+ public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
113
+ View2,PC_SET_ANY> {
114
+ protected:
115
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
116
+ View2,PC_SET_ANY>::x0;
117
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
118
+ View2,PC_SET_ANY>::x1;
119
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
120
+ View2,PC_SET_ANY>::x2;
121
+ /// Constructor for cloning \a p
122
+ Intersection(Space* home, bool share,Intersection& p);
123
+ /// Constructor for posting
124
+ Intersection(Space* home,View0,View1,View2);
125
+ public:
126
+ /// Copy propagator during cloning
127
+ virtual Actor* copy(Space* home,bool);
128
+ /// Perform propagation
129
+ virtual ExecStatus propagate(Space* home);
130
+ /// Post propagator \f$ z=x\cap y\f$
131
+ static ExecStatus post(Space* home,View0 x,View1 y,View2 z);
132
+ };
133
+
134
+ /**
135
+ * \brief %Propagator for ternary union
136
+ *
137
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
138
+ * \ingroup FuncSetProp
139
+ */
140
+ template <class View0, class View1, class View2>
141
+ class Union:
142
+ public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
143
+ View2,PC_SET_ANY> {
144
+ protected:
145
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
146
+ View2,PC_SET_ANY>::x0;
147
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
148
+ View2,PC_SET_ANY>::x1;
149
+ using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
150
+ View2,PC_SET_ANY>::x2;
151
+ /// Constructor for cloning \a p
152
+ Union(Space* home, bool share,Union& p);
153
+ /// Constructor for posting
154
+ Union(Space* home,View0,View1,View2);
155
+ public:
156
+ /// Copy propagator during cloning
157
+ virtual Actor* copy(Space* home,bool);
158
+ /// Perform propagation
159
+ virtual ExecStatus propagate(Space* home);
160
+ /// Post propagator \f$ z=x\cup y\f$
161
+ static ExecStatus post(Space* home,View0 x,View1 y,View2 z);
162
+ };
163
+
164
+ /**
165
+ * \brief %Propagator for nary intersection
166
+ *
167
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
168
+ * \ingroup FuncSetProp
169
+ */
170
+ template <class View0, class View1>
171
+ class IntersectionN : public InhomNaryOnePropagator<View0,PC_SET_ANY,
172
+ View1,PC_SET_ANY> {
173
+ protected:
174
+ using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::x;
175
+ using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::y;
176
+ /// Whether the any views share a variable implementation
177
+ bool shared;
178
+ /// Intersection of the determined \f$x_i\f$ (which are dropped)
179
+ LUBndSet intOfDets;
180
+ /// Constructor for cloning \a p
181
+ IntersectionN(Space* home, bool share,IntersectionN& p);
182
+ /// Constructor for posting
183
+ IntersectionN(Space* home,ViewArray<View0>&, View1);
184
+ public:
185
+ virtual PropCost cost(void) const;
186
+ /// Copy propagator during cloning
187
+ virtual Actor* copy(Space* home,bool);
188
+ /// Perform propagation
189
+ virtual ExecStatus propagate(Space* home);
190
+ /// Post propagator \f$ x = \bigcap_{i\in\{0,\dots,n-1\}} y_i \f$
191
+ static ExecStatus post(Space* home,ViewArray<View0>& y,View1 x);
192
+ };
193
+
194
+ /**
195
+ * \brief %Propagator for nary union
196
+ *
197
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
198
+ * \ingroup FuncSetProp
199
+ */
200
+ template <class View0, class View1>
201
+ class UnionN : public InhomNaryOnePropagator<View0,PC_SET_ANY,
202
+ View1,PC_SET_ANY> {
203
+ protected:
204
+ using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::x;
205
+ using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::y;
206
+ /// Whether the any views share a variable implementation
207
+ bool shared;
208
+ /// Union of the determined \f$x_i\f$ (which are dropped)
209
+ GLBndSet unionOfDets;
210
+ /// Constructor for cloning \a p
211
+ UnionN(Space* home, bool share,UnionN& p);
212
+ /// Constructor for posting
213
+ UnionN(Space* home,ViewArray<View0>&,View1);
214
+ public:
215
+ /// Copy propagator during cloning
216
+ virtual Actor* copy(Space* home, bool);
217
+ /// Perform propagation
218
+ virtual ExecStatus propagate(Space* home);
219
+ virtual PropCost cost(void) const;
220
+ /// Post propagator \f$ x = \bigcup_{i\in\{0,\dots,n-1\}} y_i \f$
221
+ static ExecStatus post(Space* home,ViewArray<View0>& y,View1 x);
222
+ };
223
+
224
+
225
+ /**
226
+ * \brief %Propagator for nary partition
227
+ *
228
+ * Requires \code #include "gecode/set/rel-op.hh" \endcode
229
+ * \ingroup FuncSetProp
230
+ */
231
+ template <class View0, class View1>
232
+ class PartitionN : public InhomNaryOnePropagator<View0,PC_SET_ANY,
233
+ View1,PC_SET_ANY> {
234
+ protected:
235
+ using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::x;
236
+ using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::y;
237
+ /// Whether the any views share a variable implementation
238
+ bool shared;
239
+ /// Union of the determined \f$x_i\f$ (which are dropped)
240
+ GLBndSet unionOfDets;
241
+ /// Constructor for cloning \a p
242
+ PartitionN(Space* home, bool share,PartitionN& p);
243
+ /// Constructor for posting
244
+ PartitionN(Space* home,ViewArray<View0>&, View1);
245
+ public:
246
+ /// Copy propagator during cloning
247
+ virtual Actor* copy(Space* home,bool);
248
+ /// Perform propagation
249
+ virtual ExecStatus propagate(Space* home);
250
+ virtual PropCost cost(void) const;
251
+ /// Post propagator \f$ x = \biguplus_{i\in\{0,\dots,n-1\}} y_i \f$
252
+ static ExecStatus post(Space* home,ViewArray<View0>& y,View1 x);
253
+ };
254
+
255
+ }}}
256
+
257
+ #include "gecode/set/rel-op/common.icc"
258
+ #include "gecode/set/rel-op/superofinter.icc"
259
+ #include "gecode/set/rel-op/subofunion.icc"
260
+ #include "gecode/set/rel-op/inter.icc"
261
+ #include "gecode/set/rel-op/union.icc"
262
+ #include "gecode/set/rel-op/partition.icc"
263
+ #include "gecode/set/rel-op/post.icc"
264
+
265
+ #endif
266
+
267
+ // STATISTICS: set-prop
@@ -0,0 +1,528 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Contributing authors:
7
+ * Gabor Szokoli <szokoli@gecode.org>
8
+ *
9
+ * Copyright:
10
+ * Guido Tack, 2004
11
+ * Christian Schulte, 2004
12
+ * Gabor Szokoli, 2004
13
+ *
14
+ * Last modified:
15
+ * $Date: 2006-08-25 17:31:32 +0200 (Fri, 25 Aug 2006) $ by $Author: tack $
16
+ * $Revision: 3573 $
17
+ *
18
+ * This file is part of Gecode, the generic constraint
19
+ * development environment:
20
+ * http://www.gecode.org
21
+ *
22
+ * See the file "LICENSE" for information on usage and
23
+ * redistribution of this file, and for a
24
+ * DISCLAIMER OF ALL WARRANTIES.
25
+ *
26
+ */
27
+
28
+ namespace Gecode {
29
+
30
+ template <class View0, class View1>
31
+ forceinline bool
32
+ viewarrayshared(const ViewArray<View0>& va,
33
+ const View1& y) {
34
+ return va.shared(y);
35
+ }
36
+
37
+ template <>
38
+ forceinline bool
39
+ viewarrayshared<Set::SingletonView,Set::SetView>
40
+ (const ViewArray<Set::SingletonView>& va, const Set::SetView& y) {
41
+ return false;
42
+ }
43
+
44
+ template <>
45
+ forceinline bool
46
+ viewarrayshared<Set::ComplementView<Set::SingletonView>,Set::SetView>
47
+ (const ViewArray<Set::ComplementView<Set::SingletonView> >& va,
48
+ const Set::SetView& y) {
49
+ return false;
50
+ }
51
+
52
+ template <>
53
+ forceinline bool
54
+ viewarrayshared<Set::ComplementView<Set::SingletonView>,
55
+ Set::ComplementView<Set::SetView> >
56
+ (const ViewArray<Set::ComplementView<Set::SingletonView> >& va,
57
+ const Set::ComplementView<Set::SetView>& y) {
58
+ return false;
59
+ }
60
+
61
+
62
+ namespace Set { namespace RelOp {
63
+
64
+ /*
65
+ * Detect sharing between 3 variables
66
+ *
67
+ */
68
+ template <class View0, class View1, class View2>
69
+ forceinline bool
70
+ shared(View0 v0, View1 v1, View2 v2) {
71
+ return shared(v0,v1) || shared(v0,v2) || shared(v1,v2);
72
+ }
73
+
74
+ template <class View0, class View1, class View2>
75
+ ExecStatus unionCard(Space* home,
76
+ bool& retmodified, View0& x0, View1& x1, View2& x2) {
77
+ bool modified = false;
78
+ do {
79
+ retmodified |= modified;
80
+ modified = false;
81
+
82
+ {
83
+ LubRanges<View0> x0ub(x0);
84
+ LubRanges<View1> x1ub(x1);
85
+ Iter::Ranges::Inter<LubRanges<View0>, LubRanges<View1> > i1(x0ub,x1ub);
86
+ unsigned int s1 = Iter::Ranges::size(i1);
87
+ unsigned int res = std::max(x0.cardMin()+
88
+ (x1.cardMin()<s1 ?
89
+ 0 : x1.cardMin()-s1),
90
+ std::max(x0.cardMin(),
91
+ x1.cardMin()));
92
+ GECODE_ME_CHECK_MODIFIED(modified, x2.cardMin(home,res));
93
+ }
94
+
95
+ {
96
+ LubRanges<View0> x0ub(x0);
97
+ LubRanges<View1> x1ub(x1);
98
+ Iter::Ranges::Union<LubRanges<View0>, LubRanges<View1> > u1(x0ub,x1ub);
99
+ unsigned int s1 = Iter::Ranges::size(u1);
100
+ GECODE_ME_CHECK_MODIFIED(modified,
101
+ x2.cardMax(home,
102
+ std::min(x0.cardMax()+x1.cardMax(),s1)));
103
+ }
104
+
105
+ if (x2.cardMin() > x1.cardMax())
106
+ GECODE_ME_CHECK_MODIFIED(modified,
107
+ x0.cardMin(home,x2.cardMin() - x1.cardMax()));
108
+
109
+ if (x2.cardMin() > x0.cardMax())
110
+ GECODE_ME_CHECK_MODIFIED(modified,
111
+ x1.cardMin(home,x2.cardMin() - x0.cardMax()));
112
+
113
+ GECODE_ME_CHECK_MODIFIED(modified,
114
+ x0.cardMax(home,x2.cardMax()));
115
+ GECODE_ME_CHECK_MODIFIED(modified,
116
+ x1.cardMax(home,x2.cardMax()));
117
+ } while(modified);
118
+ return ES_FIX;
119
+ }
120
+
121
+ template <class View0, class View1>
122
+ ExecStatus
123
+ unionNCard(Space* home, bool& modified, ViewArray<View0>& x,
124
+ View1& y, GLBndSet& unionOfDets) {
125
+ int xsize = x.size();
126
+ // Max(Xi.cardMin) <= y.card <= Sum(Xi.cardMax)
127
+ // Xi.card <=y.cardMax
128
+ unsigned int cardMaxSum=unionOfDets.size();
129
+ bool maxValid = true;
130
+ for (int i=xsize; i--; ){
131
+ cardMaxSum+=x[i].cardMax();
132
+ if (cardMaxSum < x[i].cardMax()) { maxValid = false; } //overflow
133
+ GECODE_ME_CHECK_MODIFIED(modified, y.cardMin(home,x[i].cardMin()) );
134
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMax(home,y.cardMax()) );
135
+ }
136
+ if (maxValid) {
137
+ GECODE_ME_CHECK_MODIFIED(modified, y.cardMax(home,cardMaxSum));
138
+ }
139
+ //y.cardMin - Sum(Xj.cardMax) <= Xi.card
140
+
141
+ //TODO: overflow management is a waste now.
142
+ {
143
+ GECODE_AUTOARRAY(unsigned int, rightSum, xsize);
144
+ rightSum[xsize-1]=0;
145
+
146
+ for (int i=x.size()-1;i--;) {
147
+ rightSum[i] = rightSum[i+1] + x[i+1].cardMax();
148
+ if (rightSum[i] < rightSum[i+1]) {
149
+ //overflow, fill the rest of the array.
150
+ for (int j=i; j>0;j--) {
151
+ rightSum[j]=Limits::Set::card_max;
152
+ }
153
+ break;
154
+ }
155
+ }
156
+
157
+ //Size of union of determied vars missing from x sneaked in here:
158
+ unsigned int leftAcc=unionOfDets.size();
159
+
160
+ for (int i=0; i<xsize;i++) {
161
+ unsigned int jsum = leftAcc+rightSum[i];
162
+ //If jsum did not overflow and is less than y.cardMin:
163
+ if (jsum >= leftAcc && jsum < y.cardMin()) {
164
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMin(home,y.cardMin()-jsum));
165
+ }
166
+ leftAcc += x[i].cardMax();
167
+ if (leftAcc < x[i].cardMax()) {leftAcc = Limits::Set::card_max;}
168
+ }
169
+ }
170
+
171
+ //y.cardMin - |U(Xj.ub)| <= Xi.card
172
+
173
+ {
174
+ GECODE_AUTOARRAY(GLBndSet, rightUnion, xsize);
175
+ rightUnion[xsize-1].init(home);
176
+ for (int i=xsize-1;i--;){
177
+ BndSetRanges prev(rightUnion[i+1]);
178
+ LubRanges<View0> prevX(x[i+1]);
179
+ Iter::Ranges::Union< BndSetRanges,LubRanges<View0> >
180
+ iter(prev,prevX);
181
+ rightUnion[i].init(home);
182
+ rightUnion[i].includeI(home, iter);
183
+ }
184
+
185
+ //union of determied vars missing from x sneaked in here:
186
+ GLBndSet leftAcc;
187
+ leftAcc.update(home,unionOfDets);
188
+ for (int i=0; i<xsize; i++) {
189
+ BndSetRanges left(leftAcc);
190
+ BndSetRanges right(rightUnion[i]);
191
+ Iter::Ranges::Union<BndSetRanges,
192
+ BndSetRanges> iter(left, right);
193
+ unsigned int unionSize = Iter::Ranges::size(iter);
194
+ if (y.cardMin() > unionSize) {
195
+ GECODE_ME_CHECK_MODIFIED(modified,
196
+ x[i].cardMin(home, y.cardMin() - unionSize) );
197
+ }
198
+ LubRanges<View0> xiub(x[i]);
199
+ leftAcc.includeI(home, xiub);
200
+ }
201
+
202
+ for (int i=xsize; i--;)
203
+ rightUnion[i].dispose(home);
204
+ leftAcc.dispose(home);
205
+ }
206
+
207
+ //no need for this: |y.lb - U(Xj.cardMax)| <= S.card
208
+
209
+ return ES_NOFIX;
210
+
211
+ }
212
+
213
+ /*
214
+ * Xi UB is subset of YUB
215
+ * Subscribes to Y UB
216
+ */
217
+ template <class View0, class View1>
218
+ ExecStatus
219
+ unionNXiUB(Space* home,
220
+ bool& modified, ViewArray<View0>& x, View1& y,
221
+ GLBndSet & unionOfDets) {
222
+ int xsize = x.size();
223
+ for (int i=xsize; i--; ) {
224
+ LubRanges<View1> yub(y);
225
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].intersectI(home, yub));
226
+ }
227
+ return ES_FIX;
228
+ }
229
+
230
+ // cardinality rules for PartitionN constraint
231
+ template <class View0, class View1>
232
+ ExecStatus
233
+ partitionNCard(Space* home,
234
+ bool& modified, ViewArray<View0>& x, View1& y,
235
+ GLBndSet& unionOfDets) {
236
+ unsigned int cardMinSum=unionOfDets.size();
237
+ unsigned int cardMaxSum=unionOfDets.size();
238
+ int xsize = x.size();
239
+ for (int i=xsize; i--; ) {
240
+ cardMinSum+=x[i].cardMin();
241
+ if (cardMinSum < x[i].cardMin()) {
242
+ //sum of mins overflows: fail the space.
243
+ GECODE_ME_CHECK(ME_SET_FAILED);
244
+ }
245
+ }
246
+ GECODE_ME_CHECK_MODIFIED(modified, y.cardMin(home,cardMinSum));
247
+ for (int i=xsize; i--; ) {
248
+ cardMaxSum+=x[i].cardMax();
249
+ if (cardMaxSum < x[i].cardMax()) {
250
+ //sum of maxes overflows: no useful information to tell.
251
+ goto overflow;
252
+ }
253
+ }
254
+ GECODE_ME_CHECK_MODIFIED(modified, y.cardMax(home,cardMaxSum));
255
+ overflow:
256
+
257
+ //Cardinality of each x[i] limited by cardinality of y minus all x[j]s:
258
+
259
+ {
260
+ GECODE_AUTOARRAY(unsigned int, rightMinSum, xsize);
261
+ GECODE_AUTOARRAY(unsigned int, rightMaxSum, xsize);
262
+ rightMinSum[xsize-1]=0;
263
+ rightMaxSum[xsize-1]=0;
264
+
265
+ for (int i=x.size()-1;i--;) {
266
+ rightMaxSum[i] = rightMaxSum[i+1] + x[i+1].cardMax();
267
+ if (rightMaxSum[i] < rightMaxSum[i+1]) {
268
+ //overflow, fill the rest of the array.
269
+ for (int j=i; j>0;j--) {
270
+ rightMaxSum[j]=Limits::Set::card_max;
271
+ }
272
+ break;
273
+ }
274
+
275
+ rightMinSum[i] = rightMinSum[i+1] + x[i+1].cardMin();
276
+ if (rightMinSum[i] < rightMinSum[i+1]) {
277
+ //overflow, fail the space
278
+ GECODE_ME_CHECK(ME_SET_FAILED);
279
+ }
280
+
281
+
282
+ }
283
+ unsigned int leftMinAcc=unionOfDets.size();
284
+ unsigned int leftMaxAcc=unionOfDets.size();
285
+
286
+ for (int i=0; i<xsize;i++) {
287
+ unsigned int maxSum = leftMaxAcc+rightMaxSum[i];
288
+ unsigned int minSum = leftMinAcc+rightMinSum[i];
289
+ //If maxSum did not overflow and is less than y.cardMin:
290
+ if (maxSum >= leftMaxAcc && maxSum < y.cardMin()) {
291
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMin(home,y.cardMin()-maxSum));
292
+ }
293
+
294
+ //Overflow, fail.
295
+ if (minSum < leftMinAcc || y.cardMax() < minSum) {
296
+ GECODE_ME_CHECK(ME_SET_FAILED);
297
+ }
298
+ else {
299
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMax(home,y.cardMax()-minSum));
300
+ }
301
+
302
+ leftMaxAcc += x[i].cardMax();
303
+ if (leftMaxAcc < x[i].cardMax()) {leftMaxAcc = Limits::Set::card_max;}
304
+ leftMinAcc += x[i].cardMin();
305
+ if (leftMinAcc < x[i].cardMin()) {GECODE_ME_CHECK(ME_SET_FAILED);}
306
+ }
307
+ }
308
+
309
+ return ES_NOFIX;
310
+ }
311
+
312
+ // Xi LB includes YLB minus union Xj UB
313
+ // Xi UB is subset of YUB minus union of Xj LBs
314
+ template <class View0, class View1>
315
+ ExecStatus
316
+ partitionNXi(Space* home,
317
+ bool& modified, ViewArray<View0>& x, View1& y) {
318
+ int xsize = x.size();
319
+ GECODE_AUTOARRAY(GLBndSet, afterUB, xsize);
320
+ GECODE_AUTOARRAY(GLBndSet, afterLB, xsize);
321
+
322
+ {
323
+ GLBndSet sofarAfterUB;
324
+ GLBndSet sofarAfterLB;
325
+ for (int i=xsize; i--;) {
326
+ afterUB[i].init(home);
327
+ afterLB[i].init(home);
328
+ afterUB[i].update(home,sofarAfterUB);
329
+ afterLB[i].update(home,sofarAfterLB);
330
+ LubRanges<View0> xiub(x[i]);
331
+ GlbRanges<View0> xilb(x[i]);
332
+ sofarAfterUB.includeI(home,xiub);
333
+ sofarAfterLB.includeI(home,xilb);
334
+ }
335
+ sofarAfterUB.dispose(home);
336
+ sofarAfterLB.dispose(home);
337
+ }
338
+
339
+ {
340
+ GLBndSet sofarBeforeUB;
341
+ GLBndSet sofarBeforeLB;
342
+ for (int i=0; i<xsize; i++) {
343
+ LubRanges<View1> yub(y);
344
+ BndSetRanges slb(sofarBeforeLB);
345
+ BndSetRanges afterlb(afterLB[i]);
346
+ Iter::Ranges::Union<BndSetRanges,
347
+ BndSetRanges> xjlb(slb, afterlb);
348
+ Iter::Ranges::Diff<LubRanges<View1>,
349
+ Iter::Ranges::Union<BndSetRanges,
350
+ BndSetRanges> > diff1(yub, xjlb);
351
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].intersectI(home,diff1));
352
+
353
+ GlbRanges<View1> ylb(y);
354
+ BndSetRanges sub(sofarBeforeUB);
355
+ BndSetRanges afterub(afterUB[i]);
356
+ Iter::Ranges::Union<BndSetRanges,
357
+ BndSetRanges> xjub(sub, afterub);
358
+ Iter::Ranges::Diff<GlbRanges<View1>,
359
+ Iter::Ranges::Union<BndSetRanges,
360
+ BndSetRanges> > diff2(ylb, xjub);
361
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].includeI(home,diff2));
362
+
363
+ LubRanges<View0> xiub(x[i]);
364
+ GlbRanges<View0> xilb(x[i]);
365
+ sofarBeforeUB.includeI(home,xiub);
366
+ sofarBeforeLB.includeI(home,xilb);
367
+ }
368
+ sofarBeforeLB.dispose(home);
369
+ sofarBeforeUB.dispose(home);
370
+ }
371
+
372
+ for (int i=xsize;i--;) {
373
+ afterUB[i].dispose(home);
374
+ afterLB[i].dispose(home);
375
+ }
376
+
377
+ return ES_NOFIX;
378
+ }
379
+
380
+ // Xi UB is subset of YUB minus union of Xj LBs
381
+ template <class View0, class View1>
382
+ ExecStatus
383
+ partitionNXiUB(Space* home,
384
+ bool& modified, ViewArray<View0>& x, View1& y,
385
+ GLBndSet& unionOfDets) {
386
+ int xsize = x.size();
387
+ GECODE_AUTOARRAY(GLBndSet, afterLB, xsize);
388
+
389
+ {
390
+ GLBndSet sofarAfterLB;
391
+ for (int i=xsize; i--;) {
392
+ afterLB[i].init(home);
393
+ afterLB[i].update(home,sofarAfterLB);
394
+ GlbRanges<View0> xilb(x[i]);
395
+ sofarAfterLB.includeI(home,xilb);
396
+ }
397
+ sofarAfterLB.dispose(home);
398
+ }
399
+
400
+ {
401
+ GLBndSet sofarBeforeLB;
402
+ sofarBeforeLB.update(home,unionOfDets);
403
+ for (int i=0; i<xsize; i++) {
404
+ LubRanges<View1> yub(y);
405
+ BndSetRanges slb(sofarBeforeLB);
406
+ BndSetRanges afterlb(afterLB[i]);
407
+ Iter::Ranges::Union<BndSetRanges,
408
+ BndSetRanges> xjlb(slb, afterlb);
409
+ Iter::Ranges::Diff<LubRanges<View1>,
410
+ Iter::Ranges::Union<BndSetRanges,
411
+ BndSetRanges> > diff1(yub, xjlb);
412
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].intersectI(home,diff1));
413
+
414
+ GlbRanges<View0> xilb(x[i]);
415
+ sofarBeforeLB.includeI(home,xilb);
416
+ }
417
+ sofarBeforeLB.dispose(home);
418
+ }
419
+ for (int i=xsize; i--;)
420
+ afterLB[i].dispose(home);
421
+ return ES_NOFIX;
422
+ }
423
+
424
+ // Xi LB includes YLB minus union Xj UB
425
+ template <class View0, class View1>
426
+ ExecStatus
427
+ partitionNXiLB(Space* home,
428
+ bool& modified, ViewArray<View0>& x, View1& y,
429
+ GLBndSet& unionOfDets) {
430
+ int xsize = x.size();
431
+ GECODE_AUTOARRAY(GLBndSet, afterUB, xsize);
432
+
433
+ {
434
+ GLBndSet sofarAfterUB;
435
+ for (int i=xsize; i--;) {
436
+ afterUB[i].init(home);
437
+ afterUB[i].update(home,sofarAfterUB);
438
+ LubRanges<View0> xiub(x[i]);
439
+ sofarAfterUB.includeI(home,xiub);
440
+ }
441
+ sofarAfterUB.dispose(home);
442
+ }
443
+
444
+ {
445
+ //The union of previously determined x[j]-s is added to the mix here:
446
+ GLBndSet sofarBeforeUB;
447
+ sofarBeforeUB.update(home,unionOfDets);
448
+ for (int i=0; i<xsize; i++) {
449
+ GlbRanges<View1> ylb(y);
450
+ BndSetRanges sub(sofarBeforeUB);
451
+ BndSetRanges afterub(afterUB[i]);
452
+ Iter::Ranges::Union<BndSetRanges,
453
+ BndSetRanges> xjub(sub, afterub);
454
+ Iter::Ranges::Diff<GlbRanges<View1>,
455
+ Iter::Ranges::Union<BndSetRanges,
456
+ BndSetRanges> > diff2(ylb, xjub);
457
+ GECODE_ME_CHECK_MODIFIED(modified, x[i].includeI(home,diff2));
458
+
459
+ LubRanges<View0> xiub(x[i]);
460
+ sofarBeforeUB.includeI(home,xiub);
461
+ }
462
+ sofarBeforeUB.dispose(home);
463
+ }
464
+ for (int i=xsize;i--;)
465
+ afterUB[i].dispose(home);
466
+ return ES_NOFIX;
467
+ }
468
+
469
+ // Y LB contains union of X LBs
470
+ template <class View0, class View1>
471
+ ExecStatus
472
+ partitionNYLB(Space* home,
473
+ bool& modified, ViewArray<View0>& x, View1& y,
474
+ GLBndSet& unionOfDets) {
475
+ assert(unionOfDets.isConsistent());
476
+ int xsize = x.size();
477
+ GECODE_AUTOARRAY(GlbRanges<View0>,xLBs,xsize);
478
+ int nonEmptyCounter=0;
479
+ for (int i = xsize; i--; ) {
480
+ GlbRanges<View0> r(x[i]);
481
+ if (r()) {
482
+ xLBs[nonEmptyCounter] = r;
483
+ nonEmptyCounter++;
484
+ }
485
+ }
486
+ if (nonEmptyCounter !=0) {
487
+ Iter::Ranges::NaryUnion<GlbRanges<View0> >
488
+ xLBUnion(xLBs,nonEmptyCounter);
489
+ BndSetRanges dets(unionOfDets);
490
+ Iter::Ranges::Union<Iter::Ranges::NaryUnion<GlbRanges<View0> >,
491
+ BndSetRanges>
492
+ allUnion(xLBUnion,dets);
493
+ GECODE_ME_CHECK_MODIFIED(modified, y.includeI(home,allUnion));
494
+ }
495
+ return ES_FIX;
496
+ }
497
+
498
+ // Y UB is subset of union of X UBs
499
+ template <class View0, class View1>
500
+ ExecStatus
501
+ partitionNYUB(Space* home,
502
+ bool& modified, ViewArray<View0>& x, View1& y,
503
+ GLBndSet& unionOfDets) {
504
+ int xsize = x.size();
505
+ GECODE_AUTOARRAY(LubRanges<View0>,xUBs,xsize);
506
+ int nonEmptyCounter=0;
507
+ for (int i = xsize; i--; ) {
508
+ LubRanges<View0> r(x[i]);
509
+ if (r()) {
510
+ xUBs[nonEmptyCounter] = r;
511
+ nonEmptyCounter++;
512
+ }
513
+ }
514
+ if (nonEmptyCounter !=0) {
515
+ Iter::Ranges::NaryUnion<LubRanges<View0> >
516
+ xUBUnion(xUBs,nonEmptyCounter);
517
+ BndSetRanges dets(unionOfDets);
518
+ Iter::Ranges::Union<Iter::Ranges::NaryUnion<LubRanges<View0> >,
519
+ BndSetRanges>
520
+ fullUnion(xUBUnion, dets);
521
+ GECODE_ME_CHECK_MODIFIED(modified, y.intersectI(home,fullUnion));
522
+ }
523
+ return ES_FIX;
524
+ }
525
+
526
+ }}}
527
+
528
+ // STATISTICS: set-prop