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,727 @@
1
+ /*
2
+ * Main authors:
3
+ * Patrick Pekczynski <pekczynski@ps.uni-sb.de>
4
+ *
5
+ * Copyright:
6
+ * Patrick Pekczynski, 2004
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-04 16: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
+ namespace Gecode { namespace Int { namespace Sortedness {
23
+
24
+
25
+ /*
26
+ * Summary of the propagation algorithm as implemented in the
27
+ * propagate method below:
28
+ *
29
+ * STEP 1: Normalize the domains of the y variables
30
+ * STEP 2: Sort the domains of the x variables according to their lower
31
+ * and upper endpoints
32
+ * STEP 3: Compute the matchings phi and phiprime with
33
+ * Glover's matching algorithm
34
+ * STEP 4: Compute the strongly connected components in
35
+ * the oriented intersection graph
36
+ * STEP 5: Narrow the domains of the variables
37
+ *
38
+ */
39
+
40
+ /**
41
+ * \brief Perform bounds consistent sortedness propagation
42
+ *
43
+ * Implements the propagation algorithm for Sortedness::Sortedness
44
+ * and is provided as seperate function, because a second pass of
45
+ * the propagation algorithm is needed in order to achieve idempotency
46
+ * in case explicit permutation variables are provided.
47
+ *
48
+ * If \a Perm is true, permutation variables form the
49
+ * third argument which implies additional inferences,
50
+ * consistency check on the permutation variables and eventually a
51
+ * second pass of the propagation algorithm.
52
+ * Otherwise, the algorithm does not take care of the permutation
53
+ * variables resulting in a better performance.
54
+ */
55
+
56
+ template<class View, class Tuple, bool Perm>
57
+ ExecStatus
58
+ bounds_propagation(Space* home,
59
+ ViewArray<Tuple>& xz,
60
+ ViewArray<View>& y,
61
+ bool& repairpass,
62
+ bool& nofix,
63
+ bool& match_fixed){
64
+
65
+ int n = xz.size();
66
+
67
+ GECODE_AUTOARRAY(int, tau, n);
68
+ GECODE_AUTOARRAY(int, phi, n);
69
+ GECODE_AUTOARRAY(int, phiprime, n);
70
+ GECODE_AUTOARRAY(OfflineMinItem, sequence, n);
71
+ GECODE_AUTOARRAY(int, vertices, n);
72
+
73
+ if (match_fixed) {
74
+ // sorting is determined
75
+ // sigma and tau coincide
76
+ for (int i = xz.size(); i--; ) {
77
+ int pi = xz[i][1].val();
78
+ tau[pi] = i;
79
+ }
80
+ } else {
81
+ for (int i = n; i--; ) {
82
+ tau[i] = i;
83
+ }
84
+ }
85
+
86
+ bool yval = true;
87
+ bool ysorted = true;
88
+ for (int i = n; i--; ) {
89
+ yval &= y[i].assigned();
90
+ if (i) {
91
+ ysorted &= (y[i].min() <= y[i - 1].min() &&
92
+ y[i].max() <= y[i - 1].max());
93
+ }
94
+ }
95
+
96
+ if (Perm) {
97
+
98
+ // normalized and sorted
99
+ // collect all bounds
100
+
101
+ // minimum bound
102
+ int mib = y[0].min();
103
+ // maximum bound
104
+ int mab = y[n - 1].max();
105
+ // interval size
106
+ int ivs = (mab - mib + 1);
107
+ GECODE_AUTOARRAY(Rank, allbnd, ivs);
108
+ int iter = mib;
109
+ int idx = 0;
110
+ while(iter <= mab && idx < n) {
111
+ if (y[idx].min() > iter) {
112
+ // idx cannot be zero because consisteny in posting
113
+ assert(idx > 0);
114
+ allbnd[iter - mib].min = idx;
115
+ allbnd[iter - mib].max = idx - 1;
116
+ iter++;
117
+ } else {
118
+ if (y[idx].min() <= iter && iter <= y[idx].max() ) {
119
+ allbnd[iter - mib].min = idx;
120
+ allbnd[iter - mib].max = idx;
121
+ iter++;
122
+ } else {
123
+ idx++;
124
+ }
125
+ }
126
+ }
127
+
128
+ iter = mab;
129
+ idx = n -1;
130
+ while(iter >= mib && idx >= 0) {
131
+ if (y[idx].min() > iter) {
132
+ // idx cannot be zero because consisteny in posting
133
+ assert(idx > 0);
134
+ allbnd[iter - mib].max = idx - 1;
135
+ iter--;
136
+ } else {
137
+ if (y[idx].min() <= iter && iter <= y[idx].max() ) {
138
+ allbnd[iter - mib].max = idx;
139
+ iter--;
140
+ } else {
141
+ idx--;
142
+ }
143
+ }
144
+ }
145
+
146
+ for (int i = n; i--; ) {
147
+ // minimum reachable y-variable
148
+ int minr = allbnd[xz[i][0].min() - mib].min;
149
+ int maxr = allbnd[xz[i][0].max() - mib].max;
150
+
151
+ ModEvent me = xz[i][0].gq(home, y[minr].min());
152
+ if (me_failed(me)) {
153
+ return ES_FAILED;
154
+ }
155
+ nofix |= (me_modified(me) &&
156
+ xz[i][0].min() != y[minr].min());
157
+
158
+ me = xz[i][0].lq(home, y[maxr].max());
159
+ if (me_failed(me)) {
160
+ return ES_FAILED;
161
+ }
162
+ nofix |= (me_modified(me) &&
163
+ xz[i][0].min() != y[maxr].max());
164
+
165
+ me = xz[i][1].gq(home, minr);
166
+ if (me_failed(me)) {
167
+ return ES_FAILED;
168
+ }
169
+ nofix |= (me_modified(me) && xz[i][1].min() != minr);
170
+
171
+ me = xz[i][1].lq(home, maxr);
172
+ if (me_failed(me)) {
173
+ return ES_FAILED;
174
+ }
175
+ nofix |= (me_modified(me) && xz[i][1].max() != maxr);
176
+
177
+ }
178
+
179
+ // channel information from x to y through permutation variables in z
180
+ if (!channel<View, Tuple, Perm>(home, xz, y, nofix)) {
181
+ return ES_FAILED;
182
+ }
183
+ if (nofix) {
184
+ return ES_NOFIX;
185
+ }
186
+ }
187
+
188
+ /*
189
+ * STEP 1:
190
+ * normalization is implemented in "sortedness/order.icc"
191
+ * o setting the lower bounds of the y_i domains (\lb E_i)
192
+ * to max(\lb E_{i-1},\lb E_i)
193
+ * o setting the upper bounds of the y_i domains (\ub E_i)
194
+ * to min(\ub E_i,\ub E_{i+1})
195
+ */
196
+
197
+ if (!normalize<View, Tuple>(home, y, xz, nofix)) {
198
+ return ES_FAILED;
199
+ }
200
+
201
+ if (Perm) {
202
+ // check consistency of channeling after normalization
203
+ if (!channel<View, Tuple, Perm>(home, xz, y, nofix)) {
204
+ return ES_FAILED;
205
+ }
206
+ if (nofix) {
207
+ return ES_NOFIX;
208
+ }
209
+ }
210
+
211
+
212
+ // if bounds have changed we have to recreate sigma to restore
213
+ // optimized dropping of variables
214
+
215
+ sort_sigma<View, Tuple, Perm>(xz, match_fixed);
216
+
217
+ bool subsumed = true;
218
+ bool array_subs = false;
219
+ int dropfst = 0;
220
+ bool noperm_bc = false;
221
+
222
+ if (!(check_subsumption<View, Tuple, Perm>
223
+ (home, xz, y, subsumed, dropfst)) ||
224
+ !(array_assigned<View, Tuple, Perm>
225
+ (home, xz, y, array_subs, match_fixed, nofix, noperm_bc))) {
226
+ return ES_FAILED;
227
+ }
228
+
229
+ if (subsumed || array_subs) {
230
+ return ES_SUBSUMED;
231
+ }
232
+
233
+
234
+ /*
235
+ * STEP 2: creating tau
236
+ * Sort the domains of the x variables according
237
+ * to their lower bounds, where we use an
238
+ * intermediate array of integers for sorting
239
+ */
240
+ sort_tau<View, Tuple, Perm>(xz, tau);
241
+
242
+ /*
243
+ * STEP 3:
244
+ * Compute the matchings \phi and \phi' between
245
+ * the x and the y variables
246
+ * with Glover's matching algorithm.
247
+ * o phi is computed with the glover function
248
+ * o phiprime is computed with the revglover function
249
+ * glover and revglover are implemented in "sortedness/matching.icc"
250
+ */
251
+
252
+ if (!match_fixed) {
253
+ if (!glover<View, Tuple, Perm>
254
+ (home, xz, y, tau, phi, sequence, vertices)) {
255
+ return ES_FAILED;
256
+ }
257
+ } else {
258
+ for (int i = xz.size(); i--; ) {
259
+ phi[i] = xz[i][1].val();
260
+ phiprime[i] = phi[i];
261
+ }
262
+ }
263
+
264
+ if(!yval) {
265
+ // phiprime is not needed to narrow the domains of the x-variables
266
+ if (!match_fixed) {
267
+ if (!revglover<View, Tuple, Perm>
268
+ (home, xz, y, tau, phiprime, sequence, vertices)) {
269
+ return ES_FAILED;
270
+ }
271
+ }
272
+
273
+ if (!narrow_domy<View, Tuple, Perm>
274
+ (home, xz, y, phi, phiprime, nofix)) {
275
+ return ES_FAILED;
276
+ }
277
+
278
+ if (nofix && !match_fixed) {
279
+ // data structures (matching) destroyed by domains with holes
280
+
281
+ for (int i = y.size(); i--; ) {
282
+ phi[i] = 0;
283
+ phiprime[i] = 0;
284
+ }
285
+ if (!glover<View, Tuple, Perm>
286
+ (home, xz, y, tau, phi, sequence, vertices)) {
287
+ return ES_FAILED;
288
+ }
289
+
290
+ if (!revglover<View, Tuple, Perm>
291
+ (home, xz, y, tau, phiprime, sequence, vertices)) {
292
+ return ES_FAILED;
293
+ }
294
+
295
+ if (!narrow_domy<View, Tuple, Perm>
296
+ (home, xz, y, phi, phiprime, nofix)) {
297
+ return ES_FAILED;
298
+ }
299
+ }
300
+ }
301
+
302
+ /*
303
+ * STEP 4:
304
+ * Compute the strongly connected components in
305
+ * the oriented intersection graph
306
+ * the computation of the sccs is implemented in
307
+ * "sortedness/narrowing.icc" in the function narrow_domx
308
+ */
309
+
310
+ GECODE_AUTOARRAY(int, scclist, n);
311
+ GECODE_AUTOARRAY(SccComponent, sinfo , n);
312
+
313
+ for(int i = n; i--; ) {
314
+ sinfo[i].left = i;
315
+ sinfo[i].right = i;
316
+ sinfo[i].rightmost = i;
317
+ sinfo[i].leftmost = i;
318
+ }
319
+
320
+ computesccs<View>(home, xz, y, phi, sinfo, scclist);
321
+
322
+ /*
323
+ * STEP 5:
324
+ * Narrow the domains of the variables
325
+ * Also implemented in "sortedness/narrowing.icc"
326
+ * in the functions narrow_domx and narrow_domy
327
+ */
328
+
329
+ if (!narrow_domx<View, Tuple, Perm>
330
+ (home, xz, y, tau, phi, scclist, sinfo, nofix)) {
331
+ return ES_FAILED;
332
+ }
333
+
334
+ if (Perm) {
335
+ if (!noperm_bc) {
336
+ if (!perm_bc<View, Tuple, Perm>
337
+ (home, tau, sinfo, scclist, xz, repairpass, nofix)) {
338
+ return ES_FAILED;
339
+ }
340
+ }
341
+
342
+ // channeling also needed after normal propagation steps
343
+ // in order to ensure consistency after possible modification in perm_bc
344
+ if (!channel<View, Tuple, Perm>(home, xz, y, nofix)) {
345
+ return ES_FAILED;
346
+ }
347
+ if (nofix) {
348
+ return ES_NOFIX;
349
+ }
350
+ }
351
+
352
+ sort_tau<View, Tuple, Perm>(xz, tau);
353
+
354
+ if (Perm) {
355
+ // special case of sccs of size 2 denoted by permutation variables
356
+ // used to enforce consistency from x to y
357
+ // case of the upper bound ordering tau
358
+ for (int i = xz.size() - 1; i--; ) {
359
+ // two x variables are in the same scc of size 2
360
+ if (xz[tau[i]][1].min() == xz[tau[i+1]][1].min() &&
361
+ xz[tau[i]][1].max() == xz[tau[i+1]][1].max() &&
362
+ xz[tau[i]][1].size() == 2 && xz[tau[i]][1].range()) {
363
+ // if bounds are strictly smaller
364
+ if (xz[tau[i]][0].max() < xz[tau[i+1]][0].max()) {
365
+ ModEvent me = y[xz[tau[i]][1].min()].lq(home, xz[tau[i]][0].max());
366
+ if (me_failed(me)) {
367
+ return ES_FAILED;
368
+ }
369
+ nofix |= (y[xz[tau[i]][1].min()].modified() &&
370
+ y[xz[tau[i]][1].min()].max() != xz[tau[i]][0].max());
371
+
372
+ me = y[xz[tau[i+1]][1].max()].lq(home, xz[tau[i+1]][0].max());
373
+ if (me_failed(me)) {
374
+ return ES_FAILED;
375
+ }
376
+ nofix |= (y[xz[tau[i+1]][1].max()].modified() &&
377
+ y[xz[tau[i+1]][1].max()].max() != xz[tau[i+1]][0].max());
378
+ }
379
+ }
380
+ }
381
+ }
382
+ return nofix ? ES_NOFIX : ES_FIX;
383
+ }
384
+
385
+ template<class View, class Tuple, bool Perm>
386
+ forceinline Sortedness<View, Tuple, Perm>::
387
+ Sortedness(Space* home, bool share, Sortedness<View, Tuple, Perm>& p):
388
+ Propagator(home, share, p),
389
+ reachable(p.reachable) {
390
+ xz.update(home, share, p.xz);
391
+ y.update(home, share, p.y);
392
+ w.update(home, share, p.w);
393
+ }
394
+
395
+ template<class View, class Tuple, bool Perm>
396
+ Sortedness<View, Tuple, Perm>::
397
+ Sortedness(Space* home, ViewArray<Tuple>& xz0, ViewArray<View>& y0):
398
+ Propagator(home), xz(xz0), y(y0), w(home, y0), reachable(-1) {
399
+ xz.subscribe(home, this, PC_INT_BND);
400
+ y.subscribe(home, this, PC_INT_BND);
401
+
402
+ }
403
+
404
+ template<class View, class Tuple, bool Perm>
405
+ size_t
406
+ Sortedness<View, Tuple, Perm>::dispose(Space* home) {
407
+ assert(!home->failed());
408
+ xz.cancel(home,this, PC_INT_BND);
409
+ y.cancel(home,this, PC_INT_BND);
410
+ (void) Propagator::dispose(home);
411
+ return sizeof(*this);
412
+ }
413
+
414
+ template<class View, class Tuple, bool Perm>
415
+ Actor* Sortedness<View, Tuple, Perm>::copy(Space* home, bool share) {
416
+ return new (home) Sortedness<View, Tuple, Perm>(home, share, *this);
417
+ }
418
+
419
+ template<class View, class Tuple, bool Perm>
420
+ PropCost Sortedness<View, Tuple, Perm>::cost(void) const {
421
+ return cost_hi(xz.size(), PC_LINEAR_HI);
422
+ }
423
+
424
+ template<class View, class Tuple, bool Perm>
425
+ ExecStatus
426
+ Sortedness<View, Tuple, Perm>::propagate(Space* home) {
427
+
428
+ int n = xz.size();
429
+ bool secondpass = false;
430
+ bool nofix = false;
431
+ int dropfst = 0;
432
+
433
+ bool subsumed = false;
434
+ bool array_subs = false;
435
+ bool match_fixed = false;
436
+
437
+ // normalization of x and y
438
+ if (!normalize<View, Tuple>(home, y, xz, nofix)) {
439
+ return ES_FAILED;
440
+ }
441
+
442
+ // create sigma sorting
443
+ sort_sigma<View, Tuple, Perm>(xz, match_fixed);
444
+
445
+ bool noperm_bc = false;
446
+ if (!array_assigned<View, Tuple, Perm>
447
+ (home, xz, y, array_subs, match_fixed, nofix, noperm_bc)) {
448
+ return ES_FAILED;
449
+ }
450
+
451
+ if (array_subs) {
452
+ return ES_SUBSUMED;
453
+ }
454
+
455
+ sort_sigma<View, Tuple, Perm>(xz, match_fixed);
456
+
457
+ // in this case check_subsumptions is guaranteed to find
458
+ // the xs ordered by sigma
459
+
460
+ if (!check_subsumption<View, Tuple, Perm>
461
+ (home, xz, y, subsumed, dropfst)) {
462
+ return ES_FAILED;
463
+ }
464
+
465
+ if (subsumed) {
466
+ return ES_SUBSUMED;
467
+ }
468
+
469
+ if (Perm) {
470
+ // dropping possibly yields inconsistent indices on permutation variables
471
+ if (dropfst) {
472
+ reachable = w[dropfst - 1].max();
473
+ bool unreachable = true;
474
+ for (int i = xz.size(); unreachable && i-- ; ) {
475
+ unreachable &= (reachable < xz[i][0].min());
476
+ }
477
+
478
+ if (unreachable) {
479
+ xz.drop_fst(dropfst, home, this, PC_INT_BND);
480
+ y.drop_fst (dropfst, home, this, PC_INT_BND);
481
+ } else {
482
+ dropfst = 0;
483
+ }
484
+ }
485
+
486
+ n = xz.size();
487
+
488
+ if (n < 2) {
489
+ if (xz[0][0].max() < y[0].min() || y[0].max() < xz[0][0].min()) {
490
+ return ES_FAILED;
491
+ } else {
492
+ if (Perm) {
493
+ GECODE_ME_CHECK(xz[0][1].eq(home, w.size() - 1));
494
+ }
495
+ Rel::EqBnd<View,View>::post(home, xz[0][0], y[0]);
496
+ return ES_SUBSUMED;
497
+
498
+ }
499
+ }
500
+
501
+ // check whether shifting the permutation variables
502
+ // is necessary after dropping x and y vars
503
+ // highest reachable index
504
+ int valid = n - 1;
505
+ int index = 0;
506
+ int shift = 0;
507
+
508
+ for (int i = n; i--; ){
509
+ if (xz[i][1].max() > index) {
510
+ index = xz[i][1].max();
511
+ }
512
+ if (index > valid) {
513
+ shift = index - valid;
514
+ }
515
+ }
516
+
517
+ if (shift) {
518
+ ViewArray<ViewTuple<OffsetView,2> > oxz(home, n);
519
+ ViewArray<OffsetView> oy(home, n);
520
+
521
+ for (int i = n; i--; ) {
522
+
523
+ GECODE_ME_CHECK(xz[i][1].gq(home, shift));
524
+
525
+ oxz[i][1] = OffsetView(xz[i][1], -shift);
526
+ oxz[i][0] = OffsetView(xz[i][0], 0);
527
+ oy[i] = OffsetView(y[i], 0);
528
+ }
529
+
530
+ GECODE_ES_CHECK((bounds_propagation<OffsetView,
531
+ ViewTuple<OffsetView,2>, Perm>
532
+ (home, oxz, oy, secondpass, nofix, match_fixed)));
533
+
534
+ if (secondpass) {
535
+ GECODE_ES_CHECK((bounds_propagation<OffsetView,
536
+ ViewTuple<OffsetView,2>, Perm>
537
+ (home, oxz, oy, secondpass, nofix, match_fixed)));
538
+ }
539
+ } else {
540
+ GECODE_ES_CHECK((bounds_propagation<View, Tuple, Perm>
541
+ (home, xz, y, secondpass, nofix, match_fixed)));
542
+
543
+ if (secondpass) {
544
+ GECODE_ES_CHECK((bounds_propagation<View, Tuple, Perm>
545
+ (home, xz, y, secondpass, nofix, match_fixed)));
546
+ }
547
+ }
548
+ } else {
549
+ // dropping has no consequences
550
+ if (dropfst) {
551
+ xz.drop_fst(dropfst, home, this, PC_INT_BND);
552
+ y.drop_fst (dropfst, home, this, PC_INT_BND);
553
+ }
554
+
555
+ n = xz.size();
556
+
557
+ if (n < 2) {
558
+ if (xz[0][0].max() < y[0].min() || y[0].max() < xz[0][0].min()) {
559
+ return ES_FAILED;
560
+ } else {
561
+ Rel::EqBnd<View,View>::post(home, xz[0][0], y[0]);
562
+ return ES_SUBSUMED;
563
+ }
564
+ }
565
+ GECODE_ES_CHECK((bounds_propagation<View, Tuple, Perm>
566
+ (home, xz, y, secondpass, nofix, match_fixed)));
567
+ // no second pass possible if there are no permvars
568
+ }
569
+
570
+ if (!normalize<View, Tuple>(home, y, xz, nofix)) {
571
+ return ES_FAILED;
572
+ }
573
+
574
+ GECODE_AUTOARRAY(int, tau, n);
575
+ if (match_fixed) {
576
+ // sorting is determined
577
+ // sigma and tau coincide
578
+ for (int i = xz.size(); i--; ) {
579
+ int pi = xz[i][1].val();
580
+ tau[pi] = i;
581
+ }
582
+ } else {
583
+ for (int i = n; i--; ) {
584
+ tau[i] = i;
585
+ }
586
+ }
587
+
588
+ sort_tau<View, Tuple, Perm>(xz, tau);
589
+ // recreate consistency for already assigned subparts
590
+ // in order of the upper bounds starting at the end of the array
591
+ bool xbassigned = true;
592
+ for (int i = xz.size(); i--; ) {
593
+ if (xz[tau[i]][0].assigned() && xbassigned) {
594
+ ModEvent me = y[i].eq(home, xz[tau[i]][0].val());
595
+ if (me_failed(me)) {
596
+ return ES_FAILED;
597
+ }
598
+ } else {
599
+ xbassigned = false;
600
+ }
601
+ }
602
+
603
+ subsumed = true;
604
+ array_subs = false;
605
+ noperm_bc = false;
606
+
607
+ // creating sorting anew
608
+ sort_sigma<View, Tuple, Perm>(xz, match_fixed);
609
+
610
+ if (Perm) {
611
+ for (int i = 0; i < xz.size() - 1; i++) {
612
+ // special case of subsccs of size2 for the lower bounds
613
+ // two x variables are in the same scc of size 2
614
+ if (xz[i][1].min() == xz[i+1][1].min() &&
615
+ xz[i][1].max() == xz[i+1][1].max() &&
616
+ xz[i][1].size() == 2 && xz[i][1].range()) {
617
+ if (xz[i][0].min() < xz[i+1][0].min()) {
618
+ ModEvent me = y[xz[i][1].min()].gq(home, xz[i][0].min());
619
+ if (me_failed(me)) {
620
+ return ES_FAILED;
621
+ }
622
+ nofix |= (y[xz[i][1].min()].modified() &&
623
+ y[xz[i][1].min()].min() != xz[i][0].min());
624
+
625
+ me = y[xz[i+1][1].max()].gq(home, xz[i+1][0].min());
626
+ if (me_failed(me)) {
627
+ return ES_FAILED;
628
+ }
629
+ nofix |= (y[xz[i+1][1].max()].modified() &&
630
+ y[xz[i+1][1].max()].min() != xz[i+1][0].min());
631
+ }
632
+ }
633
+ }
634
+ }
635
+
636
+ // check assigned
637
+ // should be sorted
638
+ bool xassigned = true;
639
+ for (int i = 0; i < xz.size(); i++) {
640
+ if (xz[i][0].assigned() && xassigned) {
641
+ ModEvent me = y[i].eq(home, xz[i][0].val());
642
+ if (me_failed(me)) {
643
+ return ES_FAILED;
644
+ }
645
+ } else {
646
+ xassigned = false;
647
+ }
648
+ }
649
+
650
+ // sorted check bounds
651
+ // final check that variables are consitent with least and greatest possible
652
+ // values
653
+ int tlb = std::min(xz[0][0].min(), y[0].min());
654
+ int tub = std::max(xz[xz.size() - 1][0].max(), y[y.size() - 1].max());
655
+ for (int i = xz.size(); i--; ) {
656
+ ModEvent me = y[i].lq(home, tub);
657
+ if (me_failed(me)) {
658
+ return ES_FAILED;
659
+ }
660
+ nofix |= y[i].modified() && y[i].max() != tub;
661
+
662
+ me = y[i].gq(home, tlb);
663
+ if (me_failed(me)) {
664
+ return ES_FAILED;
665
+ }
666
+ nofix |= y[i].modified() && y[i].min() != tlb;
667
+
668
+ me = xz[i][0].lq(home, tub);
669
+ if (me_failed(me)) {
670
+ return ES_FAILED;
671
+ }
672
+ nofix |= xz[i][0].modified() && xz[i][0].max() != tub;
673
+
674
+ me = xz[i][0].gq(home, tlb);
675
+ if (me_failed(me)) {
676
+ return ES_FAILED;
677
+ }
678
+ nofix |= xz[i][0].modified() && xz[i][0].min() != tlb;
679
+ }
680
+
681
+ if (!array_assigned<View, Tuple, Perm>
682
+ (home, xz, y, array_subs, match_fixed, nofix, noperm_bc)) {
683
+ return ES_FAILED;
684
+ }
685
+
686
+ if (array_subs) {
687
+ return ES_SUBSUMED;
688
+ }
689
+
690
+ if (!check_subsumption<View, Tuple, Perm>
691
+ (home, xz, y, subsumed, dropfst)) {
692
+ return ES_FAILED;
693
+ }
694
+
695
+ if (subsumed) {
696
+ return ES_SUBSUMED;
697
+ }
698
+
699
+ return nofix ? ES_NOFIX : ES_FIX;
700
+ }
701
+
702
+ template<class View, class Tuple, bool Perm>
703
+ ExecStatus
704
+ Sortedness<View, Tuple, Perm>::
705
+ post(Space* home, ViewArray<Tuple>& xz0, ViewArray<View>& y0) {
706
+ int n = xz0.size();
707
+ if (n < 2) {
708
+ if ((xz0[0][0].max() < y0[0].min()) || (y0[0].max() < xz0[0][0].min())) {
709
+ return ES_FAILED;
710
+ } else {
711
+ Rel::EqBnd<View,View>::post(home, xz0[0][0], y0[0]);
712
+ if (Perm) {
713
+ GECODE_ME_CHECK(xz0[0][1].eq(home, 0));
714
+ }
715
+ }
716
+ } else {
717
+ new (home) Sortedness<View, Tuple, Perm>(home, xz0, y0);
718
+ }
719
+ return ES_OK;
720
+ }
721
+
722
+ }}}
723
+
724
+ // STATISTICS: int-prop
725
+
726
+
727
+