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,52 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2002
7
+ *
8
+ * Last modified:
9
+ * $Date: 2005-10-27 17:04:11 +0200 (Thu, 27 Oct 2005) $ by $Author: schulte $
10
+ * $Revision: 2418 $
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 {
23
+
24
+ forceinline
25
+ BoolVar::BoolVar(void) {}
26
+
27
+ forceinline
28
+ BoolVar::BoolVar(Space* home, int min, int max)
29
+ : IntVar(home,min,max) {
30
+ if ((min < 0) || (max > 1))
31
+ throw Int::VariableOutOfRangeDomain("BoolVar");
32
+ }
33
+
34
+ forceinline
35
+ BoolVar::BoolVar(const Int::BoolView& b)
36
+ : IntVar(b) {}
37
+
38
+ forceinline void
39
+ BoolVar::update(Space* home, bool share, BoolVar& x) {
40
+ var = x.var->copy(home,share);
41
+ }
42
+
43
+ forceinline
44
+ BoolVar::BoolVar(const IntVar& x)
45
+ : IntVar(x) {
46
+ if ((x.min() < 0) || (x.max() > 1))
47
+ throw Int::VariableOutOfRangeDomain("BoolVar");
48
+ }
49
+
50
+ }
51
+
52
+ // STATISTICS: int-var
@@ -0,0 +1,65 @@
1
+ /*
2
+ * CAUTION:
3
+ * This file has been automatically generated.
4
+ * Do not edit, edit the file "../trunk/gecode/int/var-imp.vis" instead.
5
+ *
6
+ * This file contains generated code fragments which are
7
+ * copyrighted as follows:
8
+ *
9
+ * Main author:
10
+ * Christian Schulte <schulte@gecode.org>
11
+ *
12
+ * Copyright:
13
+ * Christian Schulte, 2006
14
+ *
15
+ * The generated code fragments are part of Gecode, the generic
16
+ * constraint development environment:
17
+ * http://www.gecode.org
18
+ *
19
+ * See the file "LICENSE" for information on usage and
20
+ * redistribution of this file, and for a
21
+ * DISCLAIMER OF ALL WARRANTIES.
22
+ *
23
+ */
24
+
25
+
26
+ namespace Gecode { namespace Int {
27
+
28
+
29
+
30
+ /*
31
+ * The variable processor for IntVarImpBase
32
+ *
33
+ */
34
+
35
+ void
36
+ IntVarImpBase::Processor::process(Space* home, VarBase* _x) {
37
+ // Process modified variables
38
+ Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff>* x =
39
+ static_cast<Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff>*>(_x);
40
+ do {
41
+ switch (x->modevent()) {
42
+ case ME_INT_VAL:
43
+ x->process(home);
44
+ break;
45
+ case ME_INT_BND:
46
+ // Conditions: BND DOM
47
+ x->process(home,PC_INT_BND,PC_INT_DOM,ME_INT_BND);
48
+ break;
49
+ case ME_INT_DOM:
50
+ // Conditions: DOM
51
+ x->process(home,PC_INT_DOM,PC_INT_DOM,ME_INT_DOM);
52
+ break;
53
+ default: GECODE_NEVER;
54
+ }
55
+ x = x->next();
56
+ } while (x != NULL);
57
+ }
58
+
59
+
60
+ IntVarImpBase::Processor IntVarImpBase::p;
61
+
62
+
63
+ }}
64
+
65
+ // STATISTICS: int-var
@@ -0,0 +1,191 @@
1
+ /*
2
+ * CAUTION:
3
+ * This file has been automatically generated.
4
+ * Do not edit, edit the file "../trunk/gecode/int/var-imp.vis" instead.
5
+ *
6
+ * This file contains generated code fragments which are
7
+ * copyrighted as follows:
8
+ *
9
+ * Main author:
10
+ * Christian Schulte <schulte@gecode.org>
11
+ *
12
+ * Copyright:
13
+ * Christian Schulte, 2006
14
+ *
15
+ * The generated code fragments are part of Gecode, the generic
16
+ * constraint development environment:
17
+ * http://www.gecode.org
18
+ *
19
+ * See the file "LICENSE" for information on usage and
20
+ * redistribution of this file, and for a
21
+ * DISCLAIMER OF ALL WARRANTIES.
22
+ *
23
+ */
24
+
25
+
26
+ namespace Gecode { namespace Int {
27
+
28
+ /**
29
+ * \defgroup TaskActorIntMEPC Integer modification events and propagation conditions
30
+ * \ingroup TaskActorInt
31
+ */
32
+
33
+ //@{
34
+ /// Domain operation has resulted in failure
35
+ const Gecode::ModEvent ME_INT_FAILED = Gecode::ME_GEN_FAILED;
36
+
37
+ /// Domain operation has not changed domain
38
+ const Gecode::ModEvent ME_INT_NONE = Gecode::ME_GEN_NONE;
39
+
40
+ /// Domain operation has resulted in a value (assigned variable)
41
+ const Gecode::ModEvent ME_INT_VAL = Gecode::ME_GEN_ASSIGNED;
42
+
43
+ /**
44
+ * \brief Domain operation has changed the minimum or maximum of the domain
45
+ *
46
+ * Note that this implies that the domain has not resulted in a value.
47
+ *
48
+ * If a propagator subscribes to this variable, it will be processed
49
+ * assuming a ME_INT_BND modification event.
50
+ */
51
+ const Gecode::ModEvent ME_INT_BND = Gecode::ME_GEN_ASSIGNED + 1;
52
+
53
+ /**
54
+ * \brief Domain operation has changed the domain
55
+ *
56
+ * Note that this implies that the domain has not resulted in a value
57
+ * and that also the minimum and maximum of the domain have not changed.
58
+ */
59
+
60
+
61
+ const Gecode::ModEvent ME_INT_DOM = Gecode::ME_GEN_ASSIGNED + 2;
62
+
63
+ /**
64
+ * \brief Propagate when a view becomes assigned (single value)
65
+ *
66
+ * If a propagator \a p depends on a view \a x with propagation
67
+ * condition PC_INT_VAL, then \a p is propagated when a domain
68
+ * update operation on \a x returns the modification event ME_INT_VAL.
69
+ */
70
+ const Gecode::PropCond PC_INT_VAL = Gecode::PC_GEN_ASSIGNED;
71
+
72
+ /**
73
+ * \brief Propagate when minimum or maximum of a view changes
74
+ *
75
+ * If a propagator \a p depends on a view \a x with propagation
76
+ * condition PC_INT_BND, then \a p is propagated when a domain
77
+ * update operation on \a x returns the modification events ME_INT_VAL
78
+ * or ME_INT_BND.
79
+ */
80
+ const Gecode::PropCond PC_INT_BND = Gecode::PC_GEN_ASSIGNED + 1;
81
+
82
+ /**
83
+ * \brief Propagate when domain changes
84
+ *
85
+ * If a propagator \a p depends on a view \a x with propagation
86
+ * condition PC_INT_DOM, then \a p is propagated when a domain
87
+ * update operation on \a x returns the modification event ME_INT_VAL,
88
+ * ME_INT_BND, or ME_INT_DOM.
89
+ */
90
+ const Gecode::PropCond PC_INT_DOM = Gecode::PC_GEN_ASSIGNED + 2;
91
+
92
+ //@}
93
+
94
+ /// Modification event difference for Int-variable implementations
95
+ class IntMeDiff {
96
+ public:
97
+ /// Return difference when changing modification event \a me2 to \a me1
98
+ ModEvent operator()(ModEvent me1, ModEvent me2) const;
99
+ };
100
+
101
+ /// Base-class for Int-variable implementations
102
+ class IntVarImpBase : public Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff> {
103
+ protected:
104
+ /// Variable procesor for variables of this type
105
+ class Processor : public Gecode::VarTypeProcessor<VTI_INT,PC_INT_DOM,IntMeDiff> {
106
+ public:
107
+ /// Process modified variables linked from \a x
108
+ GECODE_INT_EXPORT virtual void process(Space* home, VarBase* x);
109
+ };
110
+ /// The processor used
111
+ GECODE_INT_EXPORT static Processor p;
112
+ /// Constructor for cloning \a x
113
+ IntVarImpBase(Space* home, bool share, IntVarImpBase& x);
114
+ public:
115
+ /// Constructor for creating variable
116
+ IntVarImpBase(Space* home);
117
+ /// \name Dependencies
118
+ //@{
119
+ /** \brief Subscribe propagator \a p with propagation condition \a pc to variable
120
+ *
121
+ * In case \a process is false, the propagator is just subscribed but
122
+ * not processed for execution (this must be used when creating
123
+ * subscriptions during propagation).
124
+ *
125
+ * In case the variable is assigned (that is, \a assigned is
126
+ * true), the subscribing propagator is processed for execution.
127
+ * Otherwise, the propagator subscribes and is processed for execution
128
+ * with modification event \a me provided that \a pc is different
129
+ * from \a PC_GEN_ASSIGNED.
130
+ */
131
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool assigned, bool process);
132
+ /// Notify that variable implementation has been modified with modification event \a me
133
+ void notify(Space* home, ModEvent me);
134
+ //@}
135
+
136
+
137
+ };
138
+
139
+
140
+ forceinline ModEvent
141
+ IntMeDiff::operator()(ModEvent me1, ModEvent me2) const {
142
+ const int med = (
143
+ (
144
+ ((ME_INT_NONE ^ ME_INT_NONE) << 0) | // [ME_INT_NONE][ME_INT_NONE]
145
+ ((ME_INT_VAL ^ ME_INT_VAL) << 2) | // [ME_INT_NONE][ME_INT_VAL]
146
+ ((ME_INT_BND ^ ME_INT_BND) << 4) | // [ME_INT_NONE][ME_INT_BND]
147
+ ((ME_INT_DOM ^ ME_INT_DOM) << 6) // [ME_INT_NONE][ME_INT_DOM]
148
+ ) |
149
+ (
150
+ ((ME_INT_NONE ^ ME_INT_VAL) << 8) | // [ME_INT_VAL][ME_INT_NONE]
151
+ ((ME_INT_VAL ^ ME_INT_VAL) << 10) | // [ME_INT_VAL][ME_INT_VAL]
152
+ ((ME_INT_BND ^ ME_INT_VAL) << 12) | // [ME_INT_VAL][ME_INT_BND]
153
+ ((ME_INT_DOM ^ ME_INT_VAL) << 14) // [ME_INT_VAL][ME_INT_DOM]
154
+ ) |
155
+ (
156
+ ((ME_INT_NONE ^ ME_INT_BND) << 16) | // [ME_INT_BND][ME_INT_NONE]
157
+ ((ME_INT_VAL ^ ME_INT_VAL) << 18) | // [ME_INT_BND][ME_INT_VAL]
158
+ ((ME_INT_BND ^ ME_INT_BND) << 20) | // [ME_INT_BND][ME_INT_BND]
159
+ ((ME_INT_DOM ^ ME_INT_BND) << 22) // [ME_INT_BND][ME_INT_DOM]
160
+ ) |
161
+ (
162
+ ((ME_INT_NONE ^ ME_INT_DOM) << 24) | // [ME_INT_DOM][ME_INT_NONE]
163
+ ((ME_INT_VAL ^ ME_INT_VAL) << 26) | // [ME_INT_DOM][ME_INT_VAL]
164
+ ((ME_INT_BND ^ ME_INT_BND) << 28) | // [ME_INT_DOM][ME_INT_BND]
165
+ ((ME_INT_DOM ^ ME_INT_DOM) << 30) // [ME_INT_DOM][ME_INT_DOM]
166
+ )
167
+ );
168
+ return (((med >> (me1 << 3)) >> (me2 << 1)) & 3);
169
+ }
170
+
171
+ forceinline
172
+ IntVarImpBase::IntVarImpBase(Space* home)
173
+ : Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff>(home) {}
174
+
175
+ forceinline
176
+ IntVarImpBase::IntVarImpBase(Space* home, bool share, IntVarImpBase& x)
177
+ : Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff>(home,share,x) {}
178
+
179
+ forceinline void
180
+ IntVarImpBase::subscribe(Space* home, Propagator* p, PropCond pc, bool assigned, bool process) {
181
+ Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff>::subscribe(home,p,pc,assigned,ME_INT_BND,process);
182
+ }
183
+
184
+ forceinline void
185
+ IntVarImpBase::notify(Space* home, ModEvent me) {
186
+ Gecode::Variable<VTI_INT,PC_INT_DOM,IntMeDiff>::notify(home,me);
187
+ }
188
+
189
+ }}
190
+
191
+ // STATISTICS: int-var
@@ -0,0 +1,361 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2002
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-25 10:43:21 +0200 (Fri, 25 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3568 $
11
+ *
12
+ * This file is part of Gecode, the generic constraint
13
+ * development environment:
14
+ * http://www.gecode.org
15
+ *
16
+ * See the file "LICENSE" for information on usage and
17
+ * redistribution of this file, and for a
18
+ * DISCLAIMER OF ALL WARRANTIES.
19
+ *
20
+ */
21
+
22
+ #include "gecode/int.hh"
23
+
24
+ #include "gecode/limits.hh"
25
+
26
+ #include "gecode/int/var/imp-body.icc"
27
+
28
+ namespace Gecode { namespace Int {
29
+
30
+ forceinline bool
31
+ IntVarImp::closer_min(int n) const {
32
+ unsigned int l = n - dom.min();
33
+ unsigned int r = dom.max() - n;
34
+ return l < r;
35
+ }
36
+
37
+ int
38
+ IntVarImp::med(void) const {
39
+ // Computes the median
40
+ if (fst() == NULL)
41
+ return (dom.min()+dom.max())/2;
42
+ unsigned int i = size() / 2;
43
+ const RangeList* p = NULL;
44
+ const RangeList* c = fst();
45
+ while (i >= c->width()) {
46
+ i -= c->width();
47
+ const RangeList* n=c->next(p); p=c; c=n;
48
+ }
49
+ return c->min() + static_cast<int>(i);
50
+ }
51
+
52
+ bool
53
+ IntVarImp::in_full(int m) const {
54
+ if (closer_min(m)) {
55
+ const RangeList* p = NULL;
56
+ const RangeList* c = fst();
57
+ while (m > c->max()) {
58
+ const RangeList* n=c->next(p); p=c; c=n;
59
+ }
60
+ return (m >= c->min());
61
+ } else {
62
+ const RangeList* n = NULL;
63
+ const RangeList* c = lst();
64
+ while (m < c->min()) {
65
+ const RangeList* p=c->prev(n); n=c; c=p;
66
+ }
67
+ return (m <= c->max());
68
+ }
69
+ }
70
+
71
+ /*
72
+ * "Standard" tell operations
73
+ *
74
+ */
75
+
76
+ void
77
+ IntVarImp::lq_full(Space* home, int m) {
78
+ assert((m >= dom.min()) && (m <= dom.max()));
79
+ if (range()) { // Is already range...
80
+ dom.max(m);
81
+ if (assigned()) goto notify_val;
82
+ } else if (m < fst()->next(NULL)->min()) { // Becomes range...
83
+ dom.max(std::min(m,fst()->max()));
84
+ fst()->dispose(home,NULL,lst());
85
+ fst(NULL); holes = 0;
86
+ if (assigned()) goto notify_val;
87
+ } else { // Stays non-range...
88
+ RangeList* n = NULL;
89
+ RangeList* c = lst();
90
+ unsigned int h = 0;
91
+ while (m < c->min()) {
92
+ RangeList* p = c->prev(n); c->fix(n);
93
+ h += (c->min() - p->max() - 1);
94
+ n=c; c=p;
95
+ }
96
+ holes -= h;
97
+ int max_c = std::min(m,c->max());
98
+ dom.max(max_c); c->max(max_c);
99
+ if (c != lst()) {
100
+ lst()->dispose(home,n);
101
+ c->next(n,NULL); lst(c);
102
+ }
103
+ }
104
+ notify(home,ME_INT_BND);
105
+ return;
106
+ notify_val:
107
+ notify(home,ME_INT_VAL);
108
+ }
109
+
110
+ void
111
+ IntVarImp::gq_full(Space* home, int m) {
112
+ assert((m >= dom.min()) && (m <= dom.max()));
113
+ if (range()) { // Is already range...
114
+ dom.min(m);
115
+ if (assigned()) goto notify_val;
116
+ } else if (m > lst()->prev(NULL)->max()) { // Becomes range...
117
+ dom.min(std::max(m,lst()->min()));
118
+ fst()->dispose(home,NULL,lst());
119
+ fst(NULL); holes = 0;
120
+ if (assigned()) goto notify_val;
121
+ } else { // Stays non-range...
122
+ RangeList* p = NULL;
123
+ RangeList* c = fst();
124
+ unsigned int h = 0;
125
+ while (m > c->max()) {
126
+ RangeList* n = c->next(p); c->fix(n);
127
+ h += (n->min() - c->max() - 1);
128
+ p=c; c=n;
129
+ }
130
+ holes -= h;
131
+ int min_c = std::max(m,c->min());
132
+ dom.min(min_c); c->min(min_c);
133
+ if (c != fst()) {
134
+ fst()->dispose(home,p);
135
+ c->prev(p,NULL); fst(c);
136
+ }
137
+ }
138
+ notify(home,ME_INT_BND);
139
+ return;
140
+ notify_val:
141
+ notify(home,ME_INT_VAL);
142
+ }
143
+
144
+ void
145
+ IntVarImp::eq_full(Space* home, int m) {
146
+ if (!range()) {
147
+ RangeList* p = NULL;
148
+ RangeList* c = fst();
149
+ while (m > c->max()) {
150
+ RangeList* n=c->next(p); c->fix(n); p=c; c=n;
151
+ }
152
+ if (m < c->min()) {
153
+ dom.min(Limits::Int::int_max+1);
154
+ return;
155
+ }
156
+ while (c != NULL) {
157
+ RangeList* n=c->next(p); c->fix(n); p=c; c=n;
158
+ }
159
+ assert(p == lst());
160
+ fst()->dispose(home,p);
161
+ fst(NULL); holes = 0;
162
+ }
163
+ dom.min(m); dom.max(m);
164
+ notify(home,ME_INT_VAL);
165
+ }
166
+
167
+ ModEvent
168
+ IntVarImp::nq_full(Space* home, int m) {
169
+ assert(!((m < dom.min()) || (m > dom.max())));
170
+ if (range()) {
171
+ if ((m == dom.min()) && (m == dom.max()))
172
+ return ME_INT_FAILED;
173
+ if (m == dom.min()) {
174
+ dom.min(m+1); goto notify_bnd_or_val;
175
+ }
176
+ if (m == dom.max()) {
177
+ dom.max(m-1); goto notify_bnd_or_val;
178
+ }
179
+ RangeList* f = new (home) RangeList(dom.min(),m-1);
180
+ RangeList* l = new (home) RangeList(m+1,dom.max());
181
+ f->prevnext(NULL,l);
182
+ l->prevnext(f,NULL);
183
+ fst(f); lst(l); holes = 1;
184
+ } else if (m < fst()->next(NULL)->min()) { // Concerns the first range...
185
+ int f_max = fst()->max();
186
+ if (m > f_max)
187
+ return ME_INT_NONE;
188
+ int f_min = dom.min();
189
+ if ((m == f_min) && (m == f_max)) {
190
+ RangeList* f_next = fst()->next(NULL);
191
+ dom.min(f_next->min());
192
+ if (f_next == lst()) { // Turns into range
193
+ // Works as at the ends there are only NULL pointers
194
+ fst()->dispose(home,f_next);
195
+ fst(NULL); holes = 0;
196
+ goto notify_bnd_or_val;
197
+ } else { // Remains non-range
198
+ f_next->prev(fst(),NULL);
199
+ fst()->dispose(home); fst(f_next);
200
+ holes -= dom.min() - f_min - 1;
201
+ goto notify_bnd;
202
+ }
203
+ } else if (m == f_min) {
204
+ dom.min(m+1); fst()->min(m+1);
205
+ goto notify_bnd;
206
+ } else if (m == f_max) {
207
+ fst()->max(m-1); holes += 1;
208
+ } else {
209
+ // Create new hole
210
+ RangeList* f = new (home) RangeList(f_min,m-1);
211
+ f->prevnext(NULL,fst());
212
+ fst()->min(m+1); fst()->prev(NULL,f);
213
+ fst(f); holes += 1;
214
+ }
215
+ } else if (m > lst()->prev(NULL)->max()) { // Concerns the last range...
216
+ int l_min = lst()->min();
217
+ if (m < l_min)
218
+ return ME_INT_NONE;
219
+ int l_max = dom.max();
220
+ if ((m == l_min) && (m == l_max)) {
221
+ RangeList* l_prev = lst()->prev(NULL);
222
+ dom.max(l_prev->max());
223
+ if (l_prev == fst()) {
224
+ // Turns into range
225
+ l_prev->dispose(home,lst());
226
+ fst(NULL); holes = 0;
227
+ goto notify_bnd_or_val;
228
+ } else { // Remains non-range
229
+ l_prev->next(lst(),NULL);
230
+ lst()->dispose(home); lst(l_prev);
231
+ holes -= l_max - dom.max() - 1;
232
+ goto notify_bnd;
233
+ }
234
+ } else if (m == l_max) {
235
+ dom.max(m-1); lst()->max(m-1);
236
+ goto notify_bnd;
237
+ } else if (m == l_min) {
238
+ lst()->min(m+1); holes += 1;
239
+ } else { // Create new hole
240
+ RangeList* l = new (home) RangeList(m+1,l_max);
241
+ l->prevnext(lst(),NULL);
242
+ lst()->max(m-1); lst()->next(NULL,l);
243
+ lst(l); holes += 1;
244
+ }
245
+ } else { // Concerns element in the middle of the list of ranges
246
+ RangeList* p;
247
+ RangeList* c;
248
+ RangeList* n;
249
+ if (closer_min(m)) {
250
+ assert(m > fst()->max());
251
+ p = NULL;
252
+ c = fst();
253
+ do {
254
+ n=c->next(p); p=c; c=n;
255
+ } while (m > c->max());
256
+ if (m < c->min())
257
+ return ME_INT_NONE;
258
+ n=c->next(p);
259
+ } else {
260
+ assert(m < lst()->min());
261
+ n = NULL;
262
+ c = lst();
263
+ do {
264
+ p=c->prev(n); n=c; c=p;
265
+ } while (m < c->min());
266
+ if (m > c->max())
267
+ return ME_INT_NONE;
268
+ p=c->prev(n);
269
+ }
270
+ assert((fst() != c) && (lst() != c));
271
+ assert((m >= c->min()) && (m <= c->max()));
272
+ holes += 1;
273
+ int c_min = c->min();
274
+ int c_max = c->max();
275
+ if ((c_min == m) && (c_max == m)) {
276
+ c->dispose(home);
277
+ p->next(c,n); n->prev(c,p);
278
+ } else if (c_min == m) {
279
+ c->min(m+1);
280
+ } else {
281
+ c->max(m-1);
282
+ if (c_max != m) {
283
+ RangeList* l = new (home) RangeList(m+1,c_max);
284
+ l->prevnext(c,n);
285
+ c->next(n,l);
286
+ n->prev(c,l);
287
+ }
288
+ }
289
+ }
290
+ notify(home,ME_INT_DOM);
291
+ return ME_INT_DOM;
292
+ notify_bnd_or_val:
293
+ if (assigned()) {
294
+ notify(home,ME_INT_VAL);
295
+ return ME_INT_VAL;
296
+ }
297
+ notify_bnd:
298
+ notify(home,ME_INT_BND);
299
+ return ME_INT_BND;
300
+ }
301
+
302
+
303
+
304
+ /*
305
+ * Copying variables
306
+ *
307
+ */
308
+
309
+ forceinline
310
+ IntVarImp::IntVarImp(Space* home, bool share, IntVarImp& x, bool is_bool)
311
+ : IntVarImpBase(home,share,x), dom(x.dom.min(),x.dom.max()) {
312
+ if (is_bool) {
313
+ holes = 0; fst(NULL);
314
+ } else {
315
+ holes = x.holes;
316
+ if (holes) {
317
+ int m = 1;
318
+ // Compute length
319
+ {
320
+ RangeList* s_p = x.fst();
321
+ RangeList* s_c = s_p->next(NULL);
322
+ do {
323
+ m++;
324
+ RangeList* s_n = s_c->next(s_p); s_p=s_c; s_c=s_n;
325
+ } while (s_c != NULL);
326
+ }
327
+ RangeList* d_c =
328
+ reinterpret_cast<RangeList*>(home->alloc(m*sizeof(RangeList)));
329
+ fst(d_c); lst(d_c+m-1);
330
+ d_c->min(x.fst()->min());
331
+ d_c->max(x.fst()->max());
332
+ d_c->prevnext(NULL,NULL);
333
+ RangeList* s_p = x.fst();
334
+ RangeList* s_c = s_p->next(NULL);
335
+ do {
336
+ RangeList* d_n = d_c + 1;
337
+ d_c->next(NULL,d_n);
338
+ d_n->prevnext(d_c,NULL);
339
+ d_n->min(s_c->min()); d_n->max(s_c->max());
340
+ d_c = d_n;
341
+ RangeList* s_n=s_c->next(s_p); s_p=s_c; s_c=s_n;
342
+ } while (s_c != NULL);
343
+ d_c->next(NULL,NULL);
344
+ } else {
345
+ fst(NULL);
346
+ }
347
+ }
348
+ }
349
+
350
+ IntVarImp*
351
+ IntVarImp::perform_copy(Space* home, bool share) {
352
+ return new (home) IntVarImp(home,share,*this,false);
353
+ }
354
+ IntVarImp*
355
+ IntVarImp::perform_copy_bool(Space* home, bool share) {
356
+ return new (home) IntVarImp(home,share,*this,true);
357
+ }
358
+
359
+ }}
360
+
361
+ // STATISTICS: int-var