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,338 @@
1
+ /*
2
+ * Main authors:
3
+ * Patrick Pekczynski <pekczynski@ps.uni-sb.de>
4
+ *
5
+ * Copyright:
6
+ * Patrick Pekczynski, 2004/2005
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
+ #ifndef __GECODE_INT_GCC_HH__
23
+ #define __GECODE_INT_GCC_HH__
24
+
25
+ #include "gecode/int.hh"
26
+ #include "gecode/support/sort.hh"
27
+ #include "gecode/support/static-stack.hh"
28
+ #include "gecode/int/gcc/gccbndsup.icc"
29
+ #include "gecode/int/gcc/graphsup.icc"
30
+ #include "gecode/int/gcc/occur.icc"
31
+
32
+ /**
33
+ * \namespace Gecode::Int::GCC
34
+ * \brief Global cardinality propagators
35
+ * \note The global cardinality propagator with fixed cardinalities does not
36
+ * not support sharing!
37
+ *
38
+ */
39
+
40
+ namespace Gecode { namespace Int { namespace GCC {
41
+
42
+ /**
43
+ * \brief Bounds-consistent global cardinality propagator
44
+ * \par [Reference]
45
+ * The algorithm is taken from: \n
46
+ \verbatim
47
+ @PROCEEDINGS{quimper-efficient,
48
+ title = {An Efficient Bounds Consistency Algorithm
49
+ for the Global Cardinality Constraint},
50
+ year = {2003},
51
+ volume = {2833},
52
+ address = {Kinsale, Ireland},
53
+ month = {September},
54
+ author = {Claude-Guy Quimper and Peter van Beek
55
+ and Alejandro L�pez-Ortiz
56
+ and Alexander Golynski and Sayyed Bashir Sadjad},
57
+ booktitle = {Proceedings of the 9th International Conference
58
+ on Principles and Practice of
59
+ Constraint Programming},
60
+ pages = {600--614},
61
+ url = {http://ai.uwaterloo.ca/~vanbeek/publications},
62
+ }
63
+ @TECHREPORT{quimper-efficientTR,
64
+ author = {Claude-Guy Quimper and Peter van Beek
65
+ and Alejandro L�pez-Ortiz
66
+ and Alexander Golynski and
67
+ Sayyed Bashir Sadjad},
68
+ title = {An Efficient Bounds Consistency Algorithm
69
+ for the Global Cardinality Constraint,
70
+ Technical Report},
71
+ institution = {School of Computer Science,
72
+ University of Waterloo, Waterloo, Canada},
73
+ year = {2003},
74
+ url = {http://ai.uwaterloo.ca/~vanbeek/publications},
75
+ }
76
+ \endverbatim
77
+ *
78
+ * This implementation uses the code that is provided
79
+ * by Peter Van Beek:\n
80
+ * http://ai.uwaterloo.ca/~vanbeek/software/software.html
81
+ * The code here has only been slightly modified to fit Gecode
82
+ * (taking idempotent/non-idempotent propagation into account)
83
+ * and uses a more efficient layout of datastructures (keeping the
84
+ * number of different arrays small).
85
+ *
86
+ * The Bnd class is used to post the propagator and BndImp
87
+ * is the actual implementation taking shared variables into account.
88
+ *
89
+ * Requires \code #include "gecode/int/gcc.hh" \endcode
90
+ * \ingroup FuncIntProp
91
+ */
92
+
93
+ template <class View, class Card, bool isView>
94
+ class Bnd{
95
+ public:
96
+ /**
97
+ * \brief Post propagator for views \a x and cardinalities \a k
98
+ *
99
+ * \a all denotes whether the propagator uses all value occuring
100
+ * in the domains of the problem vies specified in \a x. Also
101
+ * checks whether \a x and \a k contain shared views.
102
+ */
103
+ static ExecStatus post(Space* home,
104
+ ViewArray<View>& x,
105
+ ViewArray<Card>& k,
106
+ bool all);
107
+ };
108
+
109
+ /**
110
+ * \brief Implementation of the bounds consistent
111
+ * global cardinality propagator
112
+ */
113
+ template <class View, class Card, bool isView, bool shared>
114
+ class BndImp : public Propagator {
115
+ friend class Bnd<View, Card, isView>;
116
+ protected:
117
+ /// Views on which to perform bounds-propagation
118
+ ViewArray<View> x;
119
+ /// Array containing either fixed cardinalities or CardViews
120
+ ViewArray<Card> k;
121
+ /**
122
+ * \brief Data structure storing the sum of the views lower bounds
123
+ * Necessary for reasoning about the interval capacities in the
124
+ * propagation algorithm.
125
+ */
126
+ PartialSum<Card>* lps;
127
+ /// Data structure storing the sum of the views upper bounds
128
+ PartialSum<Card>* ups;
129
+ /**
130
+ * \brief Stores whether cardinalities are all assigned
131
+ *
132
+ * If all cardinalities are assigned the propagation algorithm
133
+ * only has to perform propagation for the upper bounds.
134
+ */
135
+ bool card_fixed;
136
+ /**
137
+ * \brief Stores whether all values in domains of the x-views are used
138
+ * for cardinality reasoning or whether we only use a subset of them.
139
+ */
140
+ bool card_all;
141
+ /**
142
+ * \brief Stores whether the minium required occurences of
143
+ * the cardinalities are all zero. If so, we do not need
144
+ * to perform lower bounds propagation.
145
+ */
146
+ bool skip_lbc;
147
+ /// Constructor for posting
148
+ BndImp(Space* home, ViewArray<View>&, ViewArray<Card>&, bool, bool, bool);
149
+ /// Constructor for cloning \a p
150
+ BndImp(Space* home, bool share, BndImp<View, Card, isView, shared>& p);
151
+
152
+ public:
153
+ /// Destructor
154
+ virtual size_t dispose(Space* home);
155
+ /// Flush partial sum data structures
156
+ virtual void flush(void);
157
+ /// Copy propagator during cloning
158
+ virtual Actor* copy(Space* home, bool share);
159
+ /// Cost funtion returning dynamic PC_LINEAR_HI.
160
+ virtual PropCost cost (void) const;
161
+ /// Perform propagation
162
+ virtual ExecStatus propagate(Space* home);
163
+ };
164
+
165
+ /**
166
+ * \brief Performs bounds-consistent global cardinality propagation
167
+ *
168
+ * This function implements the propagation algorithm for
169
+ * the bounds-consistent global cardinality propagator implemented
170
+ * in GCC::Bnd. It is available as seperate function in order
171
+ * to allow staging for GCC::Dom and GCC::Bnd though staging is
172
+ * currently not used due to technical difficulties.
173
+ */
174
+ template <class View, class Card, bool isView, bool shared>
175
+ ExecStatus prop_bnd(Space* home, ViewArray<View>&, ViewArray<Card>&,
176
+ PartialSum<Card>*&, PartialSum<Card>*&,
177
+ bool, bool, bool);
178
+
179
+ /**
180
+ * \brief Domain-consistent global cardinality propagator
181
+ * \par [Reference]
182
+ * The algorithm is taken from: \n
183
+ * \anchor CardVarNPCompl
184
+ \verbatim
185
+ @PROCEEDINGS{improvedgcc,
186
+ title = {Improved Algorithms for the
187
+ Global Cardinality Constraint},
188
+ year = {2004},
189
+ volume = {3528},
190
+ address = {Toronto, Canada},
191
+ month = {September},
192
+ author = {Claude-Guy Quimper and Peter van Beek and
193
+ Alejandro L�pez-Ortiz and Alexander Golynski},
194
+ booktitle = {Proceedings of the 10th International
195
+ Conference on Principles and Practice of
196
+ Constraint Programming},
197
+ url = {http://ai.uwaterloo.ca/~vanbeek/publications},
198
+ }
199
+ \endverbatim
200
+ *
201
+ * Requires \code #include "gecode/int/gcc.hh" \endcode
202
+ * \ingroup FuncIntProp
203
+ */
204
+
205
+ template <class View, class Card, bool isView>
206
+ class Dom : public Propagator {
207
+ protected:
208
+ /// Views on which to perform domain-propagation
209
+ ViewArray<View> x;
210
+ /**
211
+ * \brief Views used to channel information between \c x and \c k
212
+ * (\f$ x \subseteq y \f$).
213
+ */
214
+ ViewArray<View> y;
215
+ /// Array containing either fixed cardinalities or CardViews
216
+ ViewArray<Card> k;
217
+ /// Propagation is performed on a variable-value graph (used as cache)
218
+ VarValGraph<View, Card, isView>* vvg;
219
+ /**
220
+ * \brief Stores whether cardinalities are all assigned
221
+ *
222
+ * If all cardinalities are assigned the propagation algorithm
223
+ * only has to perform propagation for the upper bounds.
224
+ */
225
+ bool card_fixed;
226
+ /**
227
+ * \brief Stores whether all values in domains of the x-views are used
228
+ * for cardinality reasoning or whether we only use a subset of them.
229
+ */
230
+ bool card_all;
231
+ /// Constructor for cloning \a p
232
+ Dom(Space* home, bool share, Dom<View, Card, isView>& p);
233
+ /// Constructor for posting
234
+ Dom(Space* home, ViewArray<View>&, ViewArray<Card>&, bool, bool);
235
+
236
+ public:
237
+ /// Destructor including deallocation of variable-value graph
238
+ virtual size_t dispose(Space* home);
239
+ /// Flush variable-value graph
240
+ virtual void flush(void);
241
+ /// Copy propagator during cloning
242
+ virtual Actor* copy(Space* home, bool share);
243
+ /**
244
+ * \brief Cost function
245
+ *
246
+ * As the propagation stronlgy depends on the domain size of the
247
+ * views on which propagation is performed, the propagation costs
248
+ * are computed as follows, where \c d denotes the size of the
249
+ * largest domain of a view in \c x:
250
+ * - dynamic PC_LINEAR_LO ( \f$ d < 6\f$ )
251
+ * - dynamic PC_LINEAR_HI ( \f$ 6 \leq d < \frac{n}{2} \f$ )
252
+ * - dynamic PC_QUADRATIC_LO ( \f$ \frac{n}{2} \leq d < n^2 \f$)
253
+ * - dynamic PC_CUBIC_LO ( \f$ n^2 \leq d \f$)
254
+ */
255
+ virtual PropCost cost (void) const;
256
+ /// Perform propagation
257
+ virtual ExecStatus propagate(Space* home);
258
+ /**
259
+ * \brief Post propagator for views \a x and cardinalities \a k
260
+ *
261
+ * \a all denotes whether the propagator uses all value occuring
262
+ * in the domains of the problem vies specified in \a x.
263
+ */
264
+ static ExecStatus post(Space* home,
265
+ ViewArray<View>& x, ViewArray<Card>& k,
266
+ bool all);
267
+ };
268
+
269
+ /**
270
+ * \brief Value consistent global cardinality propagator
271
+ *
272
+ * Requires \code #include "gecode/int/gcc.hh" \endcode
273
+ * \ingroup FuncIntProp
274
+ */
275
+
276
+
277
+ template <class View, class Card, bool isView>
278
+ class Val : public Propagator {
279
+ protected:
280
+ /// Views on which to perform value-propagation
281
+ ViewArray<View> x;
282
+ /// Array containing either fixed cardinalities or CardViews
283
+ ViewArray<Card> k;
284
+ /**
285
+ * \brief Stores whether all values in domains of the x-views are used
286
+ * for cardinality reasoning or whether we only use a subset of them.
287
+ */
288
+ bool card_all;
289
+ /// Constructor for cloning \a p
290
+ Val(Space* home, bool share, Val<View, Card, isView>& p );
291
+ /// Constructor for posting
292
+ Val(Space* home, ViewArray<View>&, ViewArray<Card>&, bool);
293
+
294
+ public:
295
+ /// Destructor
296
+ virtual size_t dispose(Space* home);
297
+ /// Copy propagator during cloning
298
+ virtual Actor* copy(Space* home, bool share);
299
+ /// Cost funtion returning dynamic PC_LINEAR_HI.
300
+ virtual PropCost cost (void) const;
301
+ /// Perform propagation
302
+ virtual ExecStatus propagate(Space* home);
303
+ /**
304
+ * \brief Post propagator for views \a x and cardinalities \a k
305
+ *
306
+ * \a all denotes whether the propagator uses all value occuring
307
+ * in the domains of the problem vies specified in \a x.
308
+ */
309
+ static ExecStatus post(Space* home,
310
+ ViewArray<View>& x, ViewArray<Card>& k,
311
+ bool all);
312
+ };
313
+
314
+ /**
315
+ * \brief Performs value-consistent global cardinality propagation
316
+ *
317
+ * This function implements the propagation algorithm for
318
+ * the value-consistent global cardinality propagator implemented
319
+ * in GCC::Val.
320
+ */
321
+
322
+ template <class View, class Card, bool isView>
323
+ ExecStatus prop_val(Space* home, ViewArray<View>&, ViewArray<Card>&,
324
+ bool&);
325
+
326
+ }}}
327
+
328
+ #include "gecode/int/gcc/ubc.icc"
329
+ #include "gecode/int/gcc/lbc.icc"
330
+ #include "gecode/int/gcc/val.icc"
331
+ #include "gecode/int/gcc/bnd.icc"
332
+ #include "gecode/int/gcc/dom.icc"
333
+
334
+ #endif
335
+
336
+
337
+ // STATISTICS: int-prop
338
+
@@ -0,0 +1,629 @@
1
+ /*
2
+ * Main authors:
3
+ * Patrick Pekczynski <pekczynski@ps.uni-sb.de>
4
+ *
5
+ * Copyright:
6
+ * Patrick Pekczynski, 2004/2005
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 GCC {
23
+
24
+ /// \brief Perform bounds propagation
25
+ template <class View, class Card, bool isView, bool shared>
26
+ inline ExecStatus
27
+ prop_bnd(Space* home, ViewArray<View>& x, ViewArray<Card>& k,
28
+ PartialSum<Card>*& lps, PartialSum<Card>*& ups,
29
+ bool card_fixed, bool card_all, bool nolbc){
30
+
31
+ bool all_assigned = true;
32
+ bool mod = false;
33
+ int smin = 0;
34
+ int smax = 0;
35
+
36
+ if (isView) {
37
+ // if a cardinality of first or last value is
38
+ // out of the variable bounds (cardvar == 0)
39
+ // reduce cardinality variables
40
+
41
+ int m = k.size();
42
+ bool locut = k[0].max() == 0;
43
+ bool hicut = k[m - 1].max() == 0;
44
+
45
+ if (locut) {
46
+ int low = k[0].card();
47
+ for (int i = 0; i < x.size(); i++) {
48
+ ModEvent me = x[i].gr(home, low);
49
+ GECODE_ME_CHECK(me);
50
+ mod |= me_modified(me) && (x[i].min() != low + 1);
51
+ mod |= shared && me_modified(me);
52
+ }
53
+ }
54
+ if (hicut) {
55
+ int hi = k[m - 1].card();
56
+ for (int i = 0; i < x.size(); i++) {
57
+ ModEvent me = x[i].le(home, hi);
58
+ GECODE_ME_CHECK(me);
59
+ mod |= me_modified(me) && (x[i].max() != hi - 1);
60
+ mod |= shared && me_modified(me);
61
+ }
62
+ }
63
+
64
+ if (locut || hicut) {
65
+ int cmin = k[0].card();
66
+ int cmax = k[m - 1].card();
67
+ if (k[0].max() == 0) {
68
+ cmin = k[1].card();
69
+ }
70
+ if (k[m - 1].max() == 0) {
71
+ cmax = k[m - 2].card();
72
+ }
73
+ reduce_card<Card>(cmin, cmax, k);
74
+
75
+ if (lps != NULL) {
76
+ delete lps; lps = NULL;
77
+ assert(ups != NULL);
78
+ delete ups; ups = NULL;
79
+ }
80
+ }
81
+ }
82
+
83
+ GECODE_AUTOARRAY(int, count, k.size());
84
+ for (int i = k.size(); i--; ) {
85
+ count[i] = 0;
86
+ }
87
+
88
+ int noa = 0;
89
+ int single = 0;
90
+ int xlb = 0;
91
+ int xub = 0;
92
+
93
+ for (int i = x.size(); i--; ) {
94
+ bool b = x[i].assigned();
95
+ xlb += x[i].min();
96
+ xub += x[i].max();
97
+ all_assigned &= b;
98
+ if (b) {
99
+ noa++;
100
+ int idx = lookupValue(k,x[i].val());
101
+ // reduction is essential for order on value nodes in dom
102
+ // hence introduce test for failed lookup
103
+ if (idx == -1) {
104
+ return ES_FAILED;
105
+ }
106
+ count[idx]++;
107
+ } else {
108
+ single = i;
109
+ }
110
+ }
111
+
112
+ if (isView) {
113
+ // before propagation performs inferences on cardinality variables:
114
+ if (noa > 0) {
115
+ int n = x.size();
116
+ int ks = k.size();
117
+
118
+ for (int i = ks; i--; ) {
119
+ if (!k[i].assigned()) {
120
+ int ub = n - (noa - count[i]);
121
+ int lb = count[i];
122
+ ModEvent melq = k[i].lq(home, ub);
123
+ GECODE_ME_CHECK(melq);
124
+ mod |= me_modified(melq) && (k[i].max() != ub);
125
+ mod |= shared && me_modified(melq);
126
+
127
+ ModEvent megq = k[i].gq(home, lb);
128
+ GECODE_ME_CHECK(megq);
129
+ mod |= me_modified(megq) && (k[i].min() != lb);
130
+ mod |= shared && me_modified(megq);
131
+ }
132
+ }
133
+ }
134
+
135
+ if (!card_consistent<View, Card>(smin, smax, x, k, card_all)) {
136
+ return ES_FAILED;
137
+ }
138
+
139
+ // can only modified cardinality variables
140
+ GECODE_ES_CHECK((prop_card<View, Card, shared>(home, x, k, mod)));
141
+
142
+ // mimicking linear constraint
143
+ int smax = 0;
144
+ int smin = 0;
145
+ int total_min = 0;
146
+ int total_max = 0;
147
+ for (int i = k.size(); i--; ) {
148
+ smax += k[i].max();
149
+ total_min += k[i].card() * k[i].min();
150
+ total_max += k[i].card() * k[i].max();
151
+ }
152
+ int xsmax = x.size() - smax;
153
+ int xsmin = x.size() - smin;
154
+ smax = 0;
155
+ smin = 0;
156
+ bool card_ass = true;
157
+ for (int i = k.size(); i--; ) {
158
+ int lb = xsmax + k[i].max();
159
+ int ub = xsmin + k[i].min();
160
+ ModEvent me = k[i].gq(home, lb);
161
+ GECODE_ME_CHECK(me);
162
+ mod |= me_modified(me) && (k[i].min() != lb);
163
+ mod |= shared && me_modified(me);
164
+ smax += k[i].max();
165
+
166
+ me = k[i].lq(home, ub);
167
+ GECODE_ME_CHECK(me);
168
+ mod |= me_modified(me) && (k[i].max() != ub);
169
+ mod |= shared && me_modified(me);
170
+ card_ass &= k[i].assigned();
171
+ }
172
+ if (card_ass) {
173
+ if (smax < x.size() || smax > x.size()) {
174
+ return ES_FAILED;
175
+ }
176
+
177
+ // redundant linear constraint
178
+ for (int i = x.size(); i--; ) {
179
+ if (!x[i].assigned()) {
180
+ int xmin = xub - x[i].max();
181
+ int xgq = total_max - xmin;
182
+
183
+ int xmax = xlb - x[i].min();
184
+ int xlq = total_max - xmax;
185
+
186
+ ModEvent me = x[i].gq(home, xgq);
187
+ GECODE_ME_CHECK(me);
188
+ mod |= me_modified(me) && (x[i].min() != xgq);
189
+ mod |= shared && me_modified(me);
190
+
191
+ me = x[i].lq(home, xlq);
192
+ GECODE_ME_CHECK(me);
193
+ mod |= me_modified(me) && (x[i].max() != xlq);
194
+ mod |= shared && me_modified(me);
195
+ }
196
+ }
197
+ }
198
+ }
199
+
200
+ for (int i = k.size(); i--; ) {
201
+ count[i] = 0;
202
+ }
203
+
204
+ all_assigned = true;
205
+ noa = 0;
206
+ single = 0;
207
+
208
+ for (int i = x.size(); i--; ) {
209
+ bool b = x[i].assigned();
210
+ xlb += x[i].min();
211
+ xub += x[i].max();
212
+ all_assigned &= b;
213
+ if (b) {
214
+ noa++;
215
+ int idx = lookupValue(k,x[i].val());
216
+ // reduction is essential for order on value nodes in dom
217
+ // hence introduce test for failed lookup
218
+ if (idx == -1) {
219
+ return ES_FAILED;
220
+ }
221
+ count[idx]++;
222
+ } else {
223
+ single = i;
224
+ }
225
+ }
226
+
227
+ if (all_assigned) {
228
+ for (int i = k.size(); i--; ) {
229
+ int ci = count[i];
230
+ if (! (k[i].min() <= ci && ci <= k[i].max())) {
231
+ return ES_FAILED;
232
+ } else {
233
+ if (isView) {
234
+ if (!k[i].assigned()) {
235
+ ModEvent me = k[i].eq(home, ci);
236
+ GECODE_ME_CHECK(me);
237
+ mod |= k[i].assigned();
238
+ }
239
+ all_assigned &= k[i].assigned();
240
+ }
241
+ }
242
+ }
243
+ if (all_assigned) {
244
+ return ES_SUBSUMED;
245
+ }
246
+ }
247
+
248
+ if (isView) {
249
+ // check again for zero entries at first or last position
250
+ int m = k.size();
251
+ bool locut = k[0].max() == 0;
252
+ bool hicut = k[m - 1].max() == 0;
253
+
254
+ if (locut) {
255
+ int low = k[0].card();
256
+ for (int i = 0; i < x.size(); i++) {
257
+ ModEvent me = x[i].gr(home, low);
258
+ GECODE_ME_CHECK(me);
259
+ mod |= me_modified(me) && (x[i].min() != low + 1);
260
+ mod |= shared && me_modified(me);
261
+ }
262
+ }
263
+ if (hicut) {
264
+ int hi = k[m - 1].card();
265
+ for (int i = 0; i < x.size(); i++) {
266
+ ModEvent me = x[i].le(home, hi);
267
+ GECODE_ME_CHECK(me);
268
+ mod |= me_modified(me) && (x[i].max() != hi - 1);
269
+ mod |= shared && me_modified(me);
270
+ }
271
+ }
272
+
273
+ if (locut || hicut) {
274
+ int cmin = k[0].card();
275
+ int cmax = k[m - 1].card();
276
+ if (k[0].max() == 0) {
277
+ cmin = k[1].card();
278
+ }
279
+ if (k[m - 1].max() == 0) {
280
+ cmax = k[m - 2].card();
281
+ }
282
+ reduce_card<Card>(cmin, cmax, k);
283
+
284
+ if (lps != NULL) {
285
+ delete lps;
286
+ lps = NULL;
287
+ assert(ups != NULL);
288
+ delete ups;
289
+ ups = NULL;
290
+ }
291
+ }
292
+ }
293
+
294
+ ExecStatus es_ubc = ES_FIX;
295
+ ExecStatus es_lbc = ES_FIX;
296
+ int n = x.size();
297
+
298
+ GECODE_AUTOARRAY(int, mu, n);
299
+ GECODE_AUTOARRAY(int, nu, n);
300
+
301
+ for (int i = n; i--; ) {
302
+ nu[i] = i;
303
+ mu[i] = i;
304
+ }
305
+ // Create sorting permutation mu according to the variables upper bounds
306
+ MaxInc<View> max_inc(x);
307
+ Support::quicksort<int, MaxInc<View> >(mu, n, max_inc);
308
+
309
+ // Create sorting permutation nu according to the variables lower bounds
310
+ MinInc<View> min_inc(x);
311
+ Support::quicksort<int, MinInc<View> >(nu, n, min_inc);
312
+
313
+ if (isView) {
314
+ // assert guaranteed bounds in the set of all values for variable case
315
+ assert(k[0].card() == x[nu[0]].min());
316
+ }
317
+
318
+ // ensure that only values are considered lying in the variable domain
319
+ int cur_minx = x[nu[0]].min();
320
+ if (lps == NULL) {
321
+ assert (ups == NULL);
322
+ lps = new PartialSum<Card>(cur_minx, k.size(), k, false);
323
+ ups = new PartialSum<Card>(cur_minx, k.size(), k, true);
324
+ }
325
+
326
+ if (isView) {
327
+ // if there has been a change to the cardinality variables
328
+ // reconstruction of the partial sum structure is necessary
329
+ if (lps->check_update_min(k)) {
330
+ delete lps;
331
+ lps = new PartialSum<Card>(cur_minx, k.size(), k, false);
332
+ }
333
+
334
+ if (ups->check_update_max(k)) {
335
+ delete ups;
336
+ ups = new PartialSum<Card>(cur_minx, k.size(), k, true);
337
+ }
338
+ }
339
+
340
+ // already holds by construction
341
+ assert(lps->minValue() == ups->minValue());
342
+ assert(lps->maxValue() == ups->maxValue());
343
+
344
+ bool minima_equal = lps->minValue() == ups->minValue();
345
+ bool maxima_equal = lps->maxValue() == ups->maxValue();
346
+
347
+ if (!minima_equal || !maxima_equal ) {
348
+ delete lps;
349
+ lps = new PartialSum<Card>(cur_minx, k.size(), k, false);
350
+ delete ups;
351
+ ups = new PartialSum<Card>(cur_minx, k.size(), k, true);
352
+ }
353
+
354
+ // assert that the minimal value of the partial sum structure for
355
+ // LBC is consistent with the smallest value a variable can take
356
+ assert(lps->minValue() <= x[nu[0]].min());
357
+ // assert that the maximal value of the partial sum structure for
358
+ // UBC is consistent with the largest value a variable can take
359
+ assert(x[mu[x.size() - 1]].max() <= ups->maxValue());
360
+
361
+ /*
362
+ * Setup rank and bounds info
363
+ * Since this implementation is based on the theory of Hall Intervals
364
+ * additional datastructures are needed in order to represent these
365
+ * intervals and the "partial-sum" data structure (cf."gcc/gccbndsup.icc")
366
+ *
367
+ */
368
+
369
+ GECODE_AUTOARRAY(HallInfo, hall, (2 * n + 2));
370
+ GECODE_AUTOARRAY(Rank, rank, n);
371
+
372
+ int nb = 0;
373
+ // setup bounds and rank
374
+ int min = x[nu[0]].min();
375
+ int max = x[mu[0]].max() + 1;
376
+ int last = lps->firstValue + 1; //equivalent to last = min -2
377
+ hall[0].bounds = last;
378
+
379
+ /*
380
+ * First the algorithm merges the arrays minsorted and maxsorted
381
+ * into bounds i.e. hall[].bounds contains the ordered union
382
+ * of the lower and upper domain bounds including two sentinels
383
+ * at the beginning and at the end of the set
384
+ * ( the upper variable bounds in this union are increased by 1 )
385
+ */
386
+
387
+ {
388
+ int i = 0;
389
+ int j = 0;
390
+ while (true) {
391
+ if (i < n && min < max) {
392
+ if (min != last) {
393
+ last = min;
394
+ hall[++nb].bounds = last;
395
+ }
396
+ rank[nu[i]].min = nb;
397
+ if (++i < n) {
398
+ min = x[nu[i]].min();
399
+ }
400
+ } else {
401
+ if (max != last) {
402
+ last = max;
403
+ hall[++nb].bounds = last;
404
+ }
405
+ rank[mu[j]].max = nb;
406
+ if (++j == n) {
407
+ break;
408
+ }
409
+ max = x[mu[j]].max() + 1;
410
+ }
411
+ }
412
+ }
413
+
414
+ int rightmost = nb + 1; // rightmost accesible value in bounds
415
+ hall[rightmost].bounds = ups->lastValue + 1 ;
416
+
417
+ nolbc = true;
418
+ for (int i = k.size(); i--; ) {
419
+ nolbc &= (k[i].min() == 0);
420
+ }
421
+
422
+ if (!card_fixed && !nolbc) {
423
+ es_lbc = lbc<View, Card, shared>(home, x, nb, hall, rank,lps, mu, nu);
424
+ if (es_lbc == ES_FAILED || es_lbc == ES_SUBSUMED) {
425
+ return es_lbc;
426
+ }
427
+ mod |= (es_lbc == ES_NOFIX);
428
+ }
429
+
430
+ es_ubc = ubc<View, Card, shared>(home, x, nb, hall, rank, ups, mu, nu);
431
+ if (es_ubc == ES_FAILED || es_ubc == ES_SUBSUMED) {
432
+ return es_ubc;
433
+ }
434
+ mod |= (es_ubc == ES_NOFIX);
435
+
436
+ if (isView) {
437
+ GECODE_ES_CHECK((prop_card<View, Card, shared>(home, x, k, mod)));
438
+ }
439
+
440
+ all_assigned = true;
441
+ noa = 0;
442
+ single = 0;
443
+ for (int i = k.size(); i--; ) {
444
+ count[i] = 0;
445
+ }
446
+
447
+ for (int i = x.size(); i--; ) {
448
+ bool b = x[i].assigned();
449
+ all_assigned &= b;
450
+ if (b) {
451
+ noa++;
452
+ int idx = lookupValue(k,x[i].val());
453
+ count[idx]++;
454
+ } else {
455
+ single = i;
456
+ }
457
+ }
458
+
459
+ if (all_assigned) {
460
+ for (int i = k.size(); i--; ) {
461
+ int ci = count[i];
462
+ if (! (k[i].min() <= ci && ci <= k[i].max())) {
463
+ return ES_FAILED;
464
+ } else {
465
+ if (isView) {
466
+ if (!k[i].assigned()) {
467
+ ModEvent me = k[i].eq(home, ci);
468
+ GECODE_ME_CHECK(me);
469
+ mod |= k[i].assigned();
470
+ }
471
+ all_assigned &= k[i].assigned();
472
+ }
473
+ }
474
+ }
475
+ if (all_assigned) {
476
+ return ES_SUBSUMED;
477
+ }
478
+ }
479
+
480
+ return mod ? ES_NOFIX : ES_FIX;
481
+ }
482
+
483
+ // for posting
484
+ template <class View, class Card, bool isView, bool shared>
485
+ inline
486
+ BndImp<View, Card, isView, shared>::
487
+ BndImp(Space* home, ViewArray<View>& x0, ViewArray<Card>& k0,
488
+ bool cf, bool all, bool nolbc) :
489
+ Propagator(home, true), x(x0), k(k0), lps(NULL), ups(NULL),
490
+ card_fixed(cf), card_all(all), skip_lbc(nolbc) {
491
+ x.subscribe(home, this, PC_INT_BND);
492
+ k.subscribe(home, this, PC_INT_BND);
493
+ }
494
+
495
+ // for cloning
496
+ template <class View, class Card, bool isView, bool shared>
497
+ forceinline
498
+ BndImp<View, Card, isView, shared>::
499
+ BndImp(Space* home, bool share, BndImp<View, Card, isView, shared>& p)
500
+ : Propagator(home, share, p), lps(NULL), ups(NULL),
501
+ card_fixed(p.card_fixed), card_all(p.card_all),
502
+ skip_lbc(p.skip_lbc) {
503
+ x.update(home, share, p.x);
504
+ k.update(home, share, p.k);
505
+ }
506
+
507
+ template <class View, class Card, bool isView, bool shared>
508
+ size_t
509
+ BndImp<View, Card, isView, shared>::dispose(Space* home){
510
+ if (!home->failed()) {
511
+ x.cancel(home,this, PC_INT_BND);
512
+ k.cancel(home,this, PC_INT_BND);
513
+ }
514
+ if (lps != NULL) {
515
+ delete lps;
516
+ }
517
+ if (ups != NULL) {
518
+ delete ups;
519
+ }
520
+ (void) Propagator::dispose(home);
521
+ return sizeof(*this);
522
+ }
523
+
524
+ template <class View, class Card, bool isView, bool shared>
525
+ Actor*
526
+ BndImp<View, Card, isView, shared>::copy(Space* home, bool share){
527
+ return new (home) BndImp<View, Card, isView, shared>
528
+ (home, share, *this);
529
+ }
530
+
531
+ template <class View, class Card, bool isView, bool shared>
532
+ PropCost
533
+ BndImp<View, Card, isView, shared>::cost (void) const {
534
+ /*
535
+ * The bounds consistent version of the Global Cardinality constraint
536
+ * has a theoretical complexity of
537
+ * O(t + n\cdot log(n)) with
538
+ * n = number of variables
539
+ * t = time needed to sort the domain bounds of the variables
540
+ */
541
+ PropCost pc = PC_LINEAR_HI;
542
+ return cost_hi(x.size(),pc);
543
+ }
544
+
545
+ template <class View, class Card, bool isView, bool shared>
546
+ ExecStatus
547
+ BndImp<View, Card, isView, shared>::propagate(Space* home) {
548
+ return prop_bnd<View, Card, isView, shared>
549
+ (home, x, k, lps, ups, card_fixed, card_all, skip_lbc);
550
+ }
551
+
552
+ /**
553
+ * \brief Sharing test for the bounds-consistent global cardinality
554
+ * propagator.
555
+ *
556
+ * Due to parametrization on the problem views, \a View1 and the
557
+ * cardinality views, \a View2 the test can be applied for both cases
558
+ * of fixed cardinalities and cardinality variables.
559
+ */
560
+ template <class View1, class View2>
561
+ class SharingTest {
562
+ public:
563
+ /**
564
+ * \brief Test whether the problem views in \a x0 or the
565
+ * cardinality views in \a k0 contain shared views.
566
+ */
567
+ static bool shared(Space* home, ViewArray<View1>& x0,
568
+ ViewArray<View2>& k0) {
569
+ ViewArray<View1> xc(home, x0.size()+k0.size());
570
+ for (int i = 0; i < x0.size(); i++) {
571
+ xc[i] = x0[i];
572
+ }
573
+ for (int i = x0.size(); i < x0.size()+k0.size(); i++) {
574
+ xc[i] = k0[i - x0.size()].intview();
575
+ }
576
+ return xc.shared();
577
+ }
578
+ };
579
+
580
+ /**
581
+ * \brief Specialization of class SharingTest for the case of fixed
582
+ * cardinalities using IntView as \a View1 and OccurBndsView as \a View2
583
+ */
584
+ template <>
585
+ class SharingTest<IntView,OccurBndsView> {
586
+ public:
587
+ /// Test whether the problem views in \a x0 contain shared views.
588
+ static bool shared(Space* home,
589
+ ViewArray<IntView>& xs, ViewArray<OccurBndsView>&) {
590
+ return xs.shared();
591
+ }
592
+ };
593
+
594
+ template <class View, class Card, bool isView>
595
+ ExecStatus
596
+ Bnd<View, Card, isView>::post(Space* home,
597
+ ViewArray<View>& x0,
598
+ ViewArray<Card>& k0,
599
+ bool all) {
600
+ bool cardfix = true;
601
+ bool nolbc = true;
602
+ for (int i = k0.size(); i--; ) {
603
+ cardfix &= k0[i].assigned();
604
+ nolbc &= (k0[i].min() == 0);
605
+ }
606
+
607
+ if (SharingTest<View,Card>::shared(home,x0,k0)) {
608
+ new (home) BndImp<View, Card, isView, true>
609
+ (home, x0, k0, cardfix, all, nolbc);
610
+ } else {
611
+ new (home) BndImp<View, Card, isView, false>
612
+ (home, x0, k0, cardfix, all, nolbc);
613
+ }
614
+ return ES_OK;
615
+ }
616
+
617
+ template <class View, class Card, bool isView, bool shared>
618
+ void
619
+ BndImp<View, Card, isView, shared>::flush(void){
620
+ delete lps;
621
+ lps = NULL;
622
+ delete ups;
623
+ ups = NULL;
624
+ }
625
+
626
+ }}}
627
+
628
+ // STATISTICS: int-prop
629
+