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,50 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Contributing authors:
6
+ * Guido Tack <tack@gecode.org>
7
+ *
8
+ * Copyright:
9
+ * Christian Schulte, 2004
10
+ * Guido Tack, 2004
11
+ *
12
+ * Last modified:
13
+ * $Date: 2006-08-23 16:54:09 +0200 (Wed, 23 Aug 2006) $ by $Author: tack $
14
+ * $Revision: 3556 $
15
+ *
16
+ * This file is part of Gecode, the generic constraint
17
+ * development environment:
18
+ * http://www.gecode.org
19
+ *
20
+ * See the file "LICENSE" for information on usage and
21
+ * redistribution of this file, and for a
22
+ * DISCLAIMER OF ALL WARRANTIES.
23
+ *
24
+ */
25
+
26
+ /* How to tell the compiler to really, really inline */
27
+ #undef forceinline
28
+
29
+ /* Heap memory alignment */
30
+ #undef GECODE_MEMORY_ALIGNMENT
31
+
32
+ /* Whether integer variables are built */
33
+ #undef GECODE_HAVE_INT_VARS
34
+
35
+ /* Whether set variables are built */
36
+ #undef GECODE_HAVE_SET_VARS
37
+
38
+ /* Whether we are compiling static libraries */
39
+ #undef GECODE_STATIC_LIBS
40
+
41
+ /* Whether we have mtrace for memory leak debugging*/
42
+ #undef GECODE_HAVE_MTRACE
43
+
44
+ /* Whether gcc understands visibility attributes */
45
+ #undef GCC_HASCLASSVISIBILITY
46
+
47
+ /* Whether to include audit code */
48
+ #undef GECODE_AUDIT
49
+
50
+ // STATISTICS: kernel-other
@@ -0,0 +1,1426 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ * Guido Tack <tack@gecode.org>
5
+ *
6
+ * Contributing authors:
7
+ * Mikael Lagerkvist <lagerkvist@gecode.org>
8
+ *
9
+ * Copyright:
10
+ * Christian Schulte, 2002
11
+ * Guido Tack, 2004
12
+ *
13
+ * Last modified:
14
+ * $Date: 2006-08-31 17:36:38 +0200 (Thu, 31 Aug 2006) $ by $Author: schulte $
15
+ * $Revision: 3579 $
16
+ *
17
+ * This file is part of Gecode, the generic constraint
18
+ * development environment:
19
+ * http://www.gecode.org
20
+ *
21
+ * See the file "LICENSE" for information on usage and
22
+ * redistribution of this file, and for a
23
+ * DISCLAIMER OF ALL WARRANTIES.
24
+ *
25
+ */
26
+
27
+ #ifndef __GECODE_INT_HH__
28
+ #define __GECODE_INT_HH__
29
+
30
+ namespace Gecode { namespace Int {
31
+
32
+ /**
33
+ * \namespace Gecode::Int
34
+ * \brief Finite domain integers
35
+ *
36
+ * The Gecode::Int namespace contains all functionality required
37
+ * to program propagators and branchings for finite domain integers.
38
+ * In addition, all propagators and branchings for finite domain
39
+ * integers provided by %Gecode are contained as nested namespaces.
40
+ *
41
+ */
42
+
43
+ }}
44
+
45
+ #include "gecode/limits.hh"
46
+
47
+ #include "gecode/kernel.hh"
48
+
49
+ /*
50
+ * Support for DLLs under Windows
51
+ *
52
+ */
53
+
54
+ #if !defined(GECODE_STATIC_LIBS) && \
55
+ (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
56
+
57
+ #ifdef GECODE_BUILD_INT
58
+ #define GECODE_INT_EXPORT __declspec( dllexport )
59
+ #else
60
+ #define GECODE_INT_EXPORT __declspec( dllimport )
61
+ #endif
62
+
63
+ #else
64
+
65
+ #ifdef GCC_HASCLASSVISIBILITY
66
+
67
+ #define GECODE_INT_EXPORT __attribute__ ((visibility("default")))
68
+
69
+ #else
70
+
71
+ #define GECODE_INT_EXPORT
72
+
73
+ #endif
74
+ #endif
75
+
76
+ #include <iostream>
77
+
78
+ #include "gecode/iter.hh"
79
+ #include "gecode/support/shared-array.hh"
80
+
81
+ #include "gecode/int/exception.icc"
82
+
83
+ namespace Gecode {
84
+
85
+ class IntSetRanges;
86
+
87
+ /**
88
+ * \brief Integer sets
89
+ *
90
+ * Integer sets are the means to specify arbitrary sets
91
+ * of integers to be used as domains for integer variables.
92
+ * \ingroup TaskIntIntVars TaskSetSetVars
93
+ */
94
+ class IntSet {
95
+ friend class IntSetRanges;
96
+ private:
97
+ /// %Range (intervals) of integers
98
+ class Range {
99
+ public:
100
+ int min, max;
101
+ };
102
+ /// Shared array that stores the ranges of the domain
103
+ Support::SharedArray<Range> sar;
104
+ /// Sort ranges according to increasing minimum
105
+ class MinInc;
106
+ /// Normalize the first \a n elements
107
+ GECODE_INT_EXPORT void normalize(int n);
108
+ GECODE_INT_EXPORT void init(int n, int m);
109
+ GECODE_INT_EXPORT void init(const int r[], int n);
110
+ GECODE_INT_EXPORT void init(const int r[][2], int n);
111
+ public:
112
+ /// \name Constructors and initialization
113
+ //@{
114
+ /// Initialize as empty set
115
+ IntSet(void);
116
+ /// Copy constructor
117
+ IntSet(const IntSet& is);
118
+ /** \brief Initialize as range with minimum \a n and maximum \a m
119
+ *
120
+ * Note that the set is empty if \a n is larger than \a m
121
+ */
122
+ IntSet(int n, int m);
123
+ /// Initialize with \a n integers from array \a r
124
+ IntSet(const int r[], int n);
125
+ /** \brief Initialize with \a n ranges from array \a r
126
+ *
127
+ * For position \a i in the array \a r, the minimum is \a r[\a i][0]
128
+ * and the maximum is \a r[\a i][1].
129
+ */
130
+ IntSet(const int r[][2], int n);
131
+ /// Initialize with range iterator \a i
132
+ template <class I>
133
+ IntSet(I& i);
134
+ //@}
135
+
136
+ /// \name Range length
137
+ //@{
138
+ /// Return number of ranges of the specification
139
+ int size(void) const;
140
+ //@}
141
+
142
+ /// \name Range access
143
+ //@{
144
+ /// Return minimum of range at position \a i
145
+ int min(int i) const;
146
+ /// Return maximum of range at position \a i
147
+ int max(int i) const;
148
+ /// Return width of range at position \a i
149
+ unsigned int width(int i) const;
150
+ //@}
151
+
152
+ /// \name Entire set access
153
+ //@{
154
+ /// Return minimum of entire set
155
+ int min(void) const;
156
+ /// Return maximum of entire set
157
+ int max(void) const;
158
+ //@}
159
+
160
+ /// \name Cloning
161
+ //@{
162
+ /** \brief Update this set to be a copy of \a s
163
+ *
164
+ * If \a share is true, the copy is identical. Otherwise an independent
165
+ * copy is created.
166
+ */
167
+ void update(bool share, IntSet& s);
168
+ //@}
169
+
170
+ /// \name Predefined value
171
+ //@{
172
+ /// Empty set
173
+ GECODE_INT_EXPORT static const IntSet empty;
174
+ //@}
175
+ };
176
+
177
+ /**
178
+ * \brief Range iterator for integer sets
179
+ *
180
+ * \ingroup TaskIntIntVars TaskSetSetVars
181
+ */
182
+ class IntSetRanges {
183
+ private:
184
+ /// Current range
185
+ const IntSet::Range* i;
186
+ /// End range
187
+ const IntSet::Range* e;
188
+ public:
189
+ /// \name Constructors and initialization
190
+ //@{
191
+ /// Default constructor
192
+ IntSetRanges(void);
193
+ /// Initialize with ranges for set \a s
194
+ IntSetRanges(const IntSet& s);
195
+ /// Initialize with ranges for set \a s
196
+ void init(const IntSet& s);
197
+ //@}
198
+
199
+ /// \name Iteration control
200
+ //@{
201
+ /// Test whether iterator is still at a range or done
202
+ bool operator()(void) const;
203
+ /// Move iterator to next range (if possible)
204
+ void operator++(void);
205
+ //@}
206
+
207
+ /// \name Range access
208
+ //@{
209
+ /// Return smallest value of range
210
+ int min(void) const;
211
+ /// Return largest value of range
212
+ int max(void) const;
213
+ /// Return width of range (distance between minimum and maximum)
214
+ unsigned int width(void) const;
215
+ //@}
216
+ };
217
+
218
+ /**
219
+ * \brief Value iterator for integer sets
220
+ *
221
+ * \ingroup TaskIntIntVars TaskSetSetVars
222
+ */
223
+ class IntSetValues
224
+ : public Iter::Ranges::ToValues<IntSetRanges> {
225
+ public:
226
+ /// \name Constructors and initialization
227
+ //@{
228
+ /// Default constructor
229
+ IntSetValues(void);
230
+ /// Initialize with values for \a s
231
+ IntSetValues(const IntSet& s);
232
+ /// Initialize with values for \a s
233
+ void init(const IntSet& s);
234
+ //@}
235
+ };
236
+
237
+ }
238
+
239
+ /**
240
+ * \brief Print integer set \a s
241
+ * \relates Gecode::IntSet
242
+ */
243
+ GECODE_INT_EXPORT std::ostream&
244
+ operator<<(std::ostream&, const Gecode::IntSet& s);
245
+
246
+ #include "gecode/int/int-set.icc"
247
+
248
+
249
+ #include "gecode/int/var.icc"
250
+ #include "gecode/int/view.icc"
251
+ #include "gecode/int/propagator.icc"
252
+ #include "gecode/int/array.icc"
253
+
254
+
255
+ namespace Gecode {
256
+
257
+ /**
258
+ * \brief Common relation types for integers
259
+ * \ingroup TaskIntInt
260
+ */
261
+ enum IntRelType {
262
+ IRT_EQ, ///< Equality (\f$=\f$)
263
+ IRT_NQ, ///< Disequality (\f$\neq\f$)
264
+ IRT_LQ, ///< Less or equal (\f$\leq\f$)
265
+ IRT_LE, ///< Less (\f$<\f$)
266
+ IRT_GQ, ///< Greater or equal (\f$\geq\f$)
267
+ IRT_GR ///< Greater (\f$>\f$)
268
+ };
269
+
270
+ /**
271
+ * \brief Consistency levels for integer propagators
272
+ *
273
+ * The descriptions are meant to be suggestions. It is not
274
+ * required that a propagator achieves full domain-consistency or
275
+ * full bounds-consistency. It is more like: which level
276
+ * of consistency comes closest.
277
+ *
278
+ * If in the description of a constraint below no consistency level
279
+ * is mentioned, the propagator for the constraint implements
280
+ * domain-consistency.
281
+ * \ingroup TaskIntInt
282
+ */
283
+ enum IntConLevel {
284
+ ICL_VAL, ///< Value consistency (naive)
285
+ ICL_BND, ///< Bounds consistency
286
+ ICL_DOM, ///< Domain consistency
287
+ ICL_DEF ///< The default consistency for a constraint
288
+ };
289
+
290
+
291
+
292
+ /**
293
+ * \defgroup TaskIntIntDomain Domain constraints
294
+ * \ingroup TaskIntInt
295
+ *
296
+ */
297
+
298
+ //@{
299
+ /// Propagates \f$ l\leq x\leq m\f$
300
+ GECODE_INT_EXPORT void
301
+ dom(Space* home, IntVar x, int l, int m,
302
+ IntConLevel=ICL_DEF);
303
+ /// Propagates \f$ l\leq x_i\leq m\f$ for all \f$0\leq i<|x|\f$
304
+ GECODE_INT_EXPORT void
305
+ dom(Space* home, IntVarArgs& x, int l, int m,
306
+ IntConLevel=ICL_DEF);
307
+
308
+ /// Propagates \f$ x\in s \f$
309
+ GECODE_INT_EXPORT void
310
+ dom(Space* home, IntVar x, const IntSet& s,
311
+ IntConLevel=ICL_DEF);
312
+ /// Propagates \f$ x_i\in s\f$ for all \f$0\leq i<|x|\f$
313
+ GECODE_INT_EXPORT void
314
+ dom(Space* home, IntVarArgs& x, const IntSet& s,
315
+ IntConLevel=ICL_DEF);
316
+
317
+ /// Post propagator for \f$ (l\leq x \leq m) \Leftrightarrow b\f$
318
+ GECODE_INT_EXPORT void
319
+ dom(Space* home, IntVar x, int l, int m, BoolVar b,
320
+ IntConLevel=ICL_DEF);
321
+ /// Post propagator for \f$ (x \in s) \Leftrightarrow b\f$
322
+ GECODE_INT_EXPORT void
323
+ dom(Space* home, IntVar x, const IntSet& s, BoolVar b,
324
+ IntConLevel=ICL_DEF);
325
+ //@}
326
+
327
+
328
+ /**
329
+ * \defgroup TaskIntIntRel Simple relation constraints
330
+ * \ingroup TaskIntInt
331
+ */
332
+
333
+ //@{
334
+
335
+
336
+ /** \brief Post propagator for \f$ x_0 \sim_r x_1\f$
337
+ *
338
+ * Supports both bounds (\a icl = ICL_BND) and
339
+ * domain-consistency (\a icl = ICL_DOM, default).
340
+ */
341
+ GECODE_INT_EXPORT void
342
+ rel(Space* home, IntVar x0, IntRelType r, IntVar x1,
343
+ IntConLevel icl=ICL_DEF);
344
+ /// Propagates \f$ x \sim_r c\f$
345
+ GECODE_INT_EXPORT void
346
+ rel(Space* home, IntVar x, IntRelType r, int c,
347
+ IntConLevel icl=ICL_DEF);
348
+ /** \brief Post propagator for \f$ (x_0 \sim_r x_1)\Leftrightarrow b\f$
349
+ *
350
+ * Supports both bounds (\a icl = ICL_BND) and
351
+ * domain-consistency (\a icl = ICL_DOM, default).
352
+ */
353
+ GECODE_INT_EXPORT void
354
+ rel(Space* home, IntVar x0, IntRelType r, IntVar x1, BoolVar b,
355
+ IntConLevel icl=ICL_DEF);
356
+ /** \brief Post propagator for \f$(x \sim_r c)\Leftrightarrow b\f$
357
+ *
358
+ * Supports both bounds (\a icl = ICL_BND) and
359
+ * domain-consistency (\a icl = ICL_DOM, default).
360
+ */
361
+ GECODE_INT_EXPORT void
362
+ rel(Space* home, IntVar x, IntRelType r, int c, BoolVar b,
363
+ IntConLevel icl=ICL_DEF);
364
+
365
+ /** \brief Post propagator for relation between \a x and \a y.
366
+ *
367
+ * Note that for the inequality relations this corresponds to
368
+ * the lexical order between \a x and \a y.
369
+ *
370
+ * Supports both bounds (\a icl = ICL_BND) and
371
+ * domain-consistency (\a icl = ICL_DOM, default).
372
+ *
373
+ * Throws an exception of type Int::ArgumentSizeMismatch, if
374
+ * \a x and \a y are of different size.
375
+ */
376
+ GECODE_INT_EXPORT void
377
+ rel(Space* home, const IntVarArgs& x, IntRelType r, const IntVarArgs& y,
378
+ IntConLevel icl=ICL_DEF);
379
+ //@}
380
+
381
+ /**
382
+ * \defgroup TaskIntIntEq Equality constraints
383
+ * \ingroup TaskIntInt
384
+ */
385
+
386
+ //@{
387
+
388
+ /** \brief Post propagator for \f$ x_0 = x_1\f$
389
+ *
390
+ * Supports both bounds (\a icl = ICL_BND) and
391
+ * domain-consistency (\a icl = ICL_DOM, default).
392
+ */
393
+ GECODE_INT_EXPORT void
394
+ eq(Space* home, IntVar x0, IntVar x1, IntConLevel icl=ICL_DEF);
395
+ /// Propagates \f$ x = n\f$
396
+ GECODE_INT_EXPORT void
397
+ eq(Space* home, IntVar x, int n, IntConLevel=ICL_DEF);
398
+ /** \brief Post propagator for \f$ (x_0 = x_1)\Leftrightarrow b\f$
399
+ *
400
+ * Supports both bounds (\a icl = ICL_BND) and
401
+ * domain-consistency (\a icl = ICL_DOM, default).
402
+ */
403
+ GECODE_INT_EXPORT void
404
+ eq(Space* home, IntVar x0, IntVar x1, BoolVar b, IntConLevel icl=ICL_DEF);
405
+ /** \brief Post propagator for \f$ (x=n)\Leftrightarrow b\f$
406
+ *
407
+ * Supports both bounds (\a icl = ICL_BND) and
408
+ * domain-consistency (\a icl = ICL_DOM, default).
409
+ */
410
+ GECODE_INT_EXPORT void
411
+ eq(Space* home, IntVar x, int n, BoolVar b, IntConLevel icl=ICL_DEF);
412
+ /** \brief Post propagator for \f$ x_0 = x_1=\ldots =x_{|x|-1}\f$
413
+ *
414
+ * Supports both bounds (\a icl = ICL_BND) and
415
+ * domain-consistency (\a icl = ICL_DOM, default).
416
+ */
417
+ GECODE_INT_EXPORT void
418
+ eq(Space* home, const IntVarArgs& x, IntConLevel icl=ICL_DEF);
419
+ //@}
420
+
421
+
422
+
423
+ /**
424
+ * \defgroup TaskIntIntElement Element constraints
425
+ * \ingroup TaskIntInt
426
+ */
427
+
428
+ //@{
429
+ /** \brief Post propagator for \f$ n_{x_0}=x_1\f$
430
+ *
431
+ * Throws an exception of type Int::NumericalOverflow, if
432
+ * the integers in \a n exceed the limits in Limits::Int.
433
+ */
434
+ GECODE_INT_EXPORT void
435
+ element(Space* home, const IntArgs& n, IntVar x0, IntVar x1,
436
+ IntConLevel=ICL_DEF);
437
+ /** \brief Post propagator for \f$ x_{y_0}=y_1\f$
438
+ *
439
+ * Supports both bounds (\a icl = ICL_BND) and
440
+ * domain-consistency (\a icl = ICL_DOM, default).
441
+ */
442
+ GECODE_INT_EXPORT void
443
+ element(Space* home, const IntVarArgs& x, IntVar y0, IntVar y1,
444
+ IntConLevel icl=ICL_DEF);
445
+ //@}
446
+
447
+
448
+ /**
449
+ * \defgroup TaskIntIntDistinct Distinct constraints
450
+ * \ingroup TaskIntInt
451
+ */
452
+
453
+ //@{
454
+ /** \brief Post propagator for \f$ x_i\neq x_j\f$ for all \f$0\leq i\neq j<|x|\f$
455
+ *
456
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
457
+ * and domain-consistency (\a icl = ICL_DOM).
458
+ *
459
+ * Throws an exception of type Int::ArgumentSame, if \a x contains
460
+ * the same variable multiply.
461
+ */
462
+ GECODE_INT_EXPORT void
463
+ distinct(Space* home, const IntVarArgs& x,
464
+ IntConLevel icl=ICL_DEF);
465
+ /** \brief Post propagator for \f$ x_i+n_i\neq x_j+n_j\f$ for all \f$0\leq i\neq j<|x|\f$
466
+ *
467
+ * \li Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
468
+ * and domain-consistency (\a icl = ICL_DOM).
469
+ * \li Throws an exception of type Int::NumericalOverflow, if
470
+ * the integers in \a n exceed the limits in Limits::Int.
471
+ * \li Throws an exception of type Int::ArgumentSizeMismatch, if
472
+ * \a x and \a n are of different size.
473
+ * \li Throws an exception of type Int::ArgumentSame, if \a x contains
474
+ * the same variable multiply.
475
+ */
476
+ GECODE_INT_EXPORT void
477
+ distinct(Space* home, const IntArgs& n, const IntVarArgs& x,
478
+ IntConLevel icl=ICL_DEF);
479
+ //@}
480
+
481
+
482
+ /**
483
+ * \defgroup TaskIntIntChannel Channel constraints
484
+ * \ingroup TaskIntInt
485
+ */
486
+
487
+ //@{
488
+ /** \brief Post propagator for \f$ x_i = j\leftrightarrow y_j=i\f$ for all \f$0\leq i<|x|\f$
489
+ *
490
+ * \li Supports value (\a icl = ICL_VAL) and domain propagation (all other
491
+ * values for \a icl).
492
+ * \li Throws an exception of type Int::ArgumentSizeMismatch, if
493
+ * \a x and \a n are of different size.
494
+ * \li Throws an exception of type Int::ArgumentSame, if \a x together
495
+ * with \a y contains the same variable multiply.
496
+ */
497
+ GECODE_INT_EXPORT void
498
+ channel(Space* home, const IntVarArgs& x, const IntVarArgs& y,
499
+ IntConLevel icl=ICL_DEF);
500
+ //@}
501
+
502
+
503
+ /**
504
+ * \defgroup TaskIntIntScheduling Scheduling constraints
505
+ * \ingroup TaskIntInt
506
+ */
507
+ //@{
508
+ /**
509
+ * \brief Post propagators for the cumulatives constraint.
510
+ *
511
+ * This function creates propagators for the cumulatives constraint
512
+ * presented in <em> "A new multi-resource cumulatives constraint
513
+ * with negative heights"</em>, Nicolas Beldiceanu and Mats
514
+ * Carlsson, Principles and Practice of Constraint Programming 2002.
515
+ *
516
+ * The constraint models a set of machines and a set of tasks that
517
+ * should be assigned to the machines. The machines have a positive
518
+ * resource limit and the tasks each have a resource usage that can
519
+ * be either positive, negative, or zero. The constraint is enforced
520
+ * over each point in time for a machine where there is at least one
521
+ * task assigned.
522
+ *
523
+ * The limit for a machine is either the maximum amount available at
524
+ * any given time (\a at_most = true), or else the least amount to
525
+ * be used (\a at_most = false).
526
+ *
527
+ * \param machine \f$ machine_i \f$ is the machine assigned to task \f$ i \f$
528
+ * \param start \f$ start_i \f$ is the start date assigned to task \f$ i \f$
529
+ * \param duration \f$ duration_i \f$ is the duration of task \f$ i \f$
530
+ * \param end \f$ end_i \f$ is the end date assigned to task \f$ i \f$
531
+ * \param height \f$ height_i \f$ is the height is the amount of
532
+ * resources consumed by task \f$ i \f$
533
+ * \param limit \f$ limit_r \f$ is the amount of resource available
534
+ * for machine \f$ r \f$
535
+ * \param at_most \a at_most tells if the amount of resources used
536
+ * for a machine should be less than the limit (\a at_most
537
+ * = true) or greater than the limit (\a at_most = false)
538
+ * \param icl Supports value-consistency only (\a icl = ICL_VAL, default).
539
+ *
540
+ * \exception Int::ArgumentSizeMismatch thrown if the sizes of the arguments
541
+ * representing tasks does not match.
542
+ * \exception Int::NumericalOverflow thrown if any numerical argument is
543
+ * larger than Limits::Int::int_max or less than
544
+ * Limits::Int::int_min.
545
+ */
546
+ GECODE_INT_EXPORT void
547
+ cumulatives(Space* home, const IntVarArgs& machine,
548
+ const IntVarArgs& start, const IntVarArgs& duration,
549
+ const IntVarArgs& end, const IntVarArgs& height,
550
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
551
+ /** \brief Post propagators for the cumulatives constraint.
552
+ *
553
+ * \copydoc cumulatives()
554
+ */
555
+ GECODE_INT_EXPORT void
556
+ cumulatives(Space* home, const IntArgs& machine,
557
+ const IntVarArgs& start, const IntVarArgs& duration,
558
+ const IntVarArgs& end, const IntVarArgs& height,
559
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
560
+ /** \brief Post propagators for the cumulatives constraint.
561
+ *
562
+ * \copydoc cumulatives()
563
+ */
564
+ GECODE_INT_EXPORT void
565
+ cumulatives(Space* home, const IntVarArgs& machine,
566
+ const IntVarArgs& start, const IntArgs& duration,
567
+ const IntVarArgs& end, const IntVarArgs& height,
568
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
569
+ /** \brief Post propagators for the cumulatives constraint.
570
+ *
571
+ * \copydoc cumulatives()
572
+ */
573
+ GECODE_INT_EXPORT void
574
+ cumulatives(Space* home, const IntArgs& machine,
575
+ const IntVarArgs& start, const IntArgs& duration,
576
+ const IntVarArgs& end, const IntVarArgs& height,
577
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
578
+ /** \brief Post propagators for the cumulatives constraint.
579
+ *
580
+ * \copydoc cumulatives()
581
+ */
582
+ GECODE_INT_EXPORT void
583
+ cumulatives(Space* home, const IntVarArgs& machine,
584
+ const IntVarArgs& start, const IntVarArgs& duration,
585
+ const IntVarArgs& end, const IntArgs& height,
586
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
587
+ /** \brief Post propagators for the cumulatives constraint.
588
+ *
589
+ * \copydoc cumulatives()
590
+ */
591
+ GECODE_INT_EXPORT void
592
+ cumulatives(Space* home, const IntArgs& machine,
593
+ const IntVarArgs& start, const IntVarArgs& duration,
594
+ const IntVarArgs& end, const IntArgs& height,
595
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
596
+ /** \brief Post propagators for the cumulatives constraint.
597
+ *
598
+ * \copydoc cumulatives()
599
+ */
600
+ GECODE_INT_EXPORT void
601
+ cumulatives(Space* home, const IntVarArgs& machine,
602
+ const IntVarArgs& start, const IntArgs& duration,
603
+ const IntVarArgs& end, const IntArgs& height,
604
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
605
+ /** \brief Post propagators for the cumulatives constraint.
606
+ *
607
+ * \copydoc cumulatives()
608
+ */
609
+ GECODE_INT_EXPORT void
610
+ cumulatives(Space* home, const IntArgs& machine,
611
+ const IntVarArgs& start, const IntArgs& duration,
612
+ const IntVarArgs& end, const IntArgs& height,
613
+ const IntArgs& limit, bool at_most, IntConLevel icl=ICL_DEF);
614
+ //@}
615
+
616
+
617
+ /**
618
+ * \defgroup TaskIntIntRegular Regular constraints
619
+ * \ingroup TaskIntInt
620
+ */
621
+
622
+ class DFA;
623
+
624
+ //@{
625
+ /// %Regular expressions
626
+ class GECODE_INT_EXPORT REG {
627
+ friend class DFA;
628
+ private:
629
+ /// Implementation of the actual expression tree
630
+ class Exp;
631
+ /// The expression tree
632
+ Exp* e;
633
+ /// Initialize with given expression tree \a
634
+ REG(Exp* e);
635
+ public:
636
+ /// Initialize from regular expression \a r
637
+ REG(const REG& r);
638
+ /// Initialize from regular expression \a r
639
+ const REG& operator=(const REG& r);
640
+
641
+ /// Initialize as empty sequence
642
+ REG(void);
643
+ /// Initialize as single integer
644
+ REG(int);
645
+ /// Return expression for: this expression at least \a n times, at most \a m times
646
+ REG operator()(unsigned int n, unsigned int m);
647
+ /// Return expression for: this expression at least \a n times
648
+ REG operator()(unsigned int n);
649
+ /// Return expression for: this expression or \a r
650
+ REG operator|(const REG& r);
651
+ /// Return expression for: this expression followed by \a r
652
+ REG operator+(const REG& r);
653
+ /// Repeat expression for this expression arbitrarily often (Kleene star)
654
+ REG operator*(void);
655
+ /** \brief Repeat expression for this expression arbitrarily often, but
656
+ * at least once
657
+ */
658
+ REG operator+(void);
659
+ /// Print expression
660
+ std::ostream& print(std::ostream&) const;
661
+ /// Destructor
662
+ ~REG(void);
663
+ };
664
+
665
+ /**
666
+ * \brief Deterministic finite automaton
667
+ *
668
+ * After initialization, the start state is always zero.
669
+ * The final states are contiguous ranging from the first to the
670
+ * last final state.
671
+ */
672
+ class DFA {
673
+ public:
674
+ /// Specification of a %DFA transition
675
+ class Transition {
676
+ public:
677
+ int i_state; ///< input state
678
+ int symbol; ///< symbol
679
+ int o_state; ///< output state
680
+ };
681
+ /// Iterator for %DFA transitions
682
+ class Transitions;
683
+ private:
684
+ /// Class for %DFA implementation
685
+ class DFAI;
686
+ /// %DFA implementation
687
+ DFAI* dfai;
688
+ protected:
689
+ GECODE_INT_EXPORT
690
+ /**
691
+ * \brief Initialize automaton
692
+ *
693
+ * Start state \a start, transition specification t_spec,
694
+ * final state specification \a f_spec and a flag \a minimize whether
695
+ * the automaton should be minimized
696
+ */
697
+ void init(int start, Transition t_spec[], int f_spec[],
698
+ bool minimize);
699
+ public:
700
+ friend class Transitions;
701
+ /// Default constructor (empty DFA)
702
+ DFA(void);
703
+ /**
704
+ * \brief Initialize DFA by transitions
705
+ *
706
+ * - Start state is given by \a s.
707
+ * - %Transitions are described by \a t, where the last element
708
+ * must have -1 as value for \c i_state.
709
+ * - Final states are given by \a f, where the last final element
710
+ * must be -1.
711
+ * - Minimizes the DFA, if \a minimize is true.
712
+ */
713
+ DFA(int s, Transition t[], int f[], bool minimize=true);
714
+ GECODE_INT_EXPORT
715
+ /// Initialize DFA by regular expression \a r
716
+ DFA(REG& r);
717
+ /// Initialize by DFA \a d (DFA is shared)
718
+ DFA(const DFA& d);
719
+ /// Initialize by DFA \a d (DFA is shared)
720
+ const DFA& operator=(const DFA&);
721
+ /// Destructor
722
+ ~DFA(void);
723
+ /**
724
+ * \brief Update this DFA to \a d
725
+ *
726
+ * If \a share is true, share the same \a d. If not, create
727
+ * an independent copy from \a d.
728
+ */
729
+ void update(bool share, DFA& d);
730
+ /// Return the number of states
731
+ unsigned int n_states(void) const;
732
+ /// Return the number of transitions
733
+ unsigned int n_transitions(void) const;
734
+ /// Return the number of the first final state
735
+ int final_fst(void) const;
736
+ /// Return the number of the last final state
737
+ int final_lst(void) const;
738
+ /// Return smallest symbol in DFA
739
+ int symbol_min(void) const;
740
+ /// Return largest symbol in DFA
741
+ int symbol_max(void) const;
742
+ };
743
+
744
+ /**
745
+ * \brief Post propagator for regular constraint
746
+ *
747
+ * The elements of \a x must be a word of the language described by
748
+ * the DFA \a d.
749
+ */
750
+ GECODE_INT_EXPORT void
751
+ regular(Space* home, const IntVarArgs& x, DFA& d,
752
+ IntConLevel=ICL_DEF);
753
+
754
+ //@}
755
+
756
+ }
757
+
758
+ #include "gecode/int/regular/dfa.icc"
759
+
760
+ namespace Gecode {
761
+
762
+ /**
763
+ * \note The Sortedness propagator described in this section only
764
+ * supports bounds-consistency no matter what value for the
765
+ * argument \a icl is given!
766
+ *
767
+ * \defgroup TaskIntIntSort Sorting constraints
768
+ * \ingroup TaskIntInt
769
+ */
770
+
771
+
772
+ //@{
773
+ /**
774
+ * \brief Post propagator \f$\exists\pi:\forall i\in\{0,\dots,|x|-1\}:
775
+ * y_0 \leq\dots\leq y_{|x|-1} \wedge x_i=y_{\pi(i)}\f$
776
+ *
777
+ * \anchor SortednessSemantics
778
+ *
779
+ * \exception Int::ArgumentSizeMismatch thrown if \a x and \a y
780
+ * differ in size.
781
+ * \exception Int::ArgumentSame thrown if \a x or \a y contain
782
+ * shared variables.
783
+ *
784
+ * Taking only two arguments, this interface for Sortedness leaves
785
+ * the sorting permutation \f$\pi\f$ implicit.
786
+ *
787
+ */
788
+ GECODE_INT_EXPORT void
789
+ sortedness(Space* home, const IntVarArgs& x, const IntVarArgs& y,
790
+ IntConLevel icl=ICL_DEF);
791
+
792
+ /**
793
+ * \brief Post propagator \f$\forall i\in\{0,\dots,|x|-1\}:
794
+ * y_0 \leq\dots\leq y_{|x|-1} \wedge x_i=y_{z_i} \f$ \n
795
+ *
796
+ * \exception Int::ArgumentSizeMismatch thrown if \a x, \a y or \a z
797
+ * differ in size.
798
+ * \exception Int::ArgumentSame thrown if \a x, \a y or \a z contain
799
+ * shared variables.
800
+ *
801
+ * Providing a third argument \f$z_0, \dots, z_{|x|-1} \f$, this
802
+ * interface for Sortedness models the sorting permutation
803
+ * \f$\pi\f$ explicitly, such that
804
+ * \f$\forall i\in\{0,\dots,|x|-1\}:\pi(i) = z_i\f$ holds.
805
+ *
806
+ */
807
+
808
+ GECODE_INT_EXPORT void
809
+ sortedness(Space*, const IntVarArgs& x, const IntVarArgs& y,
810
+ const IntVarArgs& z,
811
+ IntConLevel icl=ICL_DEF);
812
+ //@}
813
+
814
+ /**
815
+ * \defgroup TaskIntIntCard Cardinality constraints
816
+ * \ingroup TaskIntInt
817
+ *
818
+ * \note
819
+ * Domain consistency on the extended cardinality variables of
820
+ * the Global Cardinality Propagator is only obtained if they are bounds
821
+ * consistent, otherwise the problem of enforcing domain consistency
822
+ * on the cardinality variables is NP-complete as proved by
823
+ * \ref CardVarNPCompl "Qumiper et. al. in
824
+ * Improved Algorithms for the Global Cardinality Constraint"
825
+ */
826
+
827
+ //@{
828
+ /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=n\}\sim_r m\f$
829
+ *
830
+ * Supports domain-consistent propagation only.
831
+ */
832
+ GECODE_INT_EXPORT void
833
+ count(Space* home, const IntVarArgs& x, int n, IntRelType r, int m,
834
+ IntConLevel icl=ICL_DEF);
835
+ /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\sim_r m\f$
836
+ *
837
+ * Supports domain-consistent propagation only.
838
+ */
839
+ GECODE_INT_EXPORT void
840
+ count(Space* home, const IntVarArgs& x, IntVar y, IntRelType r, int m,
841
+ IntConLevel icl=ICL_DEF);
842
+ /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=n\}\sim_r z\f$
843
+ *
844
+ * Supports domain-consistent propagation only.
845
+ */
846
+ GECODE_INT_EXPORT void
847
+ count(Space* home, const IntVarArgs& x, int n, IntRelType r, IntVar z,
848
+ IntConLevel icl=ICL_DEF);
849
+ /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\sim_r z\f$
850
+ *
851
+ * Supports domain-consistent propagation only.
852
+ */
853
+ GECODE_INT_EXPORT void
854
+ count(Space* home, const IntVarArgs& x, IntVar y, IntRelType r, IntVar z,
855
+ IntConLevel icl=ICL_DEF);
856
+
857
+
858
+ /**
859
+ * \brief Post propagator for
860
+ * \f{eqnarray*}
861
+ * \forall t=(v, lb, ub) \in c: & &
862
+ * lb \leq \#\{i\in\{0, \dots, |x| - 1\} | x_i = v\} \leq ub \\
863
+ * \forall t=(v, unspec_{low}, unspec_{up}) \not\in c: & &
864
+ * unspec_{low} \leq \#\{i\in\{0, \dots, |x| - 1\} | x_i = v\} \leq unspec_{up}
865
+ * \f}
866
+ *
867
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
868
+ * and domain-consistency (\a icl = ICL_DOM).
869
+ *
870
+ * \exception Int::ArgumentSame thrown if \a x contains shared variables.
871
+ *
872
+ * \param x variables on which to perform propagation
873
+ * \param c specifying cardinality information as shown below
874
+ * \param m denotes the size of c
875
+ * \param unspec_low denotes the lower bound for those values
876
+ * not specified in c
877
+ * \param unspec_up denotes the upper bound for those values
878
+ * not specified in c
879
+ * \param min smallest domain value of \a x
880
+ * \param max largest domain value of \a x
881
+ * \param icl consistency level
882
+ *
883
+ * Let \f$ D:=\displaystyle \bigcup_{i\in\{0, \dots, |x|-1\}} dom(x_i)\f$ and
884
+ * \f$ V \f$ the set of values represented by \a c. Then this progator allows
885
+ * sets \f$ V\subset D\f$ as well as \f$ V=D\f$.
886
+ *
887
+ * In this interface values \f$ v\f$ and their cardinality bounds
888
+ * have to specified such that \a c looks as follows (for example):
889
+ * \f$ c=[ (1,0,1), (2,1,3), \dots, (10,4,5)]\f$, where the value 1 may occur
890
+ * zero times or once, the value 2 must occur at least once at most three times
891
+ * and the value 10 must occur at least 4 times and at most 5 times.
892
+ *
893
+ * Furthermore, this interface requires that
894
+ * \f$ \forall {i\in\{0, \dots, |x|-1\}}: dom(x_i)
895
+ * \subseteq I=[min;max]\f$.
896
+ *
897
+ */
898
+
899
+ GECODE_INT_EXPORT void
900
+ gcc(Space* home, const IntVarArgs& x, const IntArgs& c,
901
+ int m, int unspec_low, int unspec_up, int min, int max,
902
+ IntConLevel icl);
903
+
904
+ /**
905
+ * \brief Post propagator for
906
+ * \f{eqnarray*}
907
+ * \forall t=(v, lb, ub) \in c: & &
908
+ * lb \leq \#\{i\in\{0, \dots, |x| - 1\} | x_i = v\} \leq ub \\
909
+ * \forall t=(v, 0, unspec) \not\in c: & &
910
+ * 0 \leq \#\{i\in\{0, \dots, |x| - 1\} | x_i = v\} \leq unspec
911
+ * \f}
912
+ *
913
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
914
+ * and domain-consistency (\a icl = ICL_DOM).
915
+ *
916
+ * \exception Int::ArgumentSame thrown if \a x contains shared variables.
917
+ *
918
+ * \param x variables on which to perform propagation
919
+ * \param c specifying cardinality information as shown below
920
+ * \param m denotes the size of \a c
921
+ * \param unspec denotes the upper bound for those values
922
+ * not specified in \a c
923
+ * \param min smallest domain value of \a x
924
+ * \param max largest domain value of \a x
925
+ * \param icl consistency level
926
+ *
927
+ * Let \f$ D:=\displaystyle \bigcup_{i\in\{0, \dots, |x|-1\}} dom(x_i)\f$ and
928
+ * \f$ V \f$ the set of values represented by \a c. Then this interface allows
929
+ * to specify sets \f$ V\subset D\f$ as well as \f$ V=D\f$.
930
+ *
931
+ * In this interface values \f$ v\f$ and their cardinality bounds
932
+ * have to be specified such that \a c looks as follows (for example):
933
+ * \f$ c=[ (1,0,1), (2,1,3), \dots, (10,4,5)]\f$, where the value 1 may occur
934
+ * zero times or once, the value 2 must occur at least once at most three times
935
+ * and the value 10 must occur at least 4 times and at most 5 times.
936
+ */
937
+
938
+ GECODE_INT_EXPORT void
939
+ gcc(Space* home, const IntVarArgs& x, const IntArgs& c,
940
+ int m, int unspec, int min, int max,
941
+ IntConLevel icl);
942
+
943
+ /**
944
+ * \brief Post propagator for \f$ \forall v
945
+ * \in \displaystyle \bigcup_{i\in\{0, \dots, |x|-1\}} dom(x_i):
946
+ * lb \leq \#\{i\in\{0, \dots, |x| - 1\} | x_i = v\} \leq ub \f$
947
+ *
948
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
949
+ * and domain-consistency (\a icl = ICL_DOM).
950
+ *
951
+ * \exception Int::ArgumentSame thrown if \a x contains shared variables.
952
+ *
953
+ * \param x variables on which to perform propagation
954
+ * \param lb denotes the lower bound for all values
955
+ * specified in the array \a c,
956
+ * \param ub denotes the upper bound for all values
957
+ * specified in the array \a c,
958
+ * where this interface allows only value sets
959
+ * \f$ V=D \displaystyle \bigcup_{i\in\{0, \dots, |x|-1\}}
960
+ * dom(x_i)\f$
961
+ * \param icl consistency level
962
+ */
963
+
964
+ GECODE_INT_EXPORT void
965
+ gcc(Space* home, const IntVarArgs& x, int lb, int ub, IntConLevel icl);
966
+
967
+ /**
968
+ * \brief Post propagator for \f$ \forall v
969
+ * \in \displaystyle \bigcup_{i\in\{0, \dots, |x|-1\}} dom(x_i):
970
+ * lb = \#\{i\in\{0, \dots, |x| - 1\} | x_i = v\} = ub \f$
971
+ *
972
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
973
+ * and domain-consistency (\a icl = ICL_DOM).
974
+ *
975
+ * \exception Int::ArgumentSame thrown if \a x contains shared variables.
976
+ *
977
+ * \param x variables on which to perform propagation
978
+ * \param ub denotes the upper bound for all values specified
979
+ * in the array \a c, where this interface
980
+ * allows only value sets
981
+ * \f$ V=D \displaystyle \bigcup_{i\in\{0, \dots, |x|-1\}}
982
+ * dom(x_i)\f$
983
+ * \param icl consistency level
984
+ *
985
+ */
986
+
987
+ GECODE_INT_EXPORT void
988
+ gcc(Space* home, const IntVarArgs& x, int ub, IntConLevel icl);
989
+
990
+
991
+ /**
992
+ * \brief Post propagator for
993
+ * \f{eqnarray*}
994
+ * v_j \in I=[min;max] & & \\
995
+ * \forall j \in \{0, \dots, |I| - 1\}: & &
996
+ * \#\{i\in\{0, \dots, |x| - 1\} | x_i = v_j\} = c_j
997
+ * \f}
998
+ *
999
+ * \param x variables on which to perform propagation
1000
+ * \param c cardinality variables
1001
+ * \param min smallest domain value of \a x
1002
+ * \param max largest domain value of \a x
1003
+ * \param icl consistency level
1004
+ *
1005
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1006
+ * and domain-consistency (\a icl = ICL_DOM).
1007
+ *
1008
+ * This interface requires that
1009
+ * \f$ \forall {i\in\{0, \dots, |x|-1\}}: dom(x_i)
1010
+ * \subseteq I=[min;max]\f$.
1011
+ */
1012
+
1013
+ GECODE_INT_EXPORT void
1014
+ gcc(Space* home, const IntVarArgs& x, const IntVarArgs& c,
1015
+ int min, int max,
1016
+ IntConLevel icl);
1017
+
1018
+ /**
1019
+ * \brief Post propagator for \f$ \forall j \in \{0, \dots, |v| - 1\}:
1020
+ * \#\{i\in\{0, \dots, |x| - 1\} | x_i = v_j\} = c_j \f$
1021
+ *
1022
+ * \param x variables on which to perform propagation
1023
+ * \param v containing the values connected to the cardinality
1024
+ * variables as specified below
1025
+ * \param c cardinality variables
1026
+ * \param m denotes the size of \a v and \a c
1027
+ * \param unspec_low denotes the lower bound for those values
1028
+ * not specified in \a v and \a c
1029
+ * \param unspec_up denotes the upper bound for those values
1030
+ * not specified in \a v and \a c
1031
+ * \param all specifies whether the propagator uses all values in
1032
+ * the interval \f$ I=[min;max]\f$
1033
+ * \param min smallest domain value of \a x
1034
+ * \param max largest domain value of \a x
1035
+ * \param icl consistency level
1036
+ *
1037
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1038
+ * and domain-consistency (\a icl = ICL_DOM).
1039
+ *
1040
+ * This interface requires that
1041
+ * \f$ \forall {i\in\{0, \dots, |x|-1\}}: dom(x_i)
1042
+ * \subseteq I=[min;max]\f$.
1043
+ * If \a all is set to true, every value from the interval
1044
+ * \f$ I=[min;max]\f$ is specified with cardinalities.
1045
+ * Otherwise, only specified values in \a v are used and unspecified values
1046
+ * may occur between \a unspec_low and \a unspec_up times.
1047
+ */
1048
+
1049
+ GECODE_INT_EXPORT void
1050
+ gcc(Space* home,
1051
+ const IntVarArgs& x, const IntArgs& v, const IntVarArgs& c,
1052
+ int m, int unspec_low, int unspec_up, bool all, int min, int max,
1053
+ IntConLevel icl);
1054
+
1055
+ /**
1056
+ * \brief Post propagator for \f$ \forall j \in \{0, \dots, |v| - 1\}:
1057
+ * \#\{i\in\{0, \dots, |x| - 1\} | x_i = v_j\} = c_j \f$
1058
+ *
1059
+ * \param x variables on which to perform propagation
1060
+ * \param v containing the values connected to the cardinality
1061
+ * variables as specified below
1062
+ * \param c cardinality variables
1063
+ * \param m denotes the size of \a v and \a c
1064
+ * \param unspec denotes the upper bound for those values
1065
+ * not specified in \a v and \a c
1066
+ * \param all specifies whether the propagator uses all values in
1067
+ * the interval \f$ I=[min;max]\f$
1068
+ * \param min smallest domain value of \a x
1069
+ * \param max largest domain value of \a x
1070
+ * \param icl consistency level
1071
+ *
1072
+ * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1073
+ * and domain-consistency (\a icl = ICL_DOM).
1074
+ *
1075
+ * This interface requires that
1076
+ * \f$ \forall {i\in\{0, \dots, |x|-1\}}: dom(x_i)
1077
+ * \subseteq [min, \dots, max]\f$.
1078
+ * If \a all is set to true, every value from the interval
1079
+ * \f$ I=[min;max]\f$ is specified with cardinalities.
1080
+ * Otherwise, only specified values in \a v are used and unspecified values
1081
+ * may occur between 0 and \a unspec times.
1082
+ */
1083
+ GECODE_INT_EXPORT void
1084
+ gcc(Space* home,
1085
+ const IntVarArgs& x, const IntArgs& v, const IntVarArgs& c,
1086
+ int m, int unspec, bool all, int min, int max,
1087
+ IntConLevel icl);
1088
+ //@}
1089
+
1090
+ /**
1091
+ * \defgroup TaskIntIntBool Boolean constraints
1092
+ * \ingroup TaskIntInt
1093
+ */
1094
+
1095
+ //@{
1096
+ /// Post propagator for \f$ \lnot b_0 = b_1\f$
1097
+ GECODE_INT_EXPORT void
1098
+ bool_not(Space* home, BoolVar b0, BoolVar b1,
1099
+ IntConLevel=ICL_DEF);
1100
+
1101
+ /// Post propagator for \f$ b_0 = b_1\f$
1102
+ GECODE_INT_EXPORT void
1103
+ bool_eq(Space* home, BoolVar b0, BoolVar b1,
1104
+ IntConLevel=ICL_DEF);
1105
+
1106
+ /// Post propagator for \f$ b_0 \land b_1 = b_2 \f$
1107
+ GECODE_INT_EXPORT void
1108
+ bool_and(Space* home, BoolVar b0, BoolVar b1, BoolVar b2,
1109
+ IntConLevel=ICL_DEF);
1110
+ /// Post propagator for \f$ b_0 \land b_1 = b_2 \f$
1111
+ GECODE_INT_EXPORT void
1112
+ bool_and(Space* home, BoolVar b0, BoolVar b1, bool b2,
1113
+ IntConLevel=ICL_DEF);
1114
+ /// Post propagator for \f$ \bigwedge_{i=0}^{|b|-1} b_i = c\f$
1115
+ GECODE_INT_EXPORT void
1116
+ bool_and(Space* home, const BoolVarArgs& b, BoolVar c,
1117
+ IntConLevel=ICL_DEF);
1118
+ /// Post propagator for \f$ \bigwedge_{i=0}^{|b|-1} b_i = c\f$
1119
+ GECODE_INT_EXPORT void
1120
+ bool_and(Space* home, const BoolVarArgs& b, bool c,
1121
+ IntConLevel=ICL_DEF);
1122
+
1123
+ /// Post propagator for \f$ b_0 \lor b_1 = b_2 \f$
1124
+ GECODE_INT_EXPORT void
1125
+ bool_or(Space* home, BoolVar b0, BoolVar b1, BoolVar b2,
1126
+ IntConLevel=ICL_DEF);
1127
+ /// Post propagator for \f$ b_0 \lor b_1 = b_2 \f$
1128
+ GECODE_INT_EXPORT void
1129
+ bool_or(Space* home, BoolVar b0, BoolVar b1, bool b2,
1130
+ IntConLevel=ICL_DEF);
1131
+ /// Post propagator for \f$ \bigvee_{i=0}^{|b|-1} b_i = c\f$
1132
+ GECODE_INT_EXPORT void
1133
+ bool_or(Space* home, const BoolVarArgs& b, BoolVar c,
1134
+ IntConLevel=ICL_DEF);
1135
+ /// Post propagator for \f$ \bigvee_{i=0}^{|b|-1} b_i = c\f$
1136
+ GECODE_INT_EXPORT void
1137
+ bool_or(Space* home, const BoolVarArgs& b, bool c,
1138
+ IntConLevel=ICL_DEF);
1139
+
1140
+ /// Post propagator for \f$ b_0 \Rightarrow b_1 = b_2 \f$ (implication)
1141
+ GECODE_INT_EXPORT void
1142
+ bool_imp(Space* home, BoolVar b0, BoolVar b1, BoolVar b2,
1143
+ IntConLevel=ICL_DEF);
1144
+ /// Post propagator for \f$ b_0 \Rightarrow b_1 = b_2 \f$ (implication)
1145
+ GECODE_INT_EXPORT void
1146
+ bool_imp(Space* home, BoolVar b0, BoolVar b1, bool b2,
1147
+ IntConLevel=ICL_DEF);
1148
+
1149
+ /// Post propagator for \f$ b_0 \Leftrightarrow b_1 = b_2 \f$ (equivalence)
1150
+ GECODE_INT_EXPORT void
1151
+ bool_eqv(Space* home, BoolVar b0, BoolVar b1, BoolVar b2,
1152
+ IntConLevel=ICL_DEF);
1153
+ /// Post propagator for \f$ b_0 \Leftrightarrow b_1 = b_2 \f$ (equivalence)
1154
+ GECODE_INT_EXPORT void
1155
+ bool_eqv(Space* home, BoolVar b0, BoolVar b1, bool b2,
1156
+ IntConLevel=ICL_DEF);
1157
+ /// Post propagator for \f$ b_1 \otimes b_2 = b_3 \f$ (exclusive or)
1158
+ GECODE_INT_EXPORT void
1159
+ bool_xor(Space* home, BoolVar b0, BoolVar b1, BoolVar b2,
1160
+ IntConLevel=ICL_DEF);
1161
+ /// Post propagator for \f$ b_1 \otimes b_2 = b_3 \f$ (exclusive or)
1162
+ GECODE_INT_EXPORT void
1163
+ bool_xor(Space* home, BoolVar b0, BoolVar b1, bool b2,
1164
+ IntConLevel=ICL_DEF);
1165
+
1166
+ //@}
1167
+
1168
+ /**
1169
+ * \defgroup TaskIntIntArith Arithmetic constraints
1170
+ * \ingroup TaskIntInt
1171
+ */
1172
+
1173
+ //@{
1174
+ /** \brief Post propagator for \f$ \min\{x_0,x_1\}=x_2\f$
1175
+ *
1176
+ * Only bounds-consistency is supported.
1177
+ */
1178
+ GECODE_INT_EXPORT void
1179
+ min(Space* home, IntVar x0, IntVar x1, IntVar x2,
1180
+ IntConLevel=ICL_DEF);
1181
+ /** \brief Post propagator for \f$ \min x=y\f$
1182
+ *
1183
+ * Only bounds-consistency is supported.
1184
+ */
1185
+ GECODE_INT_EXPORT void
1186
+ min(Space* home, const IntVarArgs& x, IntVar y,
1187
+ IntConLevel=ICL_DEF);
1188
+ /** \brief Post propagator for \f$ \max\{x_0,x_1\}=x_2\f$
1189
+ *
1190
+ * Only bounds-consistency is supported. If \a x is empty,
1191
+ * an exception of type Int::ArgumentEmpty is thrown.
1192
+ */
1193
+ GECODE_INT_EXPORT void
1194
+ max(Space* home, IntVar x0, IntVar x1, IntVar x2,
1195
+ IntConLevel=ICL_DEF);
1196
+ /** \brief Post propagator for \f$ \max x=y\f$
1197
+ *
1198
+ * Only bounds-consistency is supported. If \a x is empty,
1199
+ * an exception of type Int::ArgumentEmpty is thrown.
1200
+ */
1201
+ GECODE_INT_EXPORT void
1202
+ max(Space* home, const IntVarArgs& x, IntVar y,
1203
+ IntConLevel=ICL_DEF);
1204
+
1205
+ /** \brief Post propagator for \f$ |x_0|=x_1\f$
1206
+ *
1207
+ * Only bounds-consistency is supported.
1208
+ */
1209
+ GECODE_INT_EXPORT void
1210
+ abs(Space* home, IntVar x0, IntVar x1,
1211
+ IntConLevel=ICL_DEF);
1212
+
1213
+ /** \brief Post propagator for \f$x_0\cdot x_1=x_2\f$
1214
+ *
1215
+ * Only bounds-consistency is supported. The propagator
1216
+ * is overflow safe.
1217
+ */
1218
+ GECODE_INT_EXPORT void
1219
+ mult(Space* home, IntVar x0, IntVar x1, IntVar x2,
1220
+ IntConLevel=ICL_DEF);
1221
+ //@}
1222
+
1223
+ /**
1224
+ * \defgroup TaskIntIntLinear Linear constraints
1225
+ * \ingroup TaskIntInt
1226
+ *
1227
+ * All variants for linear constraints share the following properties:
1228
+ * - Bounds-consistency (over the real numbers) is supported for
1229
+ * all constraints (actually, for disequlities always domain-consistency
1230
+ * is used as it is cheaper). Domain-consistency is supported for all
1231
+ * non-reified constraint. As bounds-consistency for inequalities
1232
+ * coincides with domain-consistency, the only
1233
+ * real variation is for linear equations). Domain-consistent
1234
+ * linear equations are exponential, so use with care!
1235
+ * - Variables occurring multiply in the argument arrays are replaced
1236
+ * by a single occurrence: for example, \f$ax+bx\f$ becomes
1237
+ * \f$(a+b)x\f$.
1238
+ * - If in the above simplification the value for \f$(a+b)\f$ (or for
1239
+ * \f$a\f$ and \f$b\f$) exceeds the limits for integers as
1240
+ * defined in Limits::Int, an exception of type
1241
+ * Int::NumericalOverflow is thrown.
1242
+ * - Assume the constraint
1243
+ * \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$.
1244
+ * If \f$|c|+\sum_{i=0}^{|x|-1}a_i\cdot x_i\f$ exceeds the limits
1245
+ * for doubles as defined in Limits::Int, an exception of
1246
+ * type Int::NumericalOverflow is thrown.
1247
+ * - In all other cases, the created propagators are accurate (that
1248
+ * is, they will not silently overflow during propagation).
1249
+ */
1250
+
1251
+ //@{
1252
+ /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r c\f$
1253
+ GECODE_INT_EXPORT void
1254
+ linear(Space* home, const IntVarArgs& x,
1255
+ IntRelType r, int c,
1256
+ IntConLevel=ICL_DEF);
1257
+ /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r y\f$
1258
+ GECODE_INT_EXPORT void
1259
+ linear(Space* home, const IntVarArgs& x,
1260
+ IntRelType r, IntVar y,
1261
+ IntConLevel=ICL_DEF);
1262
+ /// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i\sim_r c\right)\Leftrightarrow b\f$
1263
+ GECODE_INT_EXPORT void
1264
+ linear(Space* home, const IntVarArgs& x,
1265
+ IntRelType r, int c, BoolVar b, IntConLevel=ICL_DEF);
1266
+ /// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i\sim_r y\right)\Leftrightarrow b\f$
1267
+ GECODE_INT_EXPORT void
1268
+ linear(Space* home, const IntVarArgs& x,
1269
+ IntRelType r, IntVar y, BoolVar b, IntConLevel=ICL_DEF);
1270
+ /** \brief Post propagator for \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$
1271
+ *
1272
+ * Throws an exception of type Int::ArgumentSizeMismatch, if
1273
+ * \a a and \a x are of different size.
1274
+ */
1275
+ GECODE_INT_EXPORT void
1276
+ linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1277
+ IntRelType r, int c,
1278
+ IntConLevel=ICL_DEF);
1279
+ /** \brief Post propagator for \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r y\f$
1280
+ *
1281
+ * Throws an exception of type Int::ArgumentSizeMismatch, if
1282
+ * \a a and \a x are of different size.
1283
+ */
1284
+ GECODE_INT_EXPORT void
1285
+ linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1286
+ IntRelType r, IntVar y,
1287
+ IntConLevel=ICL_DEF);
1288
+ /** \brief Post propagator for \f$\left(\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\right)\Leftrightarrow b\f$
1289
+ *
1290
+ * Throws an exception of type Int::ArgumentSizeMismatch, if
1291
+ * \a a and \a x are of different size.
1292
+ */
1293
+ GECODE_INT_EXPORT void
1294
+ linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1295
+ IntRelType r, int c, BoolVar b,
1296
+ IntConLevel=ICL_DEF);
1297
+ /** \brief Post propagator for \f$\left(\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r y\right)\Leftrightarrow b\f$
1298
+ *
1299
+ * Throws an exception of type Int::ArgumentSizeMismatch, if
1300
+ * \a a and \a x are of different size.
1301
+ */
1302
+ GECODE_INT_EXPORT void
1303
+ linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1304
+ IntRelType r, IntVar y, BoolVar b,
1305
+ IntConLevel=ICL_DEF);
1306
+
1307
+ /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r c\f$
1308
+ GECODE_INT_EXPORT void
1309
+ linear(Space* home, const BoolVarArgs& x,
1310
+ IntRelType r, int c,
1311
+ IntConLevel=ICL_DEF);
1312
+
1313
+ /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r y\f$
1314
+ GECODE_INT_EXPORT void
1315
+ linear(Space* home, const BoolVarArgs& x,
1316
+ IntRelType r, IntVar y,
1317
+ IntConLevel=ICL_DEF);
1318
+
1319
+ //@}
1320
+
1321
+
1322
+ /**
1323
+ * \defgroup TaskIntIntBranch Branching
1324
+ * \ingroup TaskIntInt
1325
+ */
1326
+
1327
+ //@{
1328
+ /// Which variable to select for branching
1329
+ enum BvarSel {
1330
+ BVAR_NONE, ///< First unassigned
1331
+ BVAR_MIN_MIN, ///< With smallest min
1332
+ BVAR_MIN_MAX, ///< With largest min
1333
+ BVAR_MAX_MIN, ///< With smallest max
1334
+ BVAR_MAX_MAX, ///< With largest max
1335
+ BVAR_SIZE_MIN, ///< With smallest domain size
1336
+ BVAR_SIZE_MAX, ///< With largest domain size
1337
+ /** \brief With smallest degree
1338
+ *
1339
+ * The degree of a variable is defined as the number of dependant
1340
+ * propagators. In case of ties, choose the variable with smallest
1341
+ * domain.
1342
+ */
1343
+ BVAR_DEGREE_MIN,
1344
+ /** \brief With largest degree
1345
+ *
1346
+ * The degree of a variable is defined as the number of dependant
1347
+ * propagators. In case of ties, choose the variable with smallest
1348
+ * domain.
1349
+ */
1350
+ BVAR_DEGREE_MAX,
1351
+ /** \brief With smallest min-regret
1352
+ *
1353
+ * The min-regret of a variable is the difference between the
1354
+ * smallest and second-smallest value still in the domain.
1355
+ */
1356
+ BVAR_REGRET_MIN_MIN,
1357
+ /** \brief With largest min-regret
1358
+ *
1359
+ * The min-regret of a variable is the difference between the
1360
+ * smallest and second-smallest value still in the domain.
1361
+ */
1362
+ BVAR_REGRET_MIN_MAX,
1363
+ /** \brief With smallest max-regret
1364
+ *
1365
+ * The max-regret of a variable is the difference between the
1366
+ * largest and second-largest value still in the domain.
1367
+ */
1368
+ BVAR_REGRET_MAX_MIN,
1369
+ /** \brief With largest max-regret
1370
+ *
1371
+ * The max-regret of a variable is the difference between the
1372
+ * largest and second-largest value still in the domain.
1373
+ */
1374
+ BVAR_REGRET_MAX_MAX
1375
+ };
1376
+
1377
+ /// Which values to select first for branching
1378
+ enum BvalSel {
1379
+ BVAL_MIN, ///< Select smallest value
1380
+ BVAL_MED, ///< Select median value
1381
+ BVAL_MAX, ///< Select maximal value
1382
+ BVAL_SPLIT_MIN, ///< Select lower half of domain
1383
+ BVAL_SPLIT_MAX ///< Select upper half of domain
1384
+ };
1385
+
1386
+ /// Branch over all \a x with variable selection \a vars and value selection \a vals
1387
+ GECODE_INT_EXPORT void
1388
+ branch(Space* home, const IntVarArgs& x, BvarSel vars, BvalSel vals);
1389
+ //@}
1390
+
1391
+ /**
1392
+ * \defgroup TaskIntIntAssign Assigning
1393
+ * \ingroup TaskIntInt
1394
+ */
1395
+ //@{
1396
+ /// Which value to select for assignment
1397
+ enum AvalSel {
1398
+ AVAL_MIN, ///< Select smallest value
1399
+ AVAL_MED, ///< Select median value
1400
+ AVAL_MAX ///< Select maximum value
1401
+ };
1402
+
1403
+ /// Assign all \a x with value selection \a vals
1404
+ GECODE_INT_EXPORT void
1405
+ assign(Space* home, const IntVarArgs& x, AvalSel vals);
1406
+
1407
+ //@}
1408
+
1409
+ }
1410
+
1411
+ /** \relates Gecode::REG
1412
+ * Print regular expression \a r
1413
+ */
1414
+ GECODE_INT_EXPORT std::ostream&
1415
+ operator<<(std::ostream&, const Gecode::REG& r);
1416
+
1417
+ /** \relates Gecode::DFA
1418
+ * Print DFA \a d
1419
+ */
1420
+ GECODE_INT_EXPORT std::ostream&
1421
+ operator<<(std::ostream&, const Gecode::DFA& d);
1422
+
1423
+ #endif
1424
+
1425
+ // STATISTICS: int-post
1426
+