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,396 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2004
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3512 $
11
+ *
12
+ * This file is part of Gecode, the generic constraint
13
+ * development environment:
14
+ * http://www.gecode.org
15
+ *
16
+ * See the file "LICENSE" for information on usage and
17
+ * redistribution of this file, and for a
18
+ * DISCLAIMER OF ALL WARRANTIES.
19
+ *
20
+ */
21
+
22
+ #include "gecode/iter.hh"
23
+
24
+ namespace Gecode { namespace Int { namespace Element {
25
+
26
+ /**
27
+ * \brief Links for index-value map
28
+ *
29
+ * Data structure linking pairs of index and value (index,value)
30
+ * where pairs are linked in order of both index and
31
+ * value (to allow for easy removal while keeping both index and
32
+ * value sorted).
33
+ *
34
+ */
35
+ class IdxValLink {
36
+ public:
37
+ IdxValLink* idx_next;
38
+ IdxValLink* val_next;
39
+ int idx, val;
40
+
41
+ void mark(void);
42
+ bool marked(void) const;
43
+ };
44
+
45
+ forceinline void
46
+ IdxValLink::mark(void) {
47
+ idx = -1;
48
+ }
49
+ forceinline bool
50
+ IdxValLink::marked(void) const {
51
+ return idx<0;
52
+ }
53
+
54
+
55
+
56
+ /**
57
+ * \brief Value iterator for indices in index-value map
58
+ *
59
+ * The iterator also removes marked index-value pairs.
60
+ *
61
+ */
62
+ class IterIdx {
63
+ private:
64
+ IdxValLink* l;
65
+ public:
66
+ IterIdx(void);
67
+ IterIdx(IdxValLink&);
68
+ void init(IdxValLink&);
69
+ bool operator()(void) const;
70
+ void operator++(void);
71
+ int val(void) const;
72
+ };
73
+
74
+ forceinline
75
+ IterIdx::IterIdx(void) {}
76
+ forceinline
77
+ IterIdx::IterIdx(IdxValLink& ivl) {
78
+ IdxValLink* p=&ivl;
79
+ l = p->idx_next;
80
+ while ((l != NULL) && l->marked())
81
+ l=l->idx_next;
82
+ p->idx_next=l;
83
+ }
84
+ forceinline void
85
+ IterIdx::init(IdxValLink& ivl) {
86
+ IdxValLink* p=&ivl;
87
+ l = p->idx_next;
88
+ while ((l != NULL) && l->marked())
89
+ l=l->idx_next;
90
+ p->idx_next=l;
91
+ }
92
+ forceinline bool
93
+ IterIdx::operator()(void) const {
94
+ return l != NULL;
95
+ }
96
+ forceinline void
97
+ IterIdx::operator++(void) {
98
+ IdxValLink* p=l;
99
+ l = p->idx_next;
100
+ while ((l != NULL) && l->marked())
101
+ l=l->idx_next;
102
+ p->idx_next=l;
103
+ }
104
+ forceinline int
105
+ IterIdx::val(void) const {
106
+ assert(!l->marked());
107
+ return l->idx;
108
+ }
109
+
110
+
111
+
112
+ /**
113
+ * \brief Value iterator for values in index-value map
114
+ *
115
+ * Note that the iterated value sequence is not strictly
116
+ * increasing (might contain duplicates).
117
+ */
118
+ class IterVal {
119
+ private:
120
+ const IdxValLink* l;
121
+ public:
122
+ IterVal(void);
123
+ IterVal(const IdxValLink&);
124
+ void init(const IdxValLink&);
125
+ bool operator()(void) const;
126
+ void operator++(void);
127
+ int val(void) const;
128
+ };
129
+
130
+ forceinline
131
+ IterVal::IterVal(void) {}
132
+ forceinline
133
+ IterVal::IterVal(const IdxValLink& ivl)
134
+ : l(ivl.val_next) {}
135
+ forceinline void
136
+ IterVal::init(const IdxValLink& ivl) {
137
+ l = ivl.val_next;
138
+ }
139
+ forceinline bool
140
+ IterVal::operator()(void) const {
141
+ return l != NULL;
142
+ }
143
+ forceinline void
144
+ IterVal::operator++(void) {
145
+ l=l->val_next;
146
+ }
147
+ forceinline int
148
+ IterVal::val(void) const {
149
+ assert(!l->marked());
150
+ return l->val;
151
+ }
152
+
153
+
154
+
155
+
156
+ /**
157
+ * \brief Class for index-value map
158
+ *
159
+ */
160
+ class IdxValMap {
161
+ private:
162
+ /// Sorting pointers to (index,value) pairs in value order
163
+ class ByVal {
164
+ public:
165
+ bool operator()(IdxValLink*&, IdxValLink*&);
166
+ };
167
+ size_t _size;
168
+ IdxValLink iv[1];
169
+ public:
170
+ /// Allocating and initializing the data structure
171
+ static IdxValMap* allocate(int);
172
+ template <class ViewA> void init(int*,ViewA);
173
+
174
+ /// Pruning from variables on data structure
175
+ template <class ViewA> void prune_idx(ViewA);
176
+ template <class ViewB> void prune_val(ViewB);
177
+
178
+ /// Telling data structure to variables: returns true if at fixpoint
179
+ template <class ViewA, class ViewB>
180
+ ExecStatus tell(Space*,ViewA,ViewB);
181
+
182
+ size_t size(void) const;
183
+ static void operator delete(void* p,size_t);
184
+ private:
185
+ static void* operator new(size_t);
186
+ };
187
+
188
+ forceinline bool
189
+ IdxValMap::ByVal::operator()(IdxValLink*& x, IdxValLink*& y) {
190
+ return x->val < y->val;
191
+ }
192
+
193
+ forceinline IdxValMap*
194
+ IdxValMap::allocate(int n) {
195
+ size_t s = sizeof(IdxValMap)+n*sizeof(IdxValLink);
196
+ IdxValMap* ivm = reinterpret_cast<IdxValMap*>(Memory::malloc(s));
197
+ ivm->_size = s;
198
+ return ivm;
199
+ }
200
+
201
+ forceinline size_t
202
+ IdxValMap::size(void) const {
203
+ return _size;
204
+ }
205
+
206
+ template <class ViewA>
207
+ inline void
208
+ IdxValMap::init(int* a, ViewA ix) {
209
+ // The first element in iv[0] is used as sentinel
210
+ // Enter information sorted by idx
211
+ IdxValLink* by_idx = &iv[1];
212
+ {
213
+ int i = 0;
214
+ ViewValues<ViewA> v(ix);
215
+ while (v()) {
216
+ by_idx[i].idx = v.val();
217
+ by_idx[i].val = a[v.val()];
218
+ ++i; ++v;
219
+ }
220
+ }
221
+ int size = ix.size();
222
+ // Create val links sorted by val
223
+ GECODE_AUTOARRAY(IdxValLink*,by_val,size);
224
+ for (int i = size; i--; )
225
+ by_val[i] = &iv[i+1];
226
+ ByVal lt;
227
+ Support::quicksort<IdxValLink*>(by_val,size,lt);
228
+ // Create idx and val links
229
+ for (int i = size-1; i--; ) {
230
+ by_idx[i].idx_next = by_idx+i+1;
231
+ by_val[i]->val_next = by_val[i+1];
232
+ }
233
+ by_idx[size-1].idx_next = NULL;
234
+ by_val[size-1]->val_next = NULL;
235
+ // Set up sentinel element: iv[0]
236
+ iv[0].idx_next = &by_idx[0];
237
+ iv[0].val_next = by_val[0];
238
+ }
239
+
240
+ template <class ViewA>
241
+ forceinline void
242
+ IdxValMap::prune_idx(ViewA x0) {
243
+ IdxValLink* p = &iv[0];
244
+ IdxValLink* l = p->idx_next;
245
+ ViewRanges<ViewA> i(x0);
246
+ while (i() && (l != NULL)) {
247
+ assert(!l->marked());
248
+ if (l->idx < i.min()) {
249
+ l->mark(); l=l->idx_next; p->idx_next=l;
250
+ } else if (l->idx > i.max()) {
251
+ ++i;
252
+ } else {
253
+ p=l; l=l->idx_next;
254
+ }
255
+ }
256
+ p->idx_next = NULL;
257
+ while (l != NULL) { l->mark(); l=l->idx_next; }
258
+ }
259
+
260
+ template <class ViewB>
261
+ forceinline void
262
+ IdxValMap::prune_val(ViewB x1) {
263
+ IdxValLink* p = &iv[0];
264
+ IdxValLink* l = p->val_next;
265
+ ViewRanges<ViewB> v(x1);
266
+ while (v() && (l != NULL)) {
267
+ if (l->marked()) {
268
+ l=l->val_next; p->val_next=l;
269
+ } else if (l->val < v.min()) {
270
+ l->mark(); l=l->val_next; p->val_next=l;
271
+ } else if (l->val > v.max()) {
272
+ ++v;
273
+ } else {
274
+ p=l; l=l->val_next;
275
+ }
276
+ }
277
+ p->val_next = NULL;
278
+ while (l != NULL) { l->mark(); l=l->val_next; }
279
+ }
280
+
281
+ template <class ViewA, class ViewB>
282
+ forceinline ExecStatus
283
+ IdxValMap::tell(Space* home, ViewA x0, ViewB x1) {
284
+ IterIdx i(iv[0]);
285
+ if (!i())
286
+ return ES_FAILED;
287
+ Iter::Values::ToRanges<IterIdx> ri(i);
288
+ x0.narrow(home,ri);
289
+ IterVal v(iv[0]); Iter::Values::ToRanges<IterVal> rv(v);
290
+ ExecStatus es = x1.modified() ? ES_NOFIX : ES_FIX;
291
+ x1.narrow(home,rv);
292
+ return es;
293
+ }
294
+
295
+ forceinline void
296
+ IdxValMap::operator delete(void* p,size_t) {
297
+ Memory::free(p);
298
+ }
299
+
300
+
301
+
302
+
303
+ /*
304
+ * Element propagator proper
305
+ *
306
+ */
307
+
308
+
309
+ template <class ViewA, class ViewB>
310
+ forceinline
311
+ Int<ViewA,ViewB>::Int(Space* home, IntSharedArray& c0, ViewA y0, ViewB y1)
312
+ : Propagator(home,true), x0(y0), x1(y1), c(c0), ivm(NULL) {
313
+ x0.subscribe(home,this,PC_INT_DOM);
314
+ x1.subscribe(home,this,PC_INT_DOM);
315
+ }
316
+
317
+ template <class ViewA, class ViewB>
318
+ ExecStatus
319
+ Int<ViewA,ViewB>::post(Space* home, IntSharedArray& c, ViewA x0, ViewB x1) {
320
+ GECODE_ME_CHECK(x0.gq(home,0));
321
+ GECODE_ME_CHECK(x0.le(home,c.size()));
322
+ (void) new (home) Int<ViewA,ViewB>(home,c,x0,x1);
323
+ return ES_OK;
324
+ }
325
+
326
+
327
+ template <class ViewA, class ViewB>
328
+ size_t
329
+ Int<ViewA,ViewB>::dispose(Space* home) {
330
+ if (!home->failed()) {
331
+ x0.cancel(home,this,PC_INT_DOM);
332
+ x1.cancel(home,this,PC_INT_DOM);
333
+ }
334
+ c.~IntSharedArray();
335
+ delete ivm;
336
+ (void) Propagator::dispose(home);
337
+ return sizeof(*this);
338
+ }
339
+
340
+ template <class ViewA, class ViewB>
341
+ void
342
+ Int<ViewA,ViewB>::flush(void) {
343
+ delete ivm; ivm = NULL;
344
+ }
345
+
346
+ template <class ViewA, class ViewB>
347
+ size_t
348
+ Int<ViewA,ViewB>::size(void) const {
349
+ return (ivm != NULL) ? ivm->size() : 0;
350
+ }
351
+
352
+ template <class ViewA, class ViewB>
353
+ forceinline
354
+ Int<ViewA,ViewB>::Int(Space* home, bool share, Int& p)
355
+ : Propagator(home,share,p), ivm(NULL) {
356
+ c.update(share,p.c);
357
+ x0.update(home,share,p.x0);
358
+ x1.update(home,share,p.x1);
359
+ }
360
+
361
+ template <class ViewA, class ViewB>
362
+ Actor*
363
+ Int<ViewA,ViewB>::copy(Space* home, bool share) {
364
+ return new (home) Int<ViewA,ViewB>(home,share,*this);
365
+ }
366
+
367
+
368
+ template <class ViewA, class ViewB>
369
+ PropCost
370
+ Int<ViewA,ViewB>::cost(void) const {
371
+ return PC_BINARY_HI;
372
+ }
373
+
374
+ template <class ViewA, class ViewB>
375
+ ExecStatus
376
+ Int<ViewA,ViewB>::propagate(Space* home) {
377
+ if (ivm == NULL) {
378
+ ivm = IdxValMap::allocate(x0.size());
379
+ ivm->init(&c[0],x0);
380
+ } else {
381
+ ivm->prune_idx(x0);
382
+ }
383
+ ivm->prune_val(x1);
384
+
385
+ ExecStatus es = ivm->tell(home,x0,x1);
386
+ if (es == ES_FAILED)
387
+ return ES_FAILED;
388
+
389
+ return (x0.assigned() || x1.assigned()) ? ES_SUBSUMED : es;
390
+ }
391
+
392
+ }}}
393
+
394
+
395
+ // STATISTICS: int-prop
396
+
@@ -0,0 +1,443 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Contributing authors:
6
+ * Guido Tack <tack@gecode.org>
7
+ *
8
+ * Copyright:
9
+ * Christian Schulte, 2004
10
+ * Guido Tack, 2004
11
+ *
12
+ * Last modified:
13
+ * $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
14
+ * $Revision: 3512 $
15
+ *
16
+ * This file is part of Gecode, the generic constraint
17
+ * development environment:
18
+ * http://www.gecode.org
19
+ *
20
+ * See the file "LICENSE" for information on usage and
21
+ * redistribution of this file, and for a
22
+ * DISCLAIMER OF ALL WARRANTIES.
23
+ *
24
+ */
25
+
26
+ #include <algorithm>
27
+
28
+ #include "gecode/iter.hh"
29
+
30
+ namespace Gecode { namespace Int { namespace Element {
31
+
32
+ /**
33
+ * \brief Class for pair of index and view
34
+ *
35
+ */
36
+ template <class View>
37
+ class IdxView {
38
+ public:
39
+ int idx; View view;
40
+
41
+ static IdxView* allocate(Space*, int);
42
+ static IdxView* init(Space*, const IntVarArgs&);
43
+ };
44
+
45
+
46
+ template <class View>
47
+ forceinline IdxView<View>*
48
+ IdxView<View>::allocate(Space* home, int n) {
49
+ return reinterpret_cast<IdxView<View>*>
50
+ (home->alloc(sizeof(IdxView<View>)*n));
51
+ }
52
+
53
+ template <class View>
54
+ forceinline IdxView<View>*
55
+ IdxView<View>::init(Space* home, const IntVarArgs& x) {
56
+ IdxView<View>* iv = allocate(home,x.size());
57
+ for (int i = x.size(); i--; ) {
58
+ iv[i].idx = i; iv[i].view = x[i];
59
+ }
60
+ return iv;
61
+ }
62
+
63
+
64
+
65
+ /**
66
+ * \brief Class for bounds-equality test
67
+ *
68
+ */
69
+ template <class View>
70
+ class RelTestBnd {
71
+ public:
72
+ RelTest operator()(View,View);
73
+ };
74
+
75
+ /**
76
+ * \brief Class for domain-equality test
77
+ *
78
+ */
79
+ template <class View>
80
+ class RelTestDom {
81
+ public:
82
+ RelTest operator()(View,View);
83
+ };
84
+
85
+
86
+ template <class View>
87
+ forceinline RelTest
88
+ RelTestBnd<View>::operator()(View x, View y) {
89
+ return rtest_eq_bnd(x,y);
90
+ }
91
+
92
+ template <class View>
93
+ forceinline RelTest
94
+ RelTestDom<View>::operator()(View x, View y) {
95
+ return rtest_eq_dom(x,y);
96
+ }
97
+
98
+
99
+
100
+
101
+ /*
102
+ * Base class
103
+ *
104
+ */
105
+
106
+ template <class ViewA, class ViewB, PropCond pcb>
107
+ View<ViewA,ViewB,pcb>::View(Space* home, IdxView<ViewB>* iv0, int n0,
108
+ ViewA y0, ViewB y1)
109
+ : Propagator(home), x0(y0), x1(y1), n(n0), iv(iv0) {
110
+ x0.subscribe(home,this,PC_INT_DOM);
111
+ x1.subscribe(home,this,pcb);
112
+ for (int i=n; i--; )
113
+ iv[i].view.subscribe(home,this,pcb);
114
+ }
115
+
116
+ template <class ViewA, class ViewB, PropCond pcb>
117
+ forceinline
118
+ View<ViewA,ViewB,pcb>::View(Space* home, bool share, View& p)
119
+ : Propagator(home,share,p), n(p.n) {
120
+ x0.update(home,share,p.x0);
121
+ x1.update(home,share,p.x1);
122
+ iv = IdxView<ViewB>::allocate(home,n);
123
+ for (int i=n; i--; ) {
124
+ iv[i].idx = p.iv[i].idx;
125
+ iv[i].view.update(home,share,p.iv[i].view);
126
+ }
127
+ }
128
+
129
+ template <class ViewA, class ViewB, PropCond pcb>
130
+ PropCost
131
+ View<ViewA,ViewB,pcb>::cost(void) const {
132
+ // This is required for subscribing to variables in the
133
+ // above constructor, but this is then the only time this
134
+ // virtual function is ever used!
135
+ return PC_LINEAR_LO;
136
+ }
137
+
138
+ template <class ViewA, class ViewB, PropCond pcb>
139
+ size_t
140
+ View<ViewA,ViewB,pcb>::dispose(Space* home) {
141
+ assert(!home->failed());
142
+ x0.cancel(home,this,PC_INT_DOM);
143
+ x1.cancel(home,this,pcb);
144
+ for (int i=n; i--;)
145
+ iv[i].view.cancel(home,this,pcb);
146
+ (void) Propagator::dispose(home);
147
+ return sizeof(*this);
148
+ }
149
+
150
+
151
+
152
+
153
+ /**
154
+ * \brief Value iterator for indices in index-view map
155
+ *
156
+ */
157
+ template <class View>
158
+ class IterIdxView {
159
+ private:
160
+ const IdxView<View> *cur, *end;
161
+ public:
162
+ IterIdxView(void);
163
+ IterIdxView(const IdxView<View>*, const IdxView<View>*);
164
+ void init(const IdxView<View>*, const IdxView<View>*);
165
+ bool operator()(void) const;
166
+ void operator++(void);
167
+ int val(void) const;
168
+ };
169
+
170
+ template <class View>
171
+ forceinline
172
+ IterIdxView<View>::IterIdxView(void) {}
173
+ template <class View>
174
+ forceinline
175
+ IterIdxView<View>::IterIdxView(const IdxView<View>* b,
176
+ const IdxView<View>* e)
177
+ : cur(b), end(e) {}
178
+ template <class View>
179
+ forceinline void
180
+ IterIdxView<View>::init(const IdxView<View>* b,
181
+ const IdxView<View>* e) {
182
+ cur=b; end=e;
183
+ }
184
+ template <class View>
185
+ forceinline bool
186
+ IterIdxView<View>::operator()(void) const {
187
+ return cur < end;
188
+ }
189
+ template <class View>
190
+ forceinline void
191
+ IterIdxView<View>::operator++(void) {
192
+ cur++;
193
+ }
194
+ template <class View>
195
+ forceinline int
196
+ IterIdxView<View>::val(void) const {
197
+ return cur->idx;
198
+ }
199
+
200
+
201
+
202
+
203
+ /*
204
+ * Generic scanning: does all but computing new domain for result
205
+ * (which is specific to bounds/domain version)
206
+ *
207
+ */
208
+
209
+ template <class ViewA, class ViewB, PropCond pcb, class RelTest>
210
+ void
211
+ scan(Space* home, IdxView<ViewB>* iv, int& n,
212
+ ViewA x0, ViewB x1, Propagator* p, RelTest rt) {
213
+ assert(n > 1);
214
+ /*
215
+ * Prunes pairs of index, variable
216
+ * - checks for idx value removed
217
+ * - checks for disequal variables
218
+ *
219
+ */
220
+ ViewValues<ViewA> vx0(x0);
221
+ int i = 0;
222
+ int j = 0;
223
+ while (vx0() && (i < n)) {
224
+ if (iv[i].idx < vx0.val()) {
225
+ iv[i].view.cancel(home,p,pcb);
226
+ ++i;
227
+ } else if (iv[i].idx > vx0.val()) {
228
+ ++vx0;
229
+ } else {
230
+ assert(iv[i].idx == vx0.val());
231
+ switch (rt(iv[i].view,x1)) {
232
+ case RT_FALSE:
233
+ iv[i].view.cancel(home,p,pcb);
234
+ break;
235
+ case RT_TRUE:
236
+ case RT_MAYBE:
237
+ iv[j++] = iv[i];
238
+ break;
239
+ default: GECODE_NEVER;
240
+ }
241
+ ++vx0; ++i;
242
+ }
243
+ }
244
+ while (i < n)
245
+ iv[i++].view.cancel(home,p,pcb);
246
+ bool adjust = (j<n);
247
+ n = j;
248
+
249
+ if (n == 0)
250
+ return;
251
+
252
+ if (n == 1) {
253
+ (void) x0.eq(home,iv[0].idx);
254
+ } else if (adjust) {
255
+ IterIdxView<ViewA> i(&iv[0],&iv[n]);
256
+ Iter::Values::ToRanges<IterIdxView<ViewA> > ri(i);
257
+ (void) x0.narrow(home,ri);
258
+ assert(x0.size() == static_cast<unsigned int>(n));
259
+ }
260
+ }
261
+
262
+
263
+
264
+
265
+ /*
266
+ * Bounds-consistent propagator
267
+ *
268
+ */
269
+
270
+ template <class ViewA, class ViewB>
271
+ forceinline
272
+ ViewBnd<ViewA,ViewB>::ViewBnd(Space* home,
273
+ IdxView<ViewB>* iv, int n, ViewA x0, ViewB x1)
274
+ : View<ViewA,ViewB,PC_INT_BND>(home,iv,n,x0,x1) {}
275
+
276
+ template <class ViewA, class ViewB>
277
+ ExecStatus
278
+ ViewBnd<ViewA,ViewB>::post(Space* home,
279
+ IdxView<ViewB>* iv, int n, ViewA x0, ViewB x1) {
280
+ GECODE_ME_CHECK(x0.gq(home,0));
281
+ GECODE_ME_CHECK(x0.le(home,n));
282
+ if (x0.assigned()) {
283
+ return Rel::EqBnd<ViewB,ViewB>::post(home,iv[x0.val()].view,x1);
284
+ } else {
285
+ assert(n>1);
286
+ (void) new (home) ViewBnd<ViewA,ViewB>(home,iv,n,x0,x1);
287
+ }
288
+ return ES_OK;
289
+ }
290
+
291
+
292
+ template <class ViewA, class ViewB>
293
+ forceinline
294
+ ViewBnd<ViewA,ViewB>::ViewBnd(Space* home, bool share, ViewBnd& p)
295
+ : View<ViewA,ViewB,PC_INT_BND>(home,share,p) {}
296
+
297
+ template <class ViewA, class ViewB>
298
+ Actor*
299
+ ViewBnd<ViewA,ViewB>::copy(Space* home, bool share) {
300
+ return new (home) ViewBnd<ViewA,ViewB>(home,share,*this);
301
+ }
302
+
303
+
304
+ template <class ViewA, class ViewB>
305
+ ExecStatus
306
+ ViewBnd<ViewA,ViewB>::propagate(Space* home) {
307
+ assert(n > 1);
308
+ RelTestBnd<ViewB> rt;
309
+ scan<ViewA,ViewB,PC_INT_BND,RelTestBnd<ViewB> >
310
+ (home,iv,n,x0,x1,this,rt);
311
+ if (n == 0)
312
+ return ES_FAILED;
313
+ if (n == 1) {
314
+ GECODE_ES_CHECK((Rel::EqBnd<ViewB,ViewB>::post(home,iv[0].view,x1)));
315
+ return ES_SUBSUMED;
316
+ }
317
+ assert(n > 1);
318
+ // Compute new result
319
+ int min = iv[n-1].view.min();
320
+ int max = iv[n-1].view.max();
321
+ for (int i=n-1; i--; ) {
322
+ min = std::min(iv[i].view.min(),min);
323
+ max = std::max(iv[i].view.max(),max);
324
+ }
325
+ ExecStatus es = shared(x0,x1) ? ES_NOFIX : ES_FIX;
326
+ {
327
+ ModEvent me = x1.lq(home,max);
328
+ if (me_failed(me))
329
+ return ES_FAILED;
330
+ if (me_modified(me) && (x1.max() != max))
331
+ es = ES_NOFIX;
332
+ }
333
+ {
334
+ ModEvent me = x1.gq(home,min);
335
+ if (me_failed(me))
336
+ return ES_FAILED;
337
+ if (me_modified(me) && (x1.min() != min))
338
+ es = ES_NOFIX;
339
+ }
340
+ return (x1.assigned() && (min == max)) ? ES_SUBSUMED : es;
341
+ }
342
+
343
+
344
+
345
+
346
+
347
+ /*
348
+ * Domain consistent propagator
349
+ *
350
+ */
351
+
352
+ template <class ViewA, class ViewB>
353
+ forceinline
354
+ ViewDom<ViewA,ViewB>::ViewDom(Space* home,
355
+ IdxView<ViewB>* iv, int n, ViewA x0, ViewB x1)
356
+ : View<ViewA,ViewB,PC_INT_DOM>(home,iv,n,x0,x1) {}
357
+
358
+ template <class ViewA, class ViewB>
359
+ ExecStatus
360
+ ViewDom<ViewA,ViewB>::post(Space* home,
361
+ IdxView<ViewB>* iv, int n, ViewA x0, ViewB x1){
362
+ GECODE_ME_CHECK(x0.gq(home,0));
363
+ GECODE_ME_CHECK(x0.le(home,n));
364
+ if (x0.assigned()) {
365
+ return Rel::EqDom<ViewB,ViewB>::post(home,iv[x0.val()].view,x1);
366
+ } else {
367
+ assert(n>1);
368
+ (void) new (home) ViewDom<ViewA,ViewB>(home,iv,n,x0,x1);
369
+ }
370
+ return ES_OK;
371
+ }
372
+
373
+
374
+ template <class ViewA, class ViewB>
375
+ forceinline
376
+ ViewDom<ViewA,ViewB>::ViewDom(Space* home, bool share, ViewDom& p)
377
+ : View<ViewA,ViewB,PC_INT_DOM>(home,share,p) {}
378
+
379
+ template <class ViewA, class ViewB>
380
+ Actor*
381
+ ViewDom<ViewA,ViewB>::copy(Space* home, bool share) {
382
+ return new (home) ViewDom<ViewA,ViewB>(home,share,*this);
383
+ }
384
+
385
+
386
+ template <class ViewA, class ViewB>
387
+ PropCost
388
+ ViewDom<ViewA,ViewB>::cost(void) const {
389
+ if (ViewA::pme(this) != ME_INT_DOM)
390
+ return PC_LINEAR_LO;
391
+ else
392
+ return PC_LINEAR_HI;
393
+ }
394
+
395
+ template <class ViewA, class ViewB>
396
+ ExecStatus
397
+ ViewDom<ViewA,ViewB>::propagate(Space* home) {
398
+ assert(n > 1);
399
+ if (ViewA::pme(this) != ME_INT_DOM) {
400
+ RelTestBnd<ViewB> rt;
401
+ scan<ViewA,ViewB,PC_INT_DOM,RelTestBnd<ViewB> >
402
+ (home,iv,n,x0,x1,this,rt);
403
+ if (n == 0)
404
+ return ES_FAILED;
405
+ if (n == 1) {
406
+ GECODE_ES_CHECK((Rel::EqDom<ViewB,ViewB>::post(home,iv[0].view,x1)));
407
+ return ES_SUBSUMED;
408
+ }
409
+ // Compute new result
410
+ int min = iv[n-1].view.min();
411
+ int max = iv[n-1].view.max();
412
+ for (int i=n-1; i--; ) {
413
+ min = std::min(iv[i].view.min(),min);
414
+ max = std::max(iv[i].view.max(),max);
415
+ }
416
+ GECODE_ME_CHECK(x1.lq(home,max));
417
+ GECODE_ME_CHECK(x1.gq(home,min));
418
+ return (x1.assigned() && (min == max)) ?
419
+ ES_SUBSUMED :
420
+ this->ES_NOFIX_PARTIAL(ViewA::pme(ME_INT_DOM));
421
+ }
422
+ RelTestDom<ViewB> rt;
423
+ scan<ViewA,ViewB,PC_INT_DOM,RelTestDom<ViewB> >
424
+ (home,iv,n,x0,x1,this,rt);
425
+ if (n == 0)
426
+ return ES_FAILED;
427
+ if (n == 1) {
428
+ GECODE_ES_CHECK((Rel::EqDom<ViewB,ViewB>::post(home,iv[0].view,x1)));
429
+ return ES_SUBSUMED;
430
+ }
431
+ assert(n > 1);
432
+ GECODE_AUTOARRAY(ViewRanges<ViewB>,i_view,n);
433
+ for (int i = n; i--; )
434
+ i_view[i].init(iv[i].view);
435
+ Iter::Ranges::NaryUnion<ViewRanges<ViewB> > i_val(i_view, n);
436
+ GECODE_ME_CHECK(x1.inter(home,i_val));
437
+ return x1.modified() ? ES_NOFIX : ES_FIX;
438
+ }
439
+
440
+ }}}
441
+
442
+ // STATISTICS: int-prop
443
+