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,137 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2004
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-31 17:36:38 +0200 (Thu, 31 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3579 $
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 {
23
+
24
+ /**
25
+ * \defgroup FuncThrowInt Integer exceptions
26
+ * \ingroup FuncThrow
27
+ */
28
+
29
+ //@{
30
+
31
+ /// %Exception: %Variable created with empty domain
32
+ class VariableEmptyDomain : public Exception {
33
+ public:
34
+ /// Initialize with location \a l
35
+ VariableEmptyDomain(const char* l);
36
+ };
37
+
38
+ /// %Exception: %Variable created with values too large for domain
39
+ class VariableOutOfRangeDomain : public Exception {
40
+ public:
41
+ /// Initialize with location \a l
42
+ VariableOutOfRangeDomain(const char* l);
43
+ };
44
+
45
+
46
+ /// %Exception: Numerical overflow
47
+ class NumericalOverflow : public Exception {
48
+ public:
49
+ /// Initialize with location \a l
50
+ NumericalOverflow(const char* l);
51
+ };
52
+
53
+
54
+ /// %Exception: No arguments available in argument array
55
+ class ArgumentEmpty : public Exception {
56
+ public:
57
+ /// Initialize with location \a l
58
+ ArgumentEmpty(const char* l);
59
+ };
60
+
61
+ /// %Exception: Arguments are of different size
62
+ class ArgumentSizeMismatch : public Exception {
63
+ public:
64
+ /// Initialize with location \a l
65
+ ArgumentSizeMismatch(const char* l);
66
+ };
67
+
68
+ /// %Exception: Arguments contain same variable multiply
69
+ class ArgumentSame : public Exception {
70
+ public:
71
+ /// Initialize with location \a l
72
+ ArgumentSame(const char* l);
73
+ };
74
+
75
+ /// %Exception: Unknown relation passed as argument
76
+ class UnknownRelation : public Exception {
77
+ public:
78
+ /// Initialize with location \a l
79
+ UnknownRelation(const char* l);
80
+ };
81
+
82
+ /// %Exception: Unknown value or variable selection passed as argument
83
+ class UnknownBranching : public Exception {
84
+ public:
85
+ /// Initialize with location \a l
86
+ UnknownBranching(const char* l);
87
+ };
88
+
89
+ //@}
90
+
91
+
92
+
93
+
94
+
95
+ /*
96
+ * Classes for exceptions raised by integer module
97
+ *
98
+ */
99
+
100
+ inline
101
+ VariableEmptyDomain::VariableEmptyDomain(const char* l)
102
+ : Exception(l,"Attempt to create variable with empty domain") {}
103
+
104
+ inline
105
+ VariableOutOfRangeDomain::VariableOutOfRangeDomain(const char* l)
106
+ : Exception(l,"Attempt to create variable with wrong values") {}
107
+
108
+ inline
109
+ NumericalOverflow::NumericalOverflow(const char* l)
110
+ : Exception(l,"Integer overflow") {}
111
+
112
+
113
+ inline
114
+ ArgumentEmpty::ArgumentEmpty(const char* l)
115
+ : Exception(l,"Passed argument array has no elements") {}
116
+
117
+ inline
118
+ ArgumentSizeMismatch::ArgumentSizeMismatch(const char* l)
119
+ : Exception(l,"Sizes of argument arrays mismatch") {}
120
+
121
+ inline
122
+ ArgumentSame::ArgumentSame(const char* l)
123
+ : Exception(l,"Argument array contains same variable multiply") {}
124
+
125
+
126
+ inline
127
+ UnknownRelation::UnknownRelation(const char* l)
128
+ : Exception(l,"Unknown relation type") {}
129
+
130
+ inline
131
+ UnknownBranching::UnknownBranching(const char* l)
132
+ : Exception(l,"Unknown branching type") {}
133
+
134
+ }}
135
+
136
+ // STATISTICS: int-other
137
+
@@ -0,0 +1,708 @@
1
+ /*
2
+ * Main authors:
3
+ * Patrick Pekczynski <pekczynski@ps.uni-sb.de>
4
+ * Copyright:
5
+ * Patrick Pekczynski, 2004
6
+ *
7
+ * Last modified:
8
+ * $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
9
+ * $Revision: 3512 $
10
+ *
11
+ * This file is part of Gecode, the generic constraint
12
+ * development environment:
13
+ * http://www.gecode.org
14
+ *
15
+ * See the file "LICENSE" for information on usage and
16
+ * redistribution of this file, and for a
17
+ * DISCLAIMER OF ALL WARRANTIES.
18
+ *
19
+ */
20
+
21
+ #include "gecode/int/gcc.hh"
22
+
23
+ namespace Gecode { namespace Int { namespace GCC {
24
+
25
+ /**
26
+ * \brief Check whether gcc can be rewritten to distinct
27
+ *
28
+ * If the number of available values equals \f$ |x| \f$,
29
+ * we can rewrite gcc to distinct if every value occurs exactly once.
30
+ * If the number of available values is greater than \f$ |x| \f$,
31
+ * we can rewrite gcc to distinct if every value occurs at least zero times
32
+ * and atmost once, otherwise, there is no rewriting possible.
33
+ */
34
+
35
+ template<class Card>
36
+ forceinline bool
37
+ check_alldiff(int n, ViewArray<Card>& k){
38
+ int left = 0;
39
+ int right = k.size() - 1;
40
+ bool alldiff = true;
41
+
42
+ if (k.size() == 1) {
43
+ return (n == 1 && k[0].min() == 1 && k[0].max() == 1);
44
+ }
45
+ if (n == k.size()) {
46
+ while (left < right) {
47
+ alldiff &= (k[left].max() == 1 &&
48
+ k[left].min() == 1 &&
49
+ k[right].max() == 1 &&
50
+ k[left].max() == 1);
51
+ if (!alldiff) {
52
+ break;
53
+ }
54
+
55
+ left++;
56
+ right--;
57
+ }
58
+ } else {
59
+ if (n < k.size()) {
60
+ while (left < right) {
61
+ alldiff &= (k[left].max() == 1 &&
62
+ k[left].min() == 0 &&
63
+ k[right].max() == 1 &&
64
+ k[left].max() == 0);
65
+ if (!alldiff) {
66
+ break;
67
+ }
68
+ left++;
69
+ right--;
70
+ }
71
+ } else {
72
+ return false;
73
+ }
74
+ }
75
+ return alldiff;
76
+ }
77
+
78
+ /**
79
+ * \brief Compute the cardinality of the union of all variable domains in \a x.
80
+ *
81
+ */
82
+ template <class View>
83
+ forceinline int
84
+ x_card(ViewArray<View>& x, IntConLevel icl) {
85
+
86
+ int n = x.size();
87
+
88
+ GECODE_AUTOARRAY(ViewRanges<View>, xrange, n);
89
+ for (int i = n; i--; ){
90
+ ViewRanges<View> iter(x[i]);
91
+ xrange[i] = iter;
92
+ }
93
+
94
+ Gecode::Iter::Ranges::NaryUnion<ViewRanges<View> > drl(&xrange[0], x.size());
95
+ int r = 0;
96
+ if (icl == ICL_BND) {
97
+ int fstv = drl.min();
98
+ int lstv = 0;
99
+ for ( ; drl(); ++drl){
100
+ lstv = drl.max();
101
+ }
102
+ r = lstv - fstv + 1;
103
+
104
+ } else {
105
+
106
+ for ( ; drl(); ++drl){
107
+ for (int v = drl.min(); v <=drl.max(); v++) {
108
+ r ++;
109
+ }
110
+ }
111
+ }
112
+ return r;
113
+ }
114
+
115
+ /**
116
+ * \brief Initialize the cardinalities for the values in \a k.
117
+ *
118
+ */
119
+
120
+ template <class Card, class View>
121
+ forceinline void
122
+ initcard(Space* home, ViewArray<View>& x, ViewArray<Card>& k,
123
+ int lb, int ub,
124
+ IntConLevel icl) {
125
+ GECODE_AUTOARRAY(ViewRanges<View>, xrange, x.size());
126
+ for (int i = x.size(); i--; ){
127
+ ViewRanges<View> iter(x[i]);
128
+ xrange[i] = iter;
129
+ }
130
+
131
+ Iter::Ranges::NaryUnion<ViewRanges<View> > drl(&xrange[0], x.size());
132
+ if (icl == ICL_BND) {
133
+ int fstv = drl.min();
134
+ int lstv = 0;
135
+ for ( ; drl(); ++drl){
136
+ lstv = drl.max();
137
+ }
138
+ for (int i = fstv; i <= lstv; i++) {
139
+ k[i - fstv].init(home, lb, ub, i);
140
+ }
141
+ } else {
142
+ int idx = 0;
143
+ for ( ; drl(); ++drl){
144
+ for (int v = drl.min(); v <= drl.max(); v++){
145
+ k[idx].init(home, lb, ub, v);
146
+ idx++;
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
+
153
+ /**
154
+ * \brief Reset already existing cardinalities to zero.
155
+ *
156
+ */
157
+
158
+ template <class Card, class View, bool isView>
159
+ forceinline void
160
+ setcard(Space* home, ViewArray<View>& x, ViewArray<Card>& k,
161
+ int xmin, int xmax) {
162
+
163
+ int idx = 0;
164
+ for (int v = xmin; v <= xmax; v++) {
165
+ k[idx].card(v);
166
+ k[idx].counter(0);
167
+ idx++;
168
+ }
169
+
170
+ bool assigned = true;
171
+ for (int i = x.size(); i--; ) {
172
+ assigned &= x[i].assigned();
173
+ }
174
+
175
+ if (assigned) {
176
+ // check validity
177
+ int size = xmax - (xmin - 1);
178
+ GECODE_AUTOARRAY(int, count, size);
179
+ for (int i = size; i--; ) {
180
+ count[i] = 0;
181
+ }
182
+ for (int i = x.size(); i--; ) {
183
+ count[x[i].val() - xmin]++;
184
+ }
185
+ for (int i = k.size(); i--; ) {
186
+ if (k[i].min() > count[i]) {
187
+ home->fail();
188
+ }
189
+ }
190
+ }
191
+ }
192
+
193
+
194
+ /**
195
+ * \brief Check whether the cardinalities are consistent
196
+ *
197
+ * -# \f$\forall i\in\{0, \dots, |k| - 1\}: max(k_i) \leq |x|\f$
198
+ * -# \f$\neg\exists i\in\{0, \dots, |k| - 1\}: min(k_i) > |x|\f$
199
+ */
200
+
201
+ template<class Card, bool isView>
202
+ forceinline ExecStatus
203
+ card_cons(Space* home, ViewArray<Card>& k, int n, bool all) {
204
+ // this should be the required min and allowed max
205
+ int smin = 0;
206
+ int smax = 0;
207
+ int m = k.size();
208
+ for (int i = m; i--; ) {
209
+ int ci = k[i].counter();
210
+ if (ci > k[i].max() ) {
211
+ // std::cout << "more occurrences of "<<k[i].card()
212
+ // << " than allowed\n";
213
+ return ES_FAILED;
214
+ } else {
215
+ smax += (k[i].max() - ci);
216
+ if (ci < k[i].min()) {
217
+ smin += (k[i].min() - ci);
218
+ }
219
+ }
220
+ if (k[i].min() > n) {
221
+ // std::cout << "cannot satisfy requiremnts for " << k[i].card() << "!\n";
222
+ return ES_FAILED;
223
+ }
224
+ if (!k[i].assigned()) {
225
+ ModEvent me = k[i].lq(home, n);
226
+ if (me_failed(me)) {
227
+ // std::cout << "invalid\n";
228
+ return ES_FAILED;
229
+ }
230
+ }
231
+ }
232
+
233
+ // std::cout << "mi:" << smin << " x: "<< n << " ma:" << smax<<"\n";
234
+ if (n < smin) {
235
+ // std::cout << "not enough variables to satisfy min req\n";
236
+ return ES_FAILED;
237
+ }
238
+
239
+
240
+ // for (int i = 0; i < k.size(); i++) {
241
+ // std::cout << k[i] << " ";
242
+ // }
243
+
244
+
245
+ if (all && smax < n) {
246
+ // std::cout << "the maximal occurrence for the cardinalities cannot be satisfied\n";
247
+ return ES_FAILED;
248
+ }
249
+
250
+ return ES_OK;
251
+ }
252
+
253
+ /**
254
+ * \brief Template to post the global cardinality constraint
255
+ * for the different interfaces.
256
+ *
257
+ */
258
+ template<class View, class Card, bool isView>
259
+ forceinline void
260
+ post_template(Space* home, ViewArray<View>& x, ViewArray<Card>& k,
261
+ IntConLevel& icl, bool& all){
262
+
263
+ int n = x_card(x, icl);
264
+ bool rewrite = false;
265
+ if (!isView) {
266
+ rewrite = check_alldiff(n, k);
267
+ }
268
+
269
+ GECODE_ES_FAIL(home, (card_cons<Card, isView>(home, k, x.size(), all)));
270
+ if (!isView && rewrite) {
271
+ IntVarArgs xv(x.size());
272
+ for (int i = 0; i < x.size(); i++) {
273
+ IntVar iv(x[i]);
274
+ xv[i] = iv;
275
+ }
276
+ distinct(home, xv, icl);
277
+ } else {
278
+ switch (icl) {
279
+ case ICL_BND:
280
+ GECODE_ES_FAIL(home, (GCC::Bnd<View, Card, isView>::post(home, x, k, all)));
281
+ break;
282
+ case ICL_DOM:
283
+ GECODE_ES_FAIL(home, (GCC::Dom<View, Card, isView>::post(home, x, k, all)));
284
+ break;
285
+ default:
286
+ GECODE_ES_FAIL(home, (GCC::Val<View, Card, isView>::post(home, x, k, all)));
287
+ }
288
+ }
289
+ }
290
+
291
+ }}
292
+
293
+ using namespace Int;
294
+ using namespace Int::GCC;
295
+ using namespace Support;
296
+
297
+ template <class View>
298
+ void initCV(Space* home,
299
+ const IntArgs& ia, const ViewArray<View>& x,
300
+ int l, ViewArray<OccurBndsView>& a,
301
+ int iasize, int val, int nov,
302
+ int min, int max,
303
+ int unspec_low, int unspec_up) {
304
+
305
+ int n = x.size();
306
+
307
+ GECODE_AUTOARRAY(ViewRanges<View>, xrange, n);
308
+ for (int i = n; i--; ){
309
+ ViewRanges<View> iter(x[i]);
310
+ xrange[i] = iter;
311
+ }
312
+
313
+ Gecode::Iter::Ranges::NaryUnion<ViewRanges<View> >
314
+ drl(&xrange[0], x.size());
315
+ Gecode::Iter::Ranges::Cache<
316
+ Gecode::Iter::Ranges::
317
+ NaryUnion<ViewRanges<View> > > crl(drl);
318
+
319
+ int c = 0;
320
+ int r = 0;
321
+
322
+ GECODE_AUTOARRAY(bool, indom, (max - (min - 1)));
323
+ for (int i = max - (min - 1); i--; ) {
324
+ indom[i] = false;
325
+ }
326
+ for ( ; crl(); ++crl) {
327
+ for (int v = crl.min(); v <= crl.max(); v++) {
328
+ indom[v - min] = true;
329
+ }
330
+ }
331
+
332
+ int xmin = min;
333
+ int xmax = max;
334
+ // mark those values that are specified
335
+ min = std::min(xmin, ia[0]);
336
+ max = std::max(xmax, ia[(val - 1) * 3]);
337
+
338
+ for (int v = min; v <= max; v++) {
339
+ if (c > l - 1) {
340
+ break;
341
+ }
342
+ // value is in a variable domain
343
+ if (v >= xmin && indom[v - xmin]) {
344
+ if (r < iasize) {
345
+ if (v == ia[r]) {
346
+ // value is specified with cardinalities
347
+ // checking should be outsourced to gcc.cc
348
+ if (ia[r + 1] > ia[r + 2]) {
349
+ throw ArgumentSizeMismatch("Int::gcc");
350
+ }
351
+
352
+ a[c].card(v);
353
+ a[c].counter(0);
354
+ a[c].min(ia[r + 1]);
355
+ a[c].max(ia[r + 2]);
356
+ c++;
357
+ r += 3;
358
+ } else {
359
+ // value is not specified with cardinalities
360
+ // the value is unspecified
361
+ a[c].card(v);
362
+ a[c].counter(0);
363
+ a[c].min(unspec_low);
364
+ a[c].max(unspec_up);
365
+ c++;
366
+ }
367
+ } else {
368
+ // there are more values in the variable domains
369
+ // than specified
370
+ a[c].card(v);
371
+ a[c].counter(0);
372
+ a[c].min(unspec_low);
373
+ a[c].max(unspec_up);
374
+ c++;
375
+ }
376
+ } else {
377
+ // the value is not in a variable domain of the current assignment
378
+ if (r < iasize) {
379
+ // but it is specified
380
+ if (v == ia[r]) {
381
+ // checking should be outsourced to gcc.cc
382
+ if (ia[r + 1] > ia[r + 2]) {
383
+ throw ArgumentSizeMismatch("Int::gcc");
384
+ }
385
+
386
+ a[c].card(v);
387
+ a[c].counter(0);
388
+ a[c].min(ia[r + 1]);
389
+ a[c].max(ia[r + 2]);
390
+ c++;
391
+ r += 3;
392
+ } else {
393
+ // the value is unspecified
394
+ a[c].card(v);
395
+ a[c].counter(0);
396
+ a[c].min(unspec_low);
397
+ a[c].max(unspec_up);
398
+ c++;
399
+ }
400
+ } else {
401
+ // there are more values in the variable domains
402
+ // than specified
403
+ a[c].card(v);
404
+ a[c].counter(0);
405
+ a[c].min(unspec_low);
406
+ a[c].max(unspec_up);
407
+ c++;
408
+ }
409
+ }
410
+ }
411
+
412
+ if (c < l) {
413
+ for ( ; r < iasize; r+=3) {
414
+ assert(0 <= c && c < l);
415
+ a[c].card(ia[r]);
416
+ a[c].counter(0);
417
+ a[c].min(unspec_low);
418
+ a[c].max(unspec_up);
419
+ c++;
420
+ r+=3;
421
+ }
422
+ }
423
+ }
424
+
425
+ // Interfacing gcc with fixed cardinalities
426
+ void gcc(Space* home, const IntVarArgs& x, const IntArgs& c,
427
+ int m, int unspec_low, int unspec_up, int min, int max,
428
+ IntConLevel icl) {
429
+ if (home->failed()) {
430
+ return;
431
+ }
432
+
433
+ ViewArray<IntView> x0(home, x);
434
+ if (x0.shared()) {
435
+ throw ArgumentSame("Int::GCC");
436
+ }
437
+
438
+
439
+ ViewArray<IntView> xv(home, x);
440
+
441
+ int iasize = m;
442
+ int val = m / 3;
443
+ int nov = max - (min - 1);
444
+
445
+ ViewArray<OccurBndsView> cv(home, std::max(nov, val));
446
+
447
+ initCV(home, c, xv,
448
+ std::max(nov, val), cv,
449
+ iasize, val, nov,
450
+ min, max,
451
+ unspec_low, unspec_up);
452
+
453
+ // compute number of zero entries
454
+ int z = 0;
455
+ for (int j = cv.size(); j--; ){
456
+ if (cv[j].max() == 0){
457
+ z++;
458
+ }
459
+ }
460
+
461
+ bool all = (m == (max) - (min - 1));
462
+ // if there are zero entries
463
+ if (z > 0) {
464
+
465
+ // reduce the occurences
466
+ ViewArray<OccurBndsView> red(home, cv.size() - z);
467
+ IntArgs rem(z);
468
+ z = 0;
469
+ int c = 0;
470
+ int r = red.size() - 1;
471
+ for (int j = cv.size(); j--;) {
472
+ if (cv[j].max() == 0){
473
+ rem[z] = cv[j].card();
474
+ z++;
475
+ } else {
476
+ red[r]= cv[j];
477
+ r--;
478
+ }
479
+ c++;
480
+ }
481
+
482
+ IntSet zero(&rem[0], z);
483
+ int n = xv.size();
484
+ for (int i = n; i--; ) {
485
+ IntSetRanges remzero(zero);
486
+ GECODE_ME_FAIL(home, xv[i].minus(home, remzero));
487
+ }
488
+ GCC::post_template<IntView,OccurBndsView,false>(home, xv, red, icl, all);
489
+ } else {
490
+ GCC::post_template<IntView,OccurBndsView,false>(home, xv, cv, icl, all);
491
+ }
492
+ }
493
+
494
+ void gcc(Space* home, const IntVarArgs& x, const IntArgs& c,
495
+ int m, int unspec, int min, int max,
496
+ IntConLevel icl) {
497
+ gcc(home, x, c, m, 0, unspec, min, max, icl);
498
+ }
499
+
500
+ void gcc(Space* home, const IntVarArgs& x, int lb, int ub,
501
+ IntConLevel icl) {
502
+ if (home->failed()) {
503
+ return;
504
+ }
505
+
506
+ ViewArray<IntView> x0(home, x);
507
+ if (x0.shared()) {
508
+ throw ArgumentSame("Int::GCC");
509
+ }
510
+
511
+ ViewArray<IntView> xv(home,x);
512
+
513
+ int values = x_card(xv, icl);
514
+
515
+ ViewArray<OccurBndsView> c(home, values);
516
+ GCC::initcard(home, xv, c, lb, ub, icl);
517
+ bool all = true;
518
+ GCC::post_template<IntView, OccurBndsView, false>(home, xv, c, icl, all);
519
+ }
520
+
521
+
522
+ void gcc(Space* home, const IntVarArgs& x, int ub, IntConLevel icl) {
523
+ gcc(home, x, ub, ub, icl);
524
+ }
525
+
526
+ // Interfacing gcc with cardinality variables
527
+
528
+ void gcc(Space* home, const IntVarArgs& x, const IntVarArgs& c,
529
+ int min, int max, IntConLevel icl) {
530
+
531
+ if (home->failed()) {
532
+ return;
533
+ }
534
+
535
+ ViewArray<IntView> xv(home, x);
536
+
537
+ linear(home, c, IRT_EQ, xv.size());
538
+
539
+ ViewArray<CardView> cv(home, c);
540
+
541
+ int interval = max - min + 1;
542
+
543
+ GECODE_AUTOARRAY(bool, done, interval);
544
+ for (int i = 0; i < interval; i++) {
545
+ done[i] = false;
546
+ }
547
+
548
+ GECODE_AUTOARRAY(ViewRanges<IntView>, xrange, xv.size());
549
+ for (int i = xv.size(); i--; ){
550
+ ViewRanges<IntView> iter(xv[i]);
551
+ xrange[i] = iter;
552
+ }
553
+
554
+ Gecode::Iter::Ranges::NaryUnion<ViewRanges<IntView> >
555
+ drl(&xrange[0], xv.size());
556
+ Gecode::Iter::Ranges::Cache<
557
+ Gecode::Iter::Ranges::
558
+ NaryUnion<ViewRanges<IntView> > > crl(drl);
559
+ for ( ; crl(); ++crl) {
560
+ for (int v = crl.min(); v <= crl.max(); v++) {
561
+ done[v - min] = true;
562
+ }
563
+ }
564
+
565
+ for (int i = 0; i < interval; i++) {
566
+ if (!done[i]) {
567
+ if (icl == ICL_DOM) {
568
+ GECODE_ME_FAIL(home, cv[i].eq(home, 0));
569
+ }
570
+ }
571
+ }
572
+
573
+ GCC::setcard<CardView, IntView, true>(home, xv, cv, min, max);
574
+
575
+ int sum_min = 0;
576
+ int sum_max = 0;
577
+ IntArgs dx(cv.size());
578
+ for (int i = 0; i < cv.size(); i++) {
579
+ dx[i] = cv[i].card();
580
+ sum_min += cv[i].card() * cv[i].min();
581
+ sum_max += cv[i].card() * cv[i].max();
582
+ }
583
+ bool all = true;
584
+ GCC::post_template<IntView, CardView, true>(home, xv, cv, icl, all);
585
+ }
586
+
587
+ void gcc(Space* home,
588
+ const IntVarArgs& x, const IntArgs& v, const IntVarArgs& c,
589
+ int m, int unspec, bool all, int min, int max,
590
+ IntConLevel icl) {
591
+ gcc(home, x, v, c, m, 0, unspec, all, min, max, icl);
592
+ }
593
+
594
+ void gcc(Space* home,
595
+ const IntVarArgs& x, const IntArgs& v, const IntVarArgs& c,
596
+ int m, int unspec_low, int unspec_up, bool all, int min, int max,
597
+ IntConLevel icl) {
598
+
599
+ if (m != c.size()) {
600
+ throw ArgumentSizeMismatch("Int::gcc");
601
+ }
602
+ if (home->failed()) {
603
+ return;
604
+ }
605
+
606
+ ViewArray<IntView> xv(home, x);
607
+
608
+ int interval = max - (min - 1);
609
+
610
+ GECODE_AUTOARRAY(bool, done, interval);
611
+ for (int i = 0; i < interval; i++) {
612
+ done[i] = false;
613
+ }
614
+
615
+ GECODE_AUTOARRAY(ViewRanges<IntView>, xrange, xv.size());
616
+ for (int i = xv.size(); i--; ){
617
+ ViewRanges<IntView> iter(xv[i]);
618
+ xrange[i] = iter;
619
+ }
620
+
621
+ Gecode::Iter::Ranges::NaryUnion<ViewRanges<IntView> >
622
+ drl(&xrange[0], xv.size());
623
+ Gecode::Iter::Ranges::Cache<
624
+ Gecode::Iter::Ranges::
625
+ NaryUnion<ViewRanges<IntView> > > crl(drl);
626
+ for ( ; crl(); ++crl) {
627
+ for (int v = crl.min(); v <= crl.max(); v++) {
628
+ done[v - min] = true;
629
+ }
630
+ }
631
+
632
+ if (all) {
633
+ linear(home, c, IRT_EQ, xv.size());
634
+ for (int i = 0; i < interval; i++) {
635
+ done[i] = true;
636
+ }
637
+ } else {
638
+ linear(home, c, IRT_LQ, xv.size());
639
+ }
640
+
641
+ // iterating over cardinality variables
642
+ int ci = 0;
643
+ // iterating over the new cardvars
644
+ int cvi = 0;
645
+ IntVarArgs cv(interval);
646
+ for (int i = min; i <= max; i++) {
647
+ // value in var domain
648
+ if (done[i - min]) {
649
+ if (ci < m) {
650
+ // specified wih cardinalities
651
+ if (i == v[ci]) {
652
+ cv[cvi] = c[ci];
653
+ ci++;
654
+ cvi++;
655
+ } else {
656
+ // value in domain but unspecified
657
+ IntVar iv(home, unspec_low, unspec_up);
658
+ cv[cvi] = iv;
659
+ cvi++;
660
+ }
661
+ } else {
662
+ // in domain but after the specification
663
+ IntVar iv(home, unspec_low, unspec_up);
664
+ cv[cvi] = iv;
665
+ cvi++;
666
+ }
667
+ } else {
668
+ // not in the variable domain of the current assignment
669
+ if (ci < m) {
670
+ // but is specified
671
+ if (i == v[ci]) {
672
+ cv[cvi] = c[ci];
673
+ ci++;
674
+ cvi++;
675
+ } else {
676
+ // unspecified and not in x
677
+ IntVar iv(home, unspec_low, unspec_up);
678
+ cv[cvi] = iv;
679
+ cvi++;
680
+ }
681
+ } else {
682
+ // more values than specified
683
+ IntVar iv(home, unspec_low, unspec_up);
684
+ cv[cvi] = iv;
685
+ cvi++;
686
+ }
687
+ }
688
+ }
689
+
690
+ if (ci < m) {
691
+ // still values left
692
+ for (; ci < m; ci++) {
693
+ cv[cvi] = c[ci];
694
+ ci++;
695
+ cvi++;
696
+ }
697
+ }
698
+
699
+
700
+ ViewArray<CardView> cardv(home, cv);
701
+
702
+ GCC::setcard<CardView, IntView, true>(home, xv, cardv, min, max);
703
+ GCC::post_template<IntView, CardView, true>(home, xv, cardv, icl, all);
704
+ }
705
+ }
706
+
707
+
708
+ // STATISTICS: int-post