gecoder-with-gecode 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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
+