gecoder-with-gecode 0.9.0 → 0.9.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 (919) hide show
  1. data/CHANGES +6 -0
  2. data/README +1 -1
  3. data/THANKS +18 -0
  4. data/example/equation_system.rb +3 -1
  5. data/example/magic_sequence.rb +3 -1
  6. data/example/queens.rb +3 -1
  7. data/example/send_more_money.rb +24 -30
  8. data/example/send_most_money.rb +15 -26
  9. data/example/square_tiling.rb +3 -1
  10. data/example/sudoku-set.rb +3 -1
  11. data/ext/{gecode-2.1.1 → gecode-2.2.0}/LICENSE +0 -0
  12. data/ext/{gecode-2.1.1 → gecode-2.2.0}/Makefile.contribs +0 -0
  13. data/ext/gecode-2.2.0/Makefile.dep +8056 -0
  14. data/ext/gecode-2.2.0/Makefile.in +1590 -0
  15. data/ext/gecode-2.2.0/changelog.in +2698 -0
  16. data/ext/gecode-2.2.0/configure +13112 -0
  17. data/ext/gecode-2.2.0/configure.ac +273 -0
  18. data/ext/gecode-2.2.0/configure.ac.in +269 -0
  19. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/README +0 -0
  20. data/ext/gecode-2.2.0/contribs/qecode/Doxyfile +263 -0
  21. data/ext/gecode-2.2.0/contribs/qecode/Implicative.cc +267 -0
  22. data/ext/gecode-2.2.0/contribs/qecode/Implicative.hh +164 -0
  23. data/ext/gecode-2.2.0/contribs/qecode/Makefile.in.in +163 -0
  24. data/ext/gecode-2.2.0/contribs/qecode/OptVar.cc +82 -0
  25. data/ext/gecode-2.2.0/contribs/qecode/OptVar.hh +123 -0
  26. data/ext/gecode-2.2.0/contribs/qecode/Strategy.cc +131 -0
  27. data/ext/gecode-2.2.0/contribs/qecode/Strategy.hh +91 -0
  28. data/ext/gecode-2.2.0/contribs/qecode/StrategyNode.cc +62 -0
  29. data/ext/gecode-2.2.0/contribs/qecode/StrategyNode.hh +47 -0
  30. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/output.0 +2264 -0
  31. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/requests +115 -0
  32. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/traces.0 +57 -0
  33. data/ext/gecode-2.2.0/contribs/qecode/config.log +147 -0
  34. data/ext/gecode-2.2.0/contribs/qecode/config.status +817 -0
  35. data/ext/gecode-2.2.0/contribs/qecode/configure +2264 -0
  36. data/ext/gecode-2.2.0/contribs/qecode/configure.ac +23 -0
  37. data/ext/gecode-2.2.0/contribs/qecode/examples/COMPILING +13 -0
  38. data/ext/gecode-2.2.0/contribs/qecode/examples/MatrixGame.cpp +140 -0
  39. data/ext/gecode-2.2.0/contribs/qecode/examples/NimFibo.cpp +73 -0
  40. data/ext/gecode-2.2.0/contribs/qecode/examples/connect-5-3-3-3.cpp +842 -0
  41. data/ext/gecode-2.2.0/contribs/qecode/examples/network-pricing.cc +146 -0
  42. data/ext/gecode-2.2.0/contribs/qecode/examples/optim2.cc +149 -0
  43. data/ext/gecode-2.2.0/contribs/qecode/examples/stress_test.cpp +240 -0
  44. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/heap.cc +0 -0
  45. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/myDom.cc +0 -0
  46. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/myspace.cc +0 -0
  47. data/ext/gecode-2.2.0/contribs/qecode/myspace.hh +68 -0
  48. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/qecode.hh +0 -0
  49. data/ext/gecode-2.2.0/contribs/qecode/qsolver.cc +268 -0
  50. data/ext/gecode-2.2.0/contribs/qecode/qsolver.hh +46 -0
  51. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/shortdesc.ac +0 -0
  52. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/vartype.hh +0 -0
  53. data/ext/{gecode-2.1.1 → gecode-2.2.0}/doxygen/doxygen.conf.in +0 -0
  54. data/ext/gecode-2.2.0/doxygen/doxygen.hh.in +1112 -0
  55. data/ext/gecode-2.2.0/doxygen/reflection.hh +417 -0
  56. data/ext/gecode-2.2.0/examples/all-interval.cc +133 -0
  57. data/ext/gecode-2.2.0/examples/alpha.cc +137 -0
  58. data/ext/gecode-2.2.0/examples/bacp.cc +521 -0
  59. data/ext/gecode-2.2.0/examples/baseline.cc +87 -0
  60. data/ext/gecode-2.2.0/examples/bibd.cc +203 -0
  61. data/ext/gecode-2.2.0/examples/black-hole.cc +389 -0
  62. data/ext/gecode-2.2.0/examples/crew.cc +286 -0
  63. data/ext/gecode-2.2.0/examples/crowded-chess.cc +424 -0
  64. data/ext/gecode-2.2.0/examples/domino.cc +297 -0
  65. data/ext/gecode-2.2.0/examples/donald.cc +107 -0
  66. data/ext/gecode-2.2.0/examples/eq20.cc +125 -0
  67. data/ext/gecode-2.2.0/examples/golf.cc +297 -0
  68. data/ext/gecode-2.2.0/examples/golomb-ruler.cc +199 -0
  69. data/ext/gecode-2.2.0/examples/graph-color.cc +407 -0
  70. data/ext/gecode-2.2.0/examples/grocery.cc +113 -0
  71. data/ext/gecode-2.2.0/examples/hamming.cc +129 -0
  72. data/ext/gecode-2.2.0/examples/ind-set.cc +143 -0
  73. data/ext/gecode-2.2.0/examples/javascript.cc +163 -0
  74. data/ext/gecode-2.2.0/examples/kakuro.cc +686 -0
  75. data/ext/gecode-2.2.0/examples/knights.cc +220 -0
  76. data/ext/gecode-2.2.0/examples/langford-number.cc +225 -0
  77. data/ext/gecode-2.2.0/examples/magic-sequence.cc +146 -0
  78. data/ext/gecode-2.2.0/examples/magic-square.cc +138 -0
  79. data/ext/gecode-2.2.0/examples/minesweeper.cc +304 -0
  80. data/ext/gecode-2.2.0/examples/money.cc +105 -0
  81. data/ext/gecode-2.2.0/examples/nonogram.cc +492 -0
  82. data/ext/gecode-2.2.0/examples/ortho-latin.cc +172 -0
  83. data/ext/gecode-2.2.0/examples/partition.cc +141 -0
  84. data/ext/gecode-2.2.0/examples/pentominoes.cc +949 -0
  85. data/ext/gecode-2.2.0/examples/perfect-square.cc +311 -0
  86. data/ext/gecode-2.2.0/examples/photo.cc +170 -0
  87. data/ext/gecode-2.2.0/examples/queen-armies.cc +284 -0
  88. data/ext/gecode-2.2.0/examples/queens.cc +147 -0
  89. data/ext/gecode-2.2.0/examples/queens.js +57 -0
  90. data/ext/gecode-2.2.0/examples/sports-league.cc +342 -0
  91. data/ext/gecode-2.2.0/examples/steiner.cc +192 -0
  92. data/ext/gecode-2.2.0/examples/stress-distinct.cc +90 -0
  93. data/ext/gecode-2.2.0/examples/stress-domain.cc +99 -0
  94. data/ext/gecode-2.2.0/examples/stress-element.cc +112 -0
  95. data/ext/gecode-2.2.0/examples/stress-exec.cc +97 -0
  96. data/ext/gecode-2.2.0/examples/stress-extensional.cc +134 -0
  97. data/ext/gecode-2.2.0/examples/stress-linear-bool.cc +97 -0
  98. data/ext/gecode-2.2.0/examples/stress-min.cc +98 -0
  99. data/ext/gecode-2.2.0/examples/stress-search.cc +88 -0
  100. data/ext/gecode-2.2.0/examples/sudoku.cc +2341 -0
  101. data/ext/gecode-2.2.0/examples/support.hh +338 -0
  102. data/ext/gecode-2.2.0/examples/support/example.cc +64 -0
  103. data/ext/gecode-2.2.0/examples/support/example.icc +321 -0
  104. data/ext/gecode-2.2.0/examples/support/options.cc +226 -0
  105. data/ext/gecode-2.2.0/examples/support/options.icc +276 -0
  106. data/ext/gecode-2.2.0/examples/tsp.cc +317 -0
  107. data/ext/gecode-2.2.0/examples/warehouses.cc +191 -0
  108. data/ext/gecode-2.2.0/gecode.m4 +1046 -0
  109. data/ext/gecode-2.2.0/gecode/cpltset.hh +797 -0
  110. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/array.cc +0 -0
  111. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/array.icc +0 -0
  112. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/bddmanager.cc +0 -0
  113. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/bddmanager.icc +0 -0
  114. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch.cc +0 -0
  115. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch.hh +0 -0
  116. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch/select-val.icc +0 -0
  117. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch/select-view.icc +0 -0
  118. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/atmost.cc +0 -0
  119. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/cardinality.cc +0 -0
  120. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/distinct.cc +0 -0
  121. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/dom.cc +0 -0
  122. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/partition.cc +0 -0
  123. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/rangeroots.cc +0 -0
  124. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/rel.cc +0 -0
  125. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/select.cc +0 -0
  126. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/singleton.cc +0 -0
  127. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/exception.icc +0 -0
  128. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators.hh +0 -0
  129. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/binary.icc +0 -0
  130. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/nary.icc +0 -0
  131. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/naryone.icc +0 -0
  132. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/narytwo.icc +0 -0
  133. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/singleton.icc +0 -0
  134. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/unary.icc +0 -0
  135. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/support.cc +0 -0
  136. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/support.icc +0 -0
  137. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp.icc +0 -0
  138. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.cc +0 -0
  139. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.icc +0 -0
  140. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.vis +0 -0
  141. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var/cpltset.cc +0 -0
  142. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var/cpltset.icc +0 -0
  143. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view.icc +0 -0
  144. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view/cpltset.icc +0 -0
  145. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view/print.cc +0 -0
  146. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist.hh +0 -0
  147. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addchild.cc +0 -0
  148. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addchild.hh +0 -0
  149. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addvisualisationdialog.cc +0 -0
  150. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addvisualisationdialog.hh +0 -0
  151. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/better.hh +0 -0
  152. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/config.cc +0 -0
  153. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/config.hh +0 -0
  154. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.cc +281 -0
  155. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.hh +103 -0
  156. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.icc +70 -0
  157. data/ext/gecode-2.2.0/gecode/gist/gecodelogo.cc +672 -0
  158. data/ext/gecode-2.2.0/gecode/gist/gecodelogo.hh +64 -0
  159. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/gist.cc +0 -0
  160. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/gist.icc +0 -0
  161. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.cc +115 -0
  162. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.hh +75 -0
  163. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.icc +48 -0
  164. data/ext/gecode-2.2.0/gecode/gist/mainwindow.cc +274 -0
  165. data/ext/gecode-2.2.0/gecode/gist/mainwindow.hh +86 -0
  166. data/ext/gecode-2.2.0/gecode/gist/node.cc +148 -0
  167. data/ext/gecode-2.2.0/gecode/gist/node.hh +117 -0
  168. data/ext/gecode-2.2.0/gecode/gist/node.icc +99 -0
  169. data/ext/gecode-2.2.0/gecode/gist/nodecursor.cc +123 -0
  170. data/ext/gecode-2.2.0/gecode/gist/nodecursor.hh +147 -0
  171. data/ext/gecode-2.2.0/gecode/gist/nodecursor.icc +122 -0
  172. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/nodevisitor.hh +0 -0
  173. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/nodevisitor.icc +0 -0
  174. data/ext/gecode-2.2.0/gecode/gist/preferences.cc +120 -0
  175. data/ext/gecode-2.2.0/gecode/gist/preferences.hh +79 -0
  176. data/ext/gecode-2.2.0/gecode/gist/spacenode.cc +468 -0
  177. data/ext/gecode-2.2.0/gecode/gist/spacenode.hh +227 -0
  178. data/ext/gecode-2.2.0/gecode/gist/spacenode.icc +170 -0
  179. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/test.cc +0 -0
  180. data/ext/gecode-2.2.0/gecode/gist/textoutput.cc +134 -0
  181. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/textoutput.hh +0 -0
  182. data/ext/gecode-2.2.0/gecode/gist/treecanvas.cc +1343 -0
  183. data/ext/gecode-2.2.0/gecode/gist/treecanvas.hh +361 -0
  184. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/ui_addchild.hh +0 -0
  185. data/ext/gecode-2.2.0/gecode/gist/ui_addvisualisationdialog.hh +165 -0
  186. data/ext/gecode-2.2.0/gecode/gist/visualisation/intvaritem.cc +192 -0
  187. data/ext/gecode-2.2.0/gecode/gist/visualisation/intvaritem.hh +75 -0
  188. data/ext/gecode-2.2.0/gecode/gist/visualisation/setvaritem.cc +235 -0
  189. data/ext/gecode-2.2.0/gecode/gist/visualisation/setvaritem.hh +77 -0
  190. data/ext/gecode-2.2.0/gecode/gist/visualisation/vararrayitem.hh +125 -0
  191. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayview.cc +0 -0
  192. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayview.hh +0 -0
  193. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayviewt.hh +0 -0
  194. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/varitem.cc +0 -0
  195. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/varitem.hh +0 -0
  196. data/ext/gecode-2.2.0/gecode/gist/visualnode.cc +474 -0
  197. data/ext/gecode-2.2.0/gecode/gist/visualnode.hh +226 -0
  198. data/ext/gecode-2.2.0/gecode/gist/visualnode.icc +198 -0
  199. data/ext/gecode-2.2.0/gecode/gist/zoomToFitIcon.icc +113 -0
  200. data/ext/gecode-2.2.0/gecode/int.hh +2116 -0
  201. data/ext/gecode-2.2.0/gecode/int/arithmetic.cc +237 -0
  202. data/ext/gecode-2.2.0/gecode/int/arithmetic.hh +827 -0
  203. data/ext/gecode-2.2.0/gecode/int/arithmetic/abs.icc +278 -0
  204. data/ext/gecode-2.2.0/gecode/int/arithmetic/divmod.icc +496 -0
  205. data/ext/gecode-2.2.0/gecode/int/arithmetic/max.icc +474 -0
  206. data/ext/gecode-2.2.0/gecode/int/arithmetic/mult.icc +858 -0
  207. data/ext/gecode-2.2.0/gecode/int/arithmetic/sqr.icc +464 -0
  208. data/ext/gecode-2.2.0/gecode/int/arithmetic/sqrt.icc +260 -0
  209. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/array.cc +0 -0
  210. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/array.icc +0 -0
  211. data/ext/gecode-2.2.0/gecode/int/bool.cc +734 -0
  212. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool.hh +0 -0
  213. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/base.icc +0 -0
  214. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/eq.icc +0 -0
  215. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/eqv.icc +0 -0
  216. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/lq.icc +0 -0
  217. data/ext/gecode-2.2.0/gecode/int/bool/or.icc +1000 -0
  218. data/ext/gecode-2.2.0/gecode/int/branch.cc +167 -0
  219. data/ext/gecode-2.2.0/gecode/int/branch.hh +587 -0
  220. data/ext/gecode-2.2.0/gecode/int/branch/create-branch.icc +190 -0
  221. data/ext/gecode-2.2.0/gecode/int/branch/select-val.icc +340 -0
  222. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/branch/select-view.icc +0 -0
  223. data/ext/gecode-2.2.0/gecode/int/channel.cc +165 -0
  224. data/ext/gecode-2.2.0/gecode/int/channel.hh +259 -0
  225. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/base.icc +0 -0
  226. data/ext/gecode-2.2.0/gecode/int/channel/dom.icc +348 -0
  227. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-multi.cc +0 -0
  228. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-multi.icc +0 -0
  229. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-single.cc +0 -0
  230. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-single.icc +0 -0
  231. data/ext/gecode-2.2.0/gecode/int/channel/val.icc +278 -0
  232. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/circuit.cc +0 -0
  233. data/ext/gecode-2.2.0/gecode/int/circuit.hh +175 -0
  234. data/ext/gecode-2.2.0/gecode/int/circuit/base.icc +266 -0
  235. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/circuit/dom.icc +0 -0
  236. data/ext/gecode-2.2.0/gecode/int/circuit/val.icc +126 -0
  237. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/count.cc +0 -0
  238. data/ext/gecode-2.2.0/gecode/int/count.hh +487 -0
  239. data/ext/gecode-2.2.0/gecode/int/count/int.icc +620 -0
  240. data/ext/gecode-2.2.0/gecode/int/count/rel.icc +144 -0
  241. data/ext/gecode-2.2.0/gecode/int/count/view.icc +449 -0
  242. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/cumulatives.cc +0 -0
  243. data/ext/gecode-2.2.0/gecode/int/cumulatives.hh +138 -0
  244. data/ext/gecode-2.2.0/gecode/int/cumulatives/val.icc +455 -0
  245. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct.cc +0 -0
  246. data/ext/gecode-2.2.0/gecode/int/distinct.hh +341 -0
  247. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/bilink.icc +0 -0
  248. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/bnd.icc +0 -0
  249. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/combptr.icc +0 -0
  250. data/ext/gecode-2.2.0/gecode/int/distinct/dom.icc +752 -0
  251. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/edge.icc +0 -0
  252. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/node.icc +0 -0
  253. data/ext/gecode-2.2.0/gecode/int/distinct/ter-dom.icc +136 -0
  254. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/val.icc +0 -0
  255. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom.cc +0 -0
  256. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom.hh +0 -0
  257. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom/range.icc +0 -0
  258. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom/spec.icc +0 -0
  259. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/element.cc +0 -0
  260. data/ext/gecode-2.2.0/gecode/int/element.hh +239 -0
  261. data/ext/gecode-2.2.0/gecode/int/element/int.icc +444 -0
  262. data/ext/gecode-2.2.0/gecode/int/element/view.icc +584 -0
  263. data/ext/gecode-2.2.0/gecode/int/exception.icc +174 -0
  264. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional.cc +0 -0
  265. data/ext/gecode-2.2.0/gecode/int/extensional.hh +415 -0
  266. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/base.icc +0 -0
  267. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/basic.icc +0 -0
  268. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/bitset.icc +0 -0
  269. data/ext/gecode-2.2.0/gecode/int/extensional/dfa.cc +565 -0
  270. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/dfa.icc +0 -0
  271. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/incremental.icc +0 -0
  272. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/layered-graph.icc +0 -0
  273. data/ext/gecode-2.2.0/gecode/int/extensional/tuple-set.cc +285 -0
  274. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/tuple-set.icc +0 -0
  275. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc.cc +0 -0
  276. data/ext/gecode-2.2.0/gecode/int/gcc.hh +329 -0
  277. data/ext/gecode-2.2.0/gecode/int/gcc/bnd.icc +660 -0
  278. data/ext/gecode-2.2.0/gecode/int/gcc/dom.icc +531 -0
  279. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/gccbndsup.icc +0 -0
  280. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/graphsup.icc +0 -0
  281. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/lbc.icc +0 -0
  282. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/occur.icc +0 -0
  283. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/ubc.icc +0 -0
  284. data/ext/gecode-2.2.0/gecode/int/gcc/val.icc +400 -0
  285. data/ext/gecode-2.2.0/gecode/int/int-set.cc +157 -0
  286. data/ext/gecode-2.2.0/gecode/int/int-set.icc +195 -0
  287. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/limits.icc +0 -0
  288. data/ext/gecode-2.2.0/gecode/int/linear-bool.cc +235 -0
  289. data/ext/gecode-2.2.0/gecode/int/linear-int.cc +272 -0
  290. data/ext/gecode-2.2.0/gecode/int/linear.hh +1849 -0
  291. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-int.icc +0 -0
  292. data/ext/gecode-2.2.0/gecode/int/linear/bool-post.cc +433 -0
  293. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-scale.icc +0 -0
  294. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-view.icc +0 -0
  295. data/ext/gecode-2.2.0/gecode/int/linear/int-bin.icc +605 -0
  296. data/ext/gecode-2.2.0/gecode/int/linear/int-dom.icc +539 -0
  297. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-nary.icc +0 -0
  298. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-noview.icc +0 -0
  299. data/ext/gecode-2.2.0/gecode/int/linear/int-post.cc +493 -0
  300. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-ter.icc +0 -0
  301. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/post.icc +0 -0
  302. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/propagator.icc +0 -0
  303. data/ext/gecode-2.2.0/gecode/int/rel.cc +420 -0
  304. data/ext/gecode-2.2.0/gecode/int/rel.hh +627 -0
  305. data/ext/gecode-2.2.0/gecode/int/rel/eq.icc +885 -0
  306. data/ext/gecode-2.2.0/gecode/int/rel/lex.icc +275 -0
  307. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/rel/lq-le.icc +0 -0
  308. data/ext/gecode-2.2.0/gecode/int/rel/nq.icc +118 -0
  309. data/ext/gecode-2.2.0/gecode/int/sorted.cc +81 -0
  310. data/ext/gecode-2.2.0/gecode/int/sorted.hh +118 -0
  311. data/ext/gecode-2.2.0/gecode/int/sorted/matching.icc +173 -0
  312. data/ext/gecode-2.2.0/gecode/int/sorted/narrowing.icc +249 -0
  313. data/ext/gecode-2.2.0/gecode/int/sorted/order.icc +212 -0
  314. data/ext/gecode-2.2.0/gecode/int/sorted/propagate.icc +702 -0
  315. data/ext/gecode-2.2.0/gecode/int/sorted/sortsup.icc +563 -0
  316. data/ext/gecode-2.2.0/gecode/int/support-values.hh +158 -0
  317. data/ext/gecode-2.2.0/gecode/int/support-values.icc +203 -0
  318. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/unshare.cc +0 -0
  319. data/ext/gecode-2.2.0/gecode/int/var-imp.icc +745 -0
  320. data/ext/gecode-2.2.0/gecode/int/var-imp/bool.cc +105 -0
  321. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/bool.icc +0 -0
  322. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/bool.vis +0 -0
  323. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/delta.icc +0 -0
  324. data/ext/gecode-2.2.0/gecode/int/var-imp/int.cc +408 -0
  325. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/int.icc +0 -0
  326. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/int.vis +0 -0
  327. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var/bool.cc +0 -0
  328. data/ext/gecode-2.2.0/gecode/int/var/bool.icc +128 -0
  329. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var/int.cc +0 -0
  330. data/ext/gecode-2.2.0/gecode/int/var/int.icc +153 -0
  331. data/ext/gecode-2.2.0/gecode/int/view.icc +1918 -0
  332. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/bool.icc +0 -0
  333. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/constint.icc +0 -0
  334. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/int.icc +0 -0
  335. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/iter.icc +0 -0
  336. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/minus.icc +0 -0
  337. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/offset.icc +0 -0
  338. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/print.cc +0 -0
  339. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/rtest.icc +0 -0
  340. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/scale.icc +0 -0
  341. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/zero.icc +0 -0
  342. data/ext/gecode-2.2.0/gecode/iter.hh +98 -0
  343. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-add.icc +0 -0
  344. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-append.icc +0 -0
  345. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-array.icc +0 -0
  346. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-cache.icc +0 -0
  347. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-compl.icc +0 -0
  348. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-diff.icc +0 -0
  349. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-empty.icc +0 -0
  350. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-inter.icc +0 -0
  351. data/ext/gecode-2.2.0/gecode/iter/ranges-map.icc +260 -0
  352. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-minmax.icc +0 -0
  353. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-minus.icc +0 -0
  354. data/ext/gecode-2.2.0/gecode/iter/ranges-negative.icc +137 -0
  355. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-offset.icc +0 -0
  356. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-operations.icc +0 -0
  357. data/ext/gecode-2.2.0/gecode/iter/ranges-positive.icc +139 -0
  358. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-scale.icc +0 -0
  359. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-singleton-append.icc +0 -0
  360. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-singleton.icc +0 -0
  361. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-size.icc +0 -0
  362. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-union.icc +0 -0
  363. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-values.icc +0 -0
  364. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-array.icc +0 -0
  365. data/ext/gecode-2.2.0/gecode/iter/values-inter.icc +130 -0
  366. data/ext/gecode-2.2.0/gecode/iter/values-map.icc +136 -0
  367. data/ext/gecode-2.2.0/gecode/iter/values-minus.icc +130 -0
  368. data/ext/gecode-2.2.0/gecode/iter/values-negative.icc +116 -0
  369. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-offset.icc +0 -0
  370. data/ext/gecode-2.2.0/gecode/iter/values-positive.icc +123 -0
  371. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-ranges.icc +0 -0
  372. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-singleton.icc +0 -0
  373. data/ext/gecode-2.2.0/gecode/iter/values-union.icc +137 -0
  374. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-unique.icc +0 -0
  375. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-compl.icc +0 -0
  376. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-inter.icc +0 -0
  377. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-union.icc +0 -0
  378. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges.icc +0 -0
  379. data/ext/gecode-2.2.0/gecode/kernel.hh +188 -0
  380. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/advisor.icc +0 -0
  381. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/array.icc +0 -0
  382. data/ext/gecode-2.2.0/gecode/kernel/branching.icc +433 -0
  383. data/ext/gecode-2.2.0/gecode/kernel/core.cc +474 -0
  384. data/ext/gecode-2.2.0/gecode/kernel/core.icc +2311 -0
  385. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/exception.icc +0 -0
  386. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/macros.icc +0 -0
  387. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/memory-manager.cc +0 -0
  388. data/ext/gecode-2.2.0/gecode/kernel/memory-manager.icc +454 -0
  389. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/modevent.icc +0 -0
  390. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/propagator.icc +0 -0
  391. data/ext/gecode-2.2.0/gecode/kernel/reflection.cc +951 -0
  392. data/ext/gecode-2.2.0/gecode/kernel/reflection.icc +1213 -0
  393. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/shared-array.icc +0 -0
  394. data/ext/gecode-2.2.0/gecode/kernel/var-imp.icc +433 -0
  395. data/ext/gecode-2.2.0/gecode/kernel/var-map.cc +269 -0
  396. data/ext/gecode-2.2.0/gecode/kernel/var-map.icc +230 -0
  397. data/ext/gecode-2.2.0/gecode/kernel/var-traits.icc +79 -0
  398. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/var-type.cc +0 -0
  399. data/ext/gecode-2.2.0/gecode/kernel/var-type.icc +915 -0
  400. data/ext/gecode-2.2.0/gecode/kernel/var.icc +114 -0
  401. data/ext/gecode-2.2.0/gecode/kernel/view.icc +413 -0
  402. data/ext/gecode-2.2.0/gecode/minimodel.hh +1206 -0
  403. data/ext/gecode-2.2.0/gecode/minimodel/arithmetic.icc +118 -0
  404. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-expr.cc +0 -0
  405. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-expr.icc +0 -0
  406. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-rel.icc +0 -0
  407. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/exception.icc +0 -0
  408. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/lin-expr.icc +0 -0
  409. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/lin-rel.icc +0 -0
  410. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/matrix.icc +0 -0
  411. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/reg.cc +0 -0
  412. data/ext/gecode-2.2.0/gecode/search.hh +759 -0
  413. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/bab.cc +0 -0
  414. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/bab.icc +0 -0
  415. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/dfs.cc +0 -0
  416. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/dfs.icc +0 -0
  417. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/engine-ctrl.icc +0 -0
  418. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/lds.cc +0 -0
  419. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/lds.icc +0 -0
  420. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/options.cc +0 -0
  421. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/options.icc +0 -0
  422. data/ext/gecode-2.2.0/gecode/search/reco-stack.icc +277 -0
  423. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/restart.icc +0 -0
  424. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/statistics.icc +0 -0
  425. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/stop.cc +0 -0
  426. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/stop.icc +0 -0
  427. data/ext/gecode-2.2.0/gecode/serialization.hh +149 -0
  428. data/ext/gecode-2.2.0/gecode/serialization/boost.cc +78 -0
  429. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/boost.icc +0 -0
  430. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/flatzinc.cc +0 -0
  431. data/ext/gecode-2.2.0/gecode/serialization/javascript.cc +343 -0
  432. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/javascript.hh +0 -0
  433. data/ext/gecode-2.2.0/gecode/serialization/register.cc +8498 -0
  434. data/ext/gecode-2.2.0/gecode/set.hh +970 -0
  435. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/array.cc +0 -0
  436. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/array.icc +0 -0
  437. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch.cc +0 -0
  438. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch.hh +0 -0
  439. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch/select-val.icc +0 -0
  440. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch/select-view.icc +0 -0
  441. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/cardinality.cc +0 -0
  442. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex.cc +0 -0
  443. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex.hh +0 -0
  444. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/conv.cc +0 -0
  445. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/conv.icc +0 -0
  446. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/hull.cc +0 -0
  447. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/hull.icc +0 -0
  448. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct.cc +0 -0
  449. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct.hh +0 -0
  450. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct/atmostOne.cc +0 -0
  451. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct/atmostOne.icc +0 -0
  452. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/dom.cc +0 -0
  453. data/ext/gecode-2.2.0/gecode/set/element.cc +135 -0
  454. data/ext/gecode-2.2.0/gecode/set/element.hh +233 -0
  455. data/ext/gecode-2.2.0/gecode/set/element/disjoint.cc +308 -0
  456. data/ext/gecode-2.2.0/gecode/set/element/disjoint.icc +75 -0
  457. data/ext/gecode-2.2.0/gecode/set/element/idxarray.hh +113 -0
  458. data/ext/gecode-2.2.0/gecode/set/element/idxarray.icc +155 -0
  459. data/ext/gecode-2.2.0/gecode/set/element/inter.icc +348 -0
  460. data/ext/gecode-2.2.0/gecode/set/element/union.icc +371 -0
  461. data/ext/gecode-2.2.0/gecode/set/element/unionConst.icc +334 -0
  462. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/exception.icc +0 -0
  463. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int.cc +0 -0
  464. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int.hh +0 -0
  465. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/card.icc +0 -0
  466. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/channel-bool.icc +0 -0
  467. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/channel-int.icc +0 -0
  468. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/match.icc +0 -0
  469. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/minmax.icc +0 -0
  470. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/weights.icc +0 -0
  471. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/limits.icc +0 -0
  472. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors-compiler.hh +0 -0
  473. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors.cc +0 -0
  474. data/ext/gecode-2.2.0/gecode/set/projectors.hh +438 -0
  475. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/compiler.cc +0 -0
  476. data/ext/gecode-2.2.0/gecode/set/projectors/formula.cc +312 -0
  477. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/formula.icc +0 -0
  478. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector-set.cc +0 -0
  479. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector-set.icc +0 -0
  480. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector.cc +0 -0
  481. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector.icc +0 -0
  482. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator.hh +0 -0
  483. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/card.icc +0 -0
  484. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/nary.icc +0 -0
  485. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/re-nary.cc +0 -0
  486. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/re-nary.icc +0 -0
  487. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/set-expr.cc +0 -0
  488. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/set-expr.icc +0 -0
  489. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/propagator.icc +0 -0
  490. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op-const.cc +0 -0
  491. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op.cc +0 -0
  492. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op.hh +0 -0
  493. data/ext/gecode-2.2.0/gecode/set/rel-op/common.icc +613 -0
  494. data/ext/gecode-2.2.0/gecode/set/rel-op/inter.icc +452 -0
  495. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/partition.icc +0 -0
  496. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/post.icc +0 -0
  497. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/subofunion.icc +0 -0
  498. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/superofinter.icc +0 -0
  499. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/union.icc +0 -0
  500. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel.cc +0 -0
  501. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel.hh +0 -0
  502. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/common.icc +0 -0
  503. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/eq.icc +0 -0
  504. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/nosubset.icc +0 -0
  505. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/nq.icc +0 -0
  506. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/re-eq.icc +0 -0
  507. data/ext/gecode-2.2.0/gecode/set/rel/re-subset.icc +174 -0
  508. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/subset.icc +0 -0
  509. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence.cc +0 -0
  510. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence.hh +0 -0
  511. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/common.icc +0 -0
  512. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq-u.cc +0 -0
  513. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq-u.icc +0 -0
  514. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq.cc +0 -0
  515. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq.icc +0 -0
  516. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp.icc +0 -0
  517. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/delta.icc +0 -0
  518. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/integerset.cc +0 -0
  519. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/integerset.icc +0 -0
  520. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/iter.icc +0 -0
  521. data/ext/gecode-2.2.0/gecode/set/var-imp/set.cc +215 -0
  522. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/set.icc +0 -0
  523. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/set.vis +0 -0
  524. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var/set.cc +0 -0
  525. data/ext/gecode-2.2.0/gecode/set/var/set.icc +303 -0
  526. data/ext/gecode-2.2.0/gecode/set/view.icc +1451 -0
  527. data/ext/gecode-2.2.0/gecode/set/view/complement.icc +614 -0
  528. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/const.icc +0 -0
  529. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/offset.icc +0 -0
  530. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/print.cc +0 -0
  531. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/set.icc +0 -0
  532. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/singleton.icc +0 -0
  533. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support.hh +0 -0
  534. data/ext/gecode-2.2.0/gecode/support/block-allocator.icc +159 -0
  535. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/AUTHORS +0 -0
  536. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/ChangeLog +0 -0
  537. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/NEWS +0 -0
  538. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/README +0 -0
  539. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bdd.h +0 -0
  540. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddio.c +0 -0
  541. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddop.c +0 -0
  542. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddtree.h +0 -0
  543. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bvec.c +0 -0
  544. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bvec.h +0 -0
  545. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cache.c +0 -0
  546. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cache.h +0 -0
  547. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/config.h +0 -0
  548. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cppext.cc +0 -0
  549. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/fdd.c +0 -0
  550. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/fdd.h +0 -0
  551. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/imatrix.c +0 -0
  552. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/imatrix.h +0 -0
  553. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/kernel.c +0 -0
  554. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/kernel.h +0 -0
  555. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/pairs.c +0 -0
  556. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/prime.c +0 -0
  557. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/prime.h +0 -0
  558. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/reorder.c +0 -0
  559. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/tree.c +0 -0
  560. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/cast.icc +0 -0
  561. data/ext/gecode-2.2.0/gecode/support/config.icc.in +83 -0
  562. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/dynamic-array.icc +0 -0
  563. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/dynamic-stack.icc +0 -0
  564. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/exception.cc +0 -0
  565. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/exception.icc +0 -0
  566. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/macros.icc +0 -0
  567. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/map.icc +0 -0
  568. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/marked-pointer.icc +0 -0
  569. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/memory.icc +0 -0
  570. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/random.icc +0 -0
  571. data/ext/gecode-2.2.0/gecode/support/sentinel-stack.icc +138 -0
  572. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/sort.icc +0 -0
  573. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/static-pqueue.icc +0 -0
  574. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/static-stack.icc +0 -0
  575. data/ext/gecode-2.2.0/gecode/support/symbol.cc +241 -0
  576. data/ext/gecode-2.2.0/gecode/support/symbol.icc +134 -0
  577. data/ext/{gecode-2.1.1 → gecode-2.2.0}/install-sh +0 -0
  578. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/AppleHelpbookInfo.plist +0 -0
  579. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/allexamples.perl +0 -0
  580. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/Makefile.am +0 -0
  581. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/changelog +0 -0
  582. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/control +0 -0
  583. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/copyright +0 -0
  584. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.info +0 -0
  585. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.install +0 -0
  586. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.spec +0 -0
  587. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/rules +0 -0
  588. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/back.png +0 -0
  589. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/footer.html +0 -0
  590. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/gecode-logo-100.png +0 -0
  591. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/header.html +0 -0
  592. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/stylesheet.css +0 -0
  593. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/fixproperties.sh +0 -0
  594. data/ext/gecode-2.2.0/misc/gecode-gist.pc.in +45 -0
  595. data/ext/gecode-2.2.0/misc/gecode-minimodel.pc.in +45 -0
  596. data/ext/gecode-2.2.0/misc/gecode-search.pc.in +45 -0
  597. data/ext/gecode-2.2.0/misc/gecode-serialization.pc.in +45 -0
  598. data/ext/gecode-2.2.0/misc/gecode.pc.in +45 -0
  599. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genchangelog.perl +0 -0
  600. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genlcovmakefile.perl +0 -0
  601. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genlicense.perl +0 -0
  602. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genregistry.perl +0 -0
  603. data/ext/gecode-2.2.0/misc/genstatistics.perl +179 -0
  604. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/gentxtchangelog.perl +0 -0
  605. data/ext/gecode-2.2.0/misc/genvariables.perl +905 -0
  606. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/getrevision.perl +0 -0
  607. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/makedepend.perl +0 -0
  608. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/svn-ignore.txt +0 -0
  609. data/ext/gecode-2.2.0/test/assign.cc +181 -0
  610. data/ext/gecode-2.2.0/test/assign.hh +93 -0
  611. data/ext/gecode-2.2.0/test/assign/bool.cc +61 -0
  612. data/ext/gecode-2.2.0/test/assign/int.cc +70 -0
  613. data/ext/gecode-2.2.0/test/branch.cc +563 -0
  614. data/ext/gecode-2.2.0/test/branch.hh +144 -0
  615. data/ext/gecode-2.2.0/test/branch/bool.cc +61 -0
  616. data/ext/gecode-2.2.0/test/branch/cpltset.cc +71 -0
  617. data/ext/gecode-2.2.0/test/branch/int.cc +70 -0
  618. data/ext/gecode-2.2.0/test/branch/set.cc +74 -0
  619. data/ext/gecode-2.2.0/test/cpltset.cc +568 -0
  620. data/ext/gecode-2.2.0/test/cpltset.hh +125 -0
  621. data/ext/gecode-2.2.0/test/cpltset/atmost.cc +155 -0
  622. data/ext/gecode-2.2.0/test/cpltset/cardinality.cc +138 -0
  623. data/ext/gecode-2.2.0/test/cpltset/dom.cc +137 -0
  624. data/ext/gecode-2.2.0/test/cpltset/partition.cc +210 -0
  625. data/ext/gecode-2.2.0/test/cpltset/rel.cc +158 -0
  626. data/ext/gecode-2.2.0/test/cpltset/select.cc +216 -0
  627. data/ext/gecode-2.2.0/test/int.cc +688 -0
  628. data/ext/gecode-2.2.0/test/int.hh +267 -0
  629. data/ext/gecode-2.2.0/test/int.icc +266 -0
  630. data/ext/gecode-2.2.0/test/int/arithmetic.cc +766 -0
  631. data/ext/gecode-2.2.0/test/int/basic.cc +77 -0
  632. data/ext/gecode-2.2.0/test/int/bool.cc +340 -0
  633. data/ext/gecode-2.2.0/test/int/channel.cc +238 -0
  634. data/ext/gecode-2.2.0/test/int/circuit.cc +100 -0
  635. data/ext/gecode-2.2.0/test/int/count.cc +357 -0
  636. data/ext/gecode-2.2.0/test/int/distinct.cc +248 -0
  637. data/ext/gecode-2.2.0/test/int/dom.cc +123 -0
  638. data/ext/gecode-2.2.0/test/int/element.cc +333 -0
  639. data/ext/gecode-2.2.0/test/int/extensional.cc +475 -0
  640. data/ext/gecode-2.2.0/test/int/gcc.cc +293 -0
  641. data/ext/gecode-2.2.0/test/int/linear.cc +383 -0
  642. data/ext/gecode-2.2.0/test/int/mm-arithmetic.cc +302 -0
  643. data/ext/gecode-2.2.0/test/int/mm-bool.cc +4342 -0
  644. data/ext/gecode-2.2.0/test/int/mm-count.cc +295 -0
  645. data/ext/gecode-2.2.0/test/int/mm-lin.cc +2035 -0
  646. data/ext/gecode-2.2.0/test/int/mm-rel.cc +136 -0
  647. data/ext/gecode-2.2.0/test/int/rel.cc +416 -0
  648. data/ext/gecode-2.2.0/test/int/scheduling.cc +276 -0
  649. data/ext/gecode-2.2.0/test/int/sorted.cc +165 -0
  650. data/ext/gecode-2.2.0/test/int/unshare.cc +109 -0
  651. data/ext/gecode-2.2.0/test/search.cc +618 -0
  652. data/ext/gecode-2.2.0/test/set.cc +753 -0
  653. data/ext/gecode-2.2.0/test/set.hh +286 -0
  654. data/ext/gecode-2.2.0/test/set.icc +108 -0
  655. data/ext/gecode-2.2.0/test/set/convex.cc +139 -0
  656. data/ext/gecode-2.2.0/test/set/distinct.cc +116 -0
  657. data/ext/gecode-2.2.0/test/set/dom.cc +292 -0
  658. data/ext/gecode-2.2.0/test/set/int.cc +473 -0
  659. data/ext/gecode-2.2.0/test/set/projection.cc +436 -0
  660. data/ext/gecode-2.2.0/test/set/rel-op-const.cc +368 -0
  661. data/ext/gecode-2.2.0/test/set/rel-op.cc +465 -0
  662. data/ext/gecode-2.2.0/test/set/rel.cc +125 -0
  663. data/ext/gecode-2.2.0/test/set/select.cc +299 -0
  664. data/ext/gecode-2.2.0/test/set/sequence.cc +125 -0
  665. data/ext/gecode-2.2.0/test/test.cc +287 -0
  666. data/ext/gecode-2.2.0/test/test.hh +175 -0
  667. data/ext/gecode-2.2.0/test/test.icc +93 -0
  668. data/ext/{gecode-2.1.1 → gecode-2.2.0}/variables.vsl +0 -0
  669. data/lib/gecoder/bindings.rb +7 -5
  670. data/lib/gecoder/bindings/bindings.rb +8 -8
  671. data/lib/gecoder/interface.rb +4 -2
  672. data/lib/gecoder/interface/binding_changes.rb +1 -1
  673. data/lib/gecoder/interface/branch.rb +1 -1
  674. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +4 -4
  675. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +2 -2
  676. data/lib/gecoder/interface/constraints/extensional_regexp.rb +1 -1
  677. data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +2 -2
  678. data/lib/gecoder/interface/constraints/int_enum/extensional.rb +5 -5
  679. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +4 -4
  680. data/lib/gecoder/interface/constraints/int_var_constraints.rb +2 -2
  681. data/lib/gecoder/interface/constraints/selected_set/select.rb +8 -8
  682. data/lib/gecoder/interface/constraints/set_enum/element.rb +79 -0
  683. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +5 -5
  684. data/lib/gecoder/interface/constraints/set_var_constraints.rb +2 -2
  685. data/lib/gecoder/interface/convenience.rb +99 -0
  686. data/lib/gecoder/interface/enum_wrapper.rb +1 -1
  687. data/lib/gecoder/interface/mixin.rb +486 -0
  688. data/lib/gecoder/interface/search.rb +23 -22
  689. data/lib/gecoder/version.rb +1 -1
  690. data/specs/branch.rb +5 -3
  691. data/specs/constraints/bool/boolean.rb +3 -1
  692. data/specs/constraints/bool/linear.rb +3 -1
  693. data/specs/constraints/bool_enum/bool_enum_relation.rb +3 -1
  694. data/specs/constraints/bool_enum/channel.rb +3 -1
  695. data/specs/constraints/fixnum_enum/element.rb +3 -1
  696. data/specs/constraints/int/arithmetic.rb +3 -1
  697. data/specs/constraints/int/channel.rb +3 -1
  698. data/specs/constraints/int/linear.rb +3 -1
  699. data/specs/constraints/int/linear_properties.rb +3 -1
  700. data/specs/constraints/int_enum/arithmetic.rb +3 -1
  701. data/specs/constraints/int_enum/channel.rb +3 -1
  702. data/specs/constraints/int_enum/count.rb +3 -1
  703. data/specs/constraints/int_enum/distinct.rb +3 -1
  704. data/specs/constraints/int_enum/element.rb +3 -1
  705. data/specs/constraints/int_enum/sort.rb +3 -1
  706. data/specs/constraints/property_helper.rb +10 -10
  707. data/specs/constraints/reification_sugar.rb +3 -1
  708. data/specs/constraints/selected_set/select.rb +6 -5
  709. data/specs/constraints/selected_set/select_properties.rb +12 -10
  710. data/specs/constraints/set/channel.rb +3 -1
  711. data/specs/constraints/set/domain.rb +4 -4
  712. data/specs/constraints/set/relation.rb +4 -4
  713. data/specs/constraints/set_enum/channel.rb +3 -1
  714. data/specs/constraints/set_enum/distinct.rb +3 -1
  715. data/specs/constraints/set_enum/element.rb +77 -0
  716. data/specs/enum_wrapper.rb +1 -1
  717. data/specs/mixin.rb +78 -0
  718. data/specs/model.rb +5 -5
  719. data/specs/search.rb +20 -14
  720. data/specs/selected_set.rb +3 -3
  721. data/specs/set_elements.rb +2 -2
  722. data/tasks/distribution.rake +25 -4
  723. metadata +739 -602
  724. data/example/money.rb +0 -36
  725. data/ext/gecode-2.1.1/Makefile.dep +0 -7622
  726. data/ext/gecode-2.1.1/Makefile.in +0 -1568
  727. data/ext/gecode-2.1.1/changelog.in +0 -2459
  728. data/ext/gecode-2.1.1/configure +0 -11631
  729. data/ext/gecode-2.1.1/configure.ac +0 -249
  730. data/ext/gecode-2.1.1/configure.ac.in +0 -245
  731. data/ext/gecode-2.1.1/contribs/qecode/Doxyfile +0 -263
  732. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.cc +0 -82
  733. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.hh +0 -37
  734. data/ext/gecode-2.1.1/contribs/qecode/Makefile.in.in +0 -162
  735. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.cc +0 -172
  736. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.hh +0 -63
  737. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +0 -37
  738. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +0 -35
  739. data/ext/gecode-2.1.1/contribs/qecode/configure +0 -2264
  740. data/ext/gecode-2.1.1/contribs/qecode/configure.ac +0 -23
  741. data/ext/gecode-2.1.1/contribs/qecode/examples/COMPILING +0 -13
  742. data/ext/gecode-2.1.1/contribs/qecode/examples/MatrixGame.cpp +0 -144
  743. data/ext/gecode-2.1.1/contribs/qecode/examples/NimFibo.cpp +0 -73
  744. data/ext/gecode-2.1.1/contribs/qecode/examples/stress_test.cpp +0 -179
  745. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +0 -34
  746. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +0 -46
  747. data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +0 -595
  748. data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +0 -184
  749. data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +0 -69
  750. data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +0 -145
  751. data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +0 -247
  752. data/ext/gecode-2.1.1/contribs/qecode/qsolver.cc +0 -168
  753. data/ext/gecode-2.1.1/contribs/qecode/qsolver.hh +0 -73
  754. data/ext/gecode-2.1.1/contribs/qecode/valueHeuristic.hh +0 -91
  755. data/ext/gecode-2.1.1/contribs/qecode/warner.cc +0 -101
  756. data/ext/gecode-2.1.1/contribs/qecode/warner.hh +0 -83
  757. data/ext/gecode-2.1.1/doxygen/doxygen.hh.in +0 -1111
  758. data/ext/gecode-2.1.1/doxygen/reflection.hh +0 -417
  759. data/ext/gecode-2.1.1/gecode.m4 +0 -956
  760. data/ext/gecode-2.1.1/gecode/cpltset.hh +0 -797
  761. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.cc +0 -115
  762. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.hh +0 -77
  763. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.cc +0 -245
  764. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.hh +0 -101
  765. data/ext/gecode-2.1.1/gecode/gist/gecodelogo.icc +0 -522
  766. data/ext/gecode-2.1.1/gecode/gist/mainwindow.cc +0 -254
  767. data/ext/gecode-2.1.1/gecode/gist/mainwindow.hh +0 -86
  768. data/ext/gecode-2.1.1/gecode/gist/node.cc +0 -100
  769. data/ext/gecode-2.1.1/gecode/gist/node.hh +0 -89
  770. data/ext/gecode-2.1.1/gecode/gist/nodecursor.cc +0 -124
  771. data/ext/gecode-2.1.1/gecode/gist/nodecursor.hh +0 -122
  772. data/ext/gecode-2.1.1/gecode/gist/nodecursor.icc +0 -79
  773. data/ext/gecode-2.1.1/gecode/gist/postscript.cc +0 -543
  774. data/ext/gecode-2.1.1/gecode/gist/postscript.hh +0 -56
  775. data/ext/gecode-2.1.1/gecode/gist/preferences.cc +0 -110
  776. data/ext/gecode-2.1.1/gecode/gist/preferences.hh +0 -76
  777. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.cc +0 -55
  778. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.hh +0 -58
  779. data/ext/gecode-2.1.1/gecode/gist/shapelist.cc +0 -331
  780. data/ext/gecode-2.1.1/gecode/gist/shapelist.hh +0 -140
  781. data/ext/gecode-2.1.1/gecode/gist/spacenode.cc +0 -531
  782. data/ext/gecode-2.1.1/gecode/gist/spacenode.hh +0 -224
  783. data/ext/gecode-2.1.1/gecode/gist/textoutput.cc +0 -114
  784. data/ext/gecode-2.1.1/gecode/gist/treecanvas.cc +0 -1140
  785. data/ext/gecode-2.1.1/gecode/gist/treecanvas.hh +0 -324
  786. data/ext/gecode-2.1.1/gecode/gist/ui_addvisualisationdialog.hh +0 -163
  787. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.cc +0 -175
  788. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.hh +0 -71
  789. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.cc +0 -219
  790. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.hh +0 -73
  791. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayitem.hh +0 -123
  792. data/ext/gecode-2.1.1/gecode/gist/visualnode.cc +0 -303
  793. data/ext/gecode-2.1.1/gecode/gist/visualnode.hh +0 -166
  794. data/ext/gecode-2.1.1/gecode/int.hh +0 -2035
  795. data/ext/gecode-2.1.1/gecode/int/arithmetic.cc +0 -136
  796. data/ext/gecode-2.1.1/gecode/int/arithmetic.hh +0 -440
  797. data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +0 -279
  798. data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +0 -253
  799. data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +0 -522
  800. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +0 -218
  801. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +0 -138
  802. data/ext/gecode-2.1.1/gecode/int/bool.cc +0 -642
  803. data/ext/gecode-2.1.1/gecode/int/bool/or.icc +0 -1000
  804. data/ext/gecode-2.1.1/gecode/int/branch.cc +0 -301
  805. data/ext/gecode-2.1.1/gecode/int/branch.hh +0 -576
  806. data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +0 -338
  807. data/ext/gecode-2.1.1/gecode/int/channel.cc +0 -114
  808. data/ext/gecode-2.1.1/gecode/int/channel.hh +0 -259
  809. data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +0 -347
  810. data/ext/gecode-2.1.1/gecode/int/channel/val.icc +0 -276
  811. data/ext/gecode-2.1.1/gecode/int/circuit.hh +0 -175
  812. data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +0 -271
  813. data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +0 -122
  814. data/ext/gecode-2.1.1/gecode/int/count.hh +0 -487
  815. data/ext/gecode-2.1.1/gecode/int/count/int.icc +0 -619
  816. data/ext/gecode-2.1.1/gecode/int/count/rel.icc +0 -144
  817. data/ext/gecode-2.1.1/gecode/int/count/view.icc +0 -449
  818. data/ext/gecode-2.1.1/gecode/int/cumulatives.hh +0 -141
  819. data/ext/gecode-2.1.1/gecode/int/cumulatives/val.icc +0 -429
  820. data/ext/gecode-2.1.1/gecode/int/distinct.hh +0 -341
  821. data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +0 -750
  822. data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +0 -136
  823. data/ext/gecode-2.1.1/gecode/int/element.hh +0 -239
  824. data/ext/gecode-2.1.1/gecode/int/element/int.icc +0 -441
  825. data/ext/gecode-2.1.1/gecode/int/element/view.icc +0 -584
  826. data/ext/gecode-2.1.1/gecode/int/exception.icc +0 -163
  827. data/ext/gecode-2.1.1/gecode/int/extensional.hh +0 -415
  828. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +0 -565
  829. data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.cc +0 -311
  830. data/ext/gecode-2.1.1/gecode/int/gcc.hh +0 -329
  831. data/ext/gecode-2.1.1/gecode/int/gcc/bnd.icc +0 -660
  832. data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +0 -531
  833. data/ext/gecode-2.1.1/gecode/int/gcc/val.icc +0 -400
  834. data/ext/gecode-2.1.1/gecode/int/int-set.cc +0 -153
  835. data/ext/gecode-2.1.1/gecode/int/int-set.icc +0 -191
  836. data/ext/gecode-2.1.1/gecode/int/linear-bool.cc +0 -220
  837. data/ext/gecode-2.1.1/gecode/int/linear-int.cc +0 -240
  838. data/ext/gecode-2.1.1/gecode/int/linear.hh +0 -1849
  839. data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +0 -433
  840. data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +0 -605
  841. data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +0 -539
  842. data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +0 -493
  843. data/ext/gecode-2.1.1/gecode/int/rel.cc +0 -431
  844. data/ext/gecode-2.1.1/gecode/int/rel.hh +0 -657
  845. data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +0 -848
  846. data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +0 -248
  847. data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +0 -269
  848. data/ext/gecode-2.1.1/gecode/int/sorted.cc +0 -91
  849. data/ext/gecode-2.1.1/gecode/int/sorted.hh +0 -117
  850. data/ext/gecode-2.1.1/gecode/int/sorted/matching.icc +0 -182
  851. data/ext/gecode-2.1.1/gecode/int/sorted/narrowing.icc +0 -257
  852. data/ext/gecode-2.1.1/gecode/int/sorted/order.icc +0 -208
  853. data/ext/gecode-2.1.1/gecode/int/sorted/propagate.icc +0 -669
  854. data/ext/gecode-2.1.1/gecode/int/sorted/sortsup.icc +0 -596
  855. data/ext/gecode-2.1.1/gecode/int/var-imp.icc +0 -745
  856. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +0 -104
  857. data/ext/gecode-2.1.1/gecode/int/var-imp/int.cc +0 -407
  858. data/ext/gecode-2.1.1/gecode/int/var/bool.icc +0 -126
  859. data/ext/gecode-2.1.1/gecode/int/var/int.icc +0 -151
  860. data/ext/gecode-2.1.1/gecode/int/view.icc +0 -1894
  861. data/ext/gecode-2.1.1/gecode/iter.hh +0 -90
  862. data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +0 -130
  863. data/ext/gecode-2.1.1/gecode/kernel.hh +0 -182
  864. data/ext/gecode-2.1.1/gecode/kernel/branching.icc +0 -447
  865. data/ext/gecode-2.1.1/gecode/kernel/core.cc +0 -473
  866. data/ext/gecode-2.1.1/gecode/kernel/core.icc +0 -2295
  867. data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +0 -458
  868. data/ext/gecode-2.1.1/gecode/kernel/reflection.cc +0 -921
  869. data/ext/gecode-2.1.1/gecode/kernel/reflection.icc +0 -1012
  870. data/ext/gecode-2.1.1/gecode/kernel/var-imp.icc +0 -433
  871. data/ext/gecode-2.1.1/gecode/kernel/var-map.cc +0 -269
  872. data/ext/gecode-2.1.1/gecode/kernel/var-map.icc +0 -227
  873. data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +0 -72
  874. data/ext/gecode-2.1.1/gecode/kernel/var-type.icc +0 -915
  875. data/ext/gecode-2.1.1/gecode/kernel/var.icc +0 -120
  876. data/ext/gecode-2.1.1/gecode/kernel/view.icc +0 -611
  877. data/ext/gecode-2.1.1/gecode/minimodel.hh +0 -1165
  878. data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +0 -179
  879. data/ext/gecode-2.1.1/gecode/search.hh +0 -752
  880. data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +0 -237
  881. data/ext/gecode-2.1.1/gecode/serialization.hh +0 -149
  882. data/ext/gecode-2.1.1/gecode/serialization/boost.cc +0 -78
  883. data/ext/gecode-2.1.1/gecode/serialization/javascript.cc +0 -340
  884. data/ext/gecode-2.1.1/gecode/serialization/register.cc +0 -8142
  885. data/ext/gecode-2.1.1/gecode/set.hh +0 -970
  886. data/ext/gecode-2.1.1/gecode/set/projectors.hh +0 -438
  887. data/ext/gecode-2.1.1/gecode/set/projectors/formula.cc +0 -312
  888. data/ext/gecode-2.1.1/gecode/set/rel-op/common.icc +0 -557
  889. data/ext/gecode-2.1.1/gecode/set/rel-op/inter.icc +0 -409
  890. data/ext/gecode-2.1.1/gecode/set/rel/re-subset.icc +0 -172
  891. data/ext/gecode-2.1.1/gecode/set/select.cc +0 -135
  892. data/ext/gecode-2.1.1/gecode/set/select.hh +0 -233
  893. data/ext/gecode-2.1.1/gecode/set/select/disjoint.cc +0 -308
  894. data/ext/gecode-2.1.1/gecode/set/select/disjoint.icc +0 -75
  895. data/ext/gecode-2.1.1/gecode/set/select/idxarray.hh +0 -113
  896. data/ext/gecode-2.1.1/gecode/set/select/idxarray.icc +0 -155
  897. data/ext/gecode-2.1.1/gecode/set/select/inter.icc +0 -349
  898. data/ext/gecode-2.1.1/gecode/set/select/union.icc +0 -371
  899. data/ext/gecode-2.1.1/gecode/set/select/unionConst.icc +0 -334
  900. data/ext/gecode-2.1.1/gecode/set/var-imp/set.cc +0 -214
  901. data/ext/gecode-2.1.1/gecode/set/var/set.icc +0 -303
  902. data/ext/gecode-2.1.1/gecode/set/view.icc +0 -1503
  903. data/ext/gecode-2.1.1/gecode/set/view/complement.icc +0 -629
  904. data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +0 -158
  905. data/ext/gecode-2.1.1/gecode/support/config.icc.in +0 -80
  906. data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +0 -122
  907. data/ext/gecode-2.1.1/gecode/support/symbol.cc +0 -226
  908. data/ext/gecode-2.1.1/gecode/support/symbol.icc +0 -130
  909. data/ext/gecode-2.1.1/misc/gecode-gist.pc.in +0 -45
  910. data/ext/gecode-2.1.1/misc/gecode-minimodel.pc.in +0 -45
  911. data/ext/gecode-2.1.1/misc/gecode-search.pc.in +0 -45
  912. data/ext/gecode-2.1.1/misc/gecode-serialization.pc.in +0 -45
  913. data/ext/gecode-2.1.1/misc/gecode.pc.in +0 -45
  914. data/ext/gecode-2.1.1/misc/genstatistics.perl +0 -178
  915. data/ext/gecode-2.1.1/misc/genvariables.perl +0 -905
  916. data/lib/gecoder/interface/constraints/set_enum/select.rb +0 -79
  917. data/lib/gecoder/interface/model.rb +0 -453
  918. data/lib/gecoder/interface/model_sugar.rb +0 -84
  919. data/specs/constraints/set_enum/select.rb +0 -73
@@ -1,166 +0,0 @@
1
- /*
2
- * Main authors:
3
- * Guido Tack <tack@gecode.org>
4
- *
5
- * Copyright:
6
- * Guido Tack, 2006
7
- *
8
- * Last modified:
9
- * $Date: 2008-02-19 11:05:15 +0100 (Tue, 19 Feb 2008) $ by $Author: tack $
10
- * $Revision: 6231 $
11
- *
12
- * This file is part of Gecode, the generic constraint
13
- * development environment:
14
- * http://www.gecode.org
15
- *
16
- * Permission is hereby granted, free of charge, to any person obtaining
17
- * a copy of this software and associated documentation files (the
18
- * "Software"), to deal in the Software without restriction, including
19
- * without limitation the rights to use, copy, modify, merge, publish,
20
- * distribute, sublicense, and/or sell copies of the Software, and to
21
- * permit persons to whom the Software is furnished to do so, subject to
22
- * the following conditions:
23
- *
24
- * The above copyright notice and this permission notice shall be
25
- * included in all copies or substantial portions of the Software.
26
- *
27
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
28
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
30
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
31
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
32
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
33
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34
- *
35
- */
36
-
37
- #ifndef GECODE_GIST_VISUALNODE_HH
38
- #define GECODE_GIST_VISUALNODE_HH
39
-
40
- #include "gecode/gist/spacenode.hh"
41
- #include "gecode/gist/shapelist.hh"
42
- #include "gecode/kernel.hh"
43
- #include <vector>
44
- #include <string>
45
-
46
- namespace Gecode { namespace Gist {
47
-
48
- /// \brief Node class that supports visual layout
49
- class VisualNode : public SpaceNode {
50
- protected:
51
- /// Relative offset from the parent node
52
- int offset;
53
- /// Whether the node needs re-layout
54
- bool dirty;
55
- /// Whether the layout of the node's children is completed
56
- bool childrenLayoutDone;
57
- /// Whether the node is hidden
58
- bool hidden;
59
- /// Whether the node is marked
60
- bool marked;
61
-
62
- /// Whether the node is on the selected path
63
- bool onPath;
64
- /// Whether the node is the head of the selected path
65
- bool lastOnPath;
66
- /// The alternative that is next on the path
67
- int pathAlternative;
68
-
69
- /// Heat value
70
- unsigned char heat;
71
-
72
- /// Shape of this node
73
- Shape* shape;
74
- /// Bounding box of this node
75
- BoundingBox box;
76
- /// Check if the \a x at depth \a depth lies in this subtree
77
- bool containsCoordinateAtDepth(int x, int depth);
78
- public:
79
- /// Constructor
80
- VisualNode(int alternative, BestNode* b);
81
- /// Constructor for root node from \a root and \a b
82
- VisualNode(Space* root, Better* b);
83
- /// Destructor
84
- virtual ~VisualNode(void);
85
-
86
- /// Shape of a single node
87
- static const Shape singletonShape;
88
- /// Unit shape
89
- static const Shape unitShape;
90
-
91
- /// Return if node is hidden
92
- bool isHidden(void);
93
- /// Set hidden state to \a h
94
- void setHidden(bool h);
95
- /// Mark all nodes up the path to the parent as dirty
96
- void dirtyUp(void);
97
- /// Compute layout for the subtree of this node
98
- void layout(void);
99
- /// Return offset off this node from its parent
100
- int getOffset(void);
101
- /// Set offset of this node, relative to its parent
102
- void setOffset(int n);
103
- /// Return whether node is marked as dirty
104
- bool isDirty(void);
105
- /// Mark node as dirty
106
- void setDirty(bool d);
107
- /// Return whether the layout of the node's children has been completed
108
- bool childrenLayoutIsDone(void);
109
- /// Mark node whether the layout of the node's children has been completed
110
- void setChildrenLayoutDone(bool d);
111
- /// Return whether node is marked
112
- bool isMarked(void);
113
- /// Set mark of this node
114
- void setMarked(bool m);
115
- /// Set all nodes from the node to the root to be on the path
116
- void pathUp(void);
117
- /// Set all nodes from the node to the root not to be on the path
118
- void unPathUp(void);
119
- /// Return whether node is on the path
120
- bool isOnPath(void);
121
- /// Return whether node is the head of the path
122
- bool isLastOnPath(void);
123
- /// Return the alternative of the child that is on the path (-1 if none)
124
- int getPathAlternative(void);
125
- /// Set the path attributes of the node
126
- void setPathInfos(bool onPath0, int pathAlternative0 = -1, bool lastOnPath0 = false);
127
-
128
- /// Return heat value
129
- unsigned char getHeat(void) const;
130
- /// Set heat value to \a h
131
- void setHeat(unsigned char h);
132
-
133
- /// Toggle whether this node is hidden
134
- void toggleHidden(void);
135
- /// Hide all failed subtrees of this node
136
- void hideFailed(void);
137
- /// Unhide all nodes in the subtree of this node
138
- void unhideAll(void);
139
-
140
- /// Return the shape of this node
141
- Shape* getShape(void);
142
- /// Set the shape of this node
143
- void setShape(Shape* s);
144
- /// Set the bounding box
145
- void setBoundingBox(BoundingBox b);
146
- /// Return the bounding box
147
- BoundingBox getBoundingBox(void);
148
- /// Create a child for alternative \a alternative
149
- virtual VisualNode* createChild(int alternative);
150
- /// Signal that the status has changed
151
- virtual void changedStatus();
152
- /// Return the parent
153
- VisualNode* getParent(void);
154
- /// Return child \a i
155
- VisualNode* getChild(int i);
156
- /// Find a node in this subtree at coordinates \a x, \a y
157
- VisualNode* findNode(int x, int y);
158
-
159
- std::string toolTip(void);
160
- };
161
-
162
- }}
163
-
164
- #endif
165
-
166
- // STATISTICS: gist-any
@@ -1,2035 +0,0 @@
1
- /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
- /*
3
- * Main authors:
4
- * Christian Schulte <schulte@gecode.org>
5
- * Guido Tack <tack@gecode.org>
6
- *
7
- * Contributing authors:
8
- * Mikael Lagerkvist <lagerkvist@gecode.org>
9
- *
10
- * Copyright:
11
- * Christian Schulte, 2002
12
- * Guido Tack, 2004
13
- *
14
- * Last modified:
15
- * $Date: 2008-02-29 01:09:17 +0100 (Fri, 29 Feb 2008) $ by $Author: schulte $
16
- * $Revision: 6355 $
17
- *
18
- * This file is part of Gecode, the generic constraint
19
- * development environment:
20
- * http://www.gecode.org
21
- *
22
- * Permission is hereby granted, free of charge, to any person obtaining
23
- * a copy of this software and associated documentation files (the
24
- * "Software"), to deal in the Software without restriction, including
25
- * without limitation the rights to use, copy, modify, merge, publish,
26
- * distribute, sublicense, and/or sell copies of the Software, and to
27
- * permit persons to whom the Software is furnished to do so, subject to
28
- * the following conditions:
29
- *
30
- * The above copyright notice and this permission notice shall be
31
- * included in all copies or substantial portions of the Software.
32
- *
33
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
35
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
37
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
38
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
39
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
40
- *
41
- */
42
-
43
- #ifndef __GECODE_INT_HH__
44
- #define __GECODE_INT_HH__
45
-
46
- #include <climits>
47
- #include <iostream>
48
-
49
- #include "gecode/kernel.hh"
50
- #include "gecode/iter.hh"
51
-
52
- /*
53
- * Configure linking
54
- *
55
- */
56
- #if !defined(GECODE_STATIC_LIBS) && \
57
- (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
58
-
59
- #ifdef GECODE_BUILD_INT
60
- #define GECODE_INT_EXPORT __declspec( dllexport )
61
- #else
62
- #define GECODE_INT_EXPORT __declspec( dllimport )
63
- #endif
64
-
65
- #else
66
-
67
- #ifdef GECODE_GCC_HAS_CLASS_VISIBILITY
68
- #define GECODE_INT_EXPORT __attribute__ ((visibility("default")))
69
- #else
70
- #define GECODE_INT_EXPORT
71
- #endif
72
-
73
- #endif
74
-
75
- /**
76
- * \namespace Gecode::Int
77
- * \brief Finite domain integers
78
- *
79
- * The Gecode::Int namespace contains all functionality required
80
- * to program propagators and branchings for finite domain integers.
81
- * In addition, all propagators and branchings for finite domain
82
- * integers provided by %Gecode are contained as nested namespaces.
83
- *
84
- */
85
-
86
- #include "gecode/int/exception.icc"
87
-
88
- namespace Gecode { namespace Int {
89
-
90
- /**
91
- * \brief Numerical limits for integer variables
92
- *
93
- * The integer limits are chosen such changing the sign is always possible
94
- * without overflow.
95
- * \ingroup TaskModelIntVars
96
- */
97
- namespace Limits {
98
- /// Largest allowed integer value
99
- const int max = INT_MAX - 1;
100
- /// Smallest allowed integer value
101
- const int min = -max;
102
- /// Check whether integer \a n is in range, otherwise throw out of limits with information \a l
103
- void check(int n, const char* l);
104
- /// Check whether double \a n is in integer range, otherwise throw out of limits exception with information \a l
105
- void check(double n, const char* l);
106
- }
107
-
108
- }}
109
-
110
- #include "gecode/int/limits.icc"
111
-
112
- namespace Gecode {
113
-
114
- class IntSetRanges;
115
-
116
- /**
117
- * \brief Integer sets
118
- *
119
- * Integer sets are the means to specify arbitrary sets
120
- * of integers to be used as domains for integer variables.
121
- * \ingroup TaskModelIntVars TaskModelSetVars
122
- */
123
- class IntSet : public SharedHandle {
124
- friend class IntSetRanges;
125
- private:
126
- /// %Range (intervals) of integers
127
- class Range {
128
- public:
129
- int min, max;
130
- };
131
- class IntSetObject : public SharedHandle::Object {
132
- public:
133
- /// Number of ranges
134
- int n;
135
- /// Array of ranges
136
- Range* r;
137
- /// Allocate object with \a m elements
138
- GECODE_INT_EXPORT static IntSetObject* allocate(int m);
139
- /// Return copy of object
140
- GECODE_INT_EXPORT SharedHandle::Object* copy(void) const;
141
- /// Delete object
142
- GECODE_INT_EXPORT virtual ~IntSetObject(void);
143
- };
144
- /// Sort ranges according to increasing minimum
145
- class MinInc;
146
- /// Normalize the first \a n elements of \a r
147
- GECODE_INT_EXPORT void normalize(Range* r, int n);
148
- /// Initialize as range with minimum \a n and maximum \a m
149
- GECODE_INT_EXPORT void init(int n, int m);
150
- /// Initialize with \a n integers from array \a r
151
- GECODE_INT_EXPORT void init(const int r[], int n);
152
- /// Initialize with \a n ranges from array \a r
153
- GECODE_INT_EXPORT void init(const int r[][2], int n);
154
- public:
155
- /// \name Constructors and initialization
156
- //@{
157
- /// Initialize as empty set
158
- IntSet(void);
159
- /** \brief Initialize as range with minimum \a n and maximum \a m
160
- *
161
- * Note that the set is empty if \a n is larger than \a m
162
- */
163
- IntSet(int n, int m);
164
- /// Initialize with \a n integers from array \a r
165
- IntSet(const int r[], int n);
166
- /** \brief Initialize with \a n ranges from array \a r
167
- *
168
- * For position \a i in the array \a r, the minimum is \a r[\a i][0]
169
- * and the maximum is \a r[\a i][1].
170
- */
171
- IntSet(const int r[][2], int n);
172
- /// Initialize with range iterator \a i
173
- template <class I>
174
- explicit IntSet(I& i);
175
- //@}
176
-
177
- /// \name Range length
178
- //@{
179
- /// Return number of ranges of the specification
180
- int size(void) const;
181
- //@}
182
-
183
- /// \name Range access
184
- //@{
185
- /// Return minimum of range at position \a i
186
- int min(int i) const;
187
- /// Return maximum of range at position \a i
188
- int max(int i) const;
189
- /// Return width of range at position \a i
190
- unsigned int width(int i) const;
191
- //@}
192
-
193
- /// \name Entire set access
194
- //@{
195
- /// Return minimum of entire set
196
- int min(void) const;
197
- /// Return maximum of entire set
198
- int max(void) const;
199
- //@}
200
-
201
- /// \name Predefined value
202
- //@{
203
- /// Empty set
204
- GECODE_INT_EXPORT static const IntSet empty;
205
- //@}
206
- };
207
-
208
- /**
209
- * \brief Range iterator for integer sets
210
- *
211
- * \ingroup TaskModelIntVars TaskModelSetVars
212
- */
213
- class IntSetRanges {
214
- private:
215
- /// Current range
216
- const IntSet::Range* i;
217
- /// End range
218
- const IntSet::Range* e;
219
- public:
220
- /// \name Constructors and initialization
221
- //@{
222
- /// Default constructor
223
- IntSetRanges(void);
224
- /// Initialize with ranges for set \a s
225
- IntSetRanges(const IntSet& s);
226
- /// Initialize with ranges for set \a s
227
- void init(const IntSet& s);
228
- //@}
229
-
230
- /// \name Iteration control
231
- //@{
232
- /// Test whether iterator is still at a range or done
233
- bool operator()(void) const;
234
- /// Move iterator to next range (if possible)
235
- void operator++(void);
236
- //@}
237
-
238
- /// \name Range access
239
- //@{
240
- /// Return smallest value of range
241
- int min(void) const;
242
- /// Return largest value of range
243
- int max(void) const;
244
- /// Return width of range (distance between minimum and maximum)
245
- unsigned int width(void) const;
246
- //@}
247
- };
248
-
249
- /**
250
- * \brief Value iterator for integer sets
251
- *
252
- * \ingroup TaskModelIntVars TaskModelSetVars
253
- */
254
- class IntSetValues : public Iter::Ranges::ToValues<IntSetRanges> {
255
- public:
256
- /// \name Constructors and initialization
257
- //@{
258
- /// Default constructor
259
- IntSetValues(void);
260
- /// Initialize with values for \a s
261
- IntSetValues(const IntSet& s);
262
- /// Initialize with values for \a s
263
- void init(const IntSet& s);
264
- //@}
265
- };
266
-
267
- }
268
-
269
- /**
270
- * \brief Print integer set \a s
271
- * \relates Gecode::IntSet
272
- */
273
- GECODE_INT_EXPORT std::ostream&
274
- operator<<(std::ostream&, const Gecode::IntSet& s);
275
-
276
- #include "gecode/int/int-set.icc"
277
-
278
- #include "gecode/int/var-imp.icc"
279
-
280
- namespace Gecode {
281
-
282
- namespace Int {
283
- class IntView;
284
- }
285
-
286
- /**
287
- * \brief Integer variables
288
- *
289
- * \ingroup TaskModelIntVars
290
- */
291
- class IntVar : public VarBase<Int::IntVarImp> {
292
- friend class IntVarArray;
293
- private:
294
- using VarBase<Int::IntVarImp>::varimp;
295
- /**
296
- * \brief Initialize variable with range domain
297
- *
298
- * The variable is created with a domain ranging from \a min
299
- * to \a max. No exceptions are thrown.
300
- */
301
- void _init(Space* home, int min, int max);
302
- /**
303
- * \brief Initialize variable with arbitrary domain
304
- *
305
- * The variable is created with a domain described by \a d.
306
- * No exceptions are thrown.
307
- */
308
- void _init(Space* home, const IntSet& d);
309
- public:
310
- /// \name Constructors and initialization
311
- //@{
312
- /// Default constructor
313
- IntVar(void);
314
- /// Initialize from integer variable \a x
315
- IntVar(const IntVar& x);
316
- /// Initialize from integer view \a x
317
- IntVar(const Int::IntView& x);
318
- /// Initialize from reflection variable \a x
319
- IntVar(const Reflection::Var& x);
320
- /**
321
- * \brief Initialize variable with range domain
322
- *
323
- * The variable is created with a domain ranging from \a min
324
- * to \a max. The following exceptions might be thrown:
325
- * - If \a min is greater than \a max, an exception of type
326
- * Gecode::Int::VariableEmptyDomain is thrown.
327
- * - If \a min or \a max exceed the limits for integers as defined
328
- * in Gecode::Int::Limits, an exception of type
329
- * Gecode::Int::OutOfLimits is thrown.
330
- */
331
- GECODE_INT_EXPORT IntVar(Space* home, int min ,int max);
332
- /**
333
- * \brief Initialize variable with arbitrary domain
334
- *
335
- * The variable is created with a domain described by \a d.
336
- * The following exceptions might be thrown:
337
- * - If \a d is empty, an exception of type
338
- * Gecode::Int::VariableEmptyDomain is thrown.
339
- * - If \a d contains values that exceed the limits for integers
340
- * as defined in Gecode::Int::Limits, an exception of type
341
- * Gecode::Int::OutOfLimits is thrown.
342
- */
343
- GECODE_INT_EXPORT IntVar(Space* home, const IntSet& d);
344
- /**
345
- * \brief Initialize variable with range domain
346
- *
347
- * The variable is created with a domain ranging from \a min
348
- * to \a max. The following exceptions might be thrown:
349
- * - If \a min is greater than \a max, an exception of type
350
- * Gecode::Int::VariableEmptyDomain is thrown.
351
- * - If \a min or \a max exceed the limits for integers as defined
352
- * in Gecode::Int::Limits, an exception of type
353
- * Gecode::Int::OutOfLimits is thrown.
354
- */
355
- GECODE_INT_EXPORT void init(Space* home, int min, int max);
356
- /**
357
- * \brief Initialize variable with arbitrary domain
358
- *
359
- * The variable is created with a domain described by \a d.
360
- * The following exceptions might be thrown:
361
- * - If \a d is empty, an exception of type
362
- * Gecode::Int::VariableEmptyDomain is thrown.
363
- * - If \a d contains values that exceed the limits for integers
364
- * as defined in Gecode::Int::Limits, an exception of type
365
- * Gecode::Int::OutOfLimits is thrown.
366
- */
367
- GECODE_INT_EXPORT void init(Space* home, const IntSet& d);
368
- //@}
369
-
370
- /// \name Value access
371
- //@{
372
- /// Return minimum of domain
373
- int min(void) const;
374
- /// Return maximum of domain
375
- int max(void) const;
376
- /// Return median of domain
377
- int med(void) const;
378
- /// Return assigned value (only if assigned)
379
- int val(void) const;
380
-
381
- /// Return size (cardinality) of domain
382
- unsigned int size(void) const;
383
- /// Return width of domain (distance between maximum and minimum)
384
- unsigned int width(void) const;
385
- //@}
386
-
387
- /// \name Domain tests
388
- //@{
389
- /// Test whether domain is a range
390
- bool range(void) const;
391
- /// Test whether view is assigned
392
- bool assigned(void) const;
393
-
394
- /// Test whether \a n is contained in domain
395
- bool in(int n) const;
396
- //@}
397
-
398
- /// \name Cloning
399
- //@{
400
- /// Update this variable to be a clone of variable \a x
401
- void update(Space* home, bool share, IntVar& x);
402
- //@}
403
- };
404
-
405
-
406
- /**
407
- * \brief %Range iterator for integer variables
408
- * \ingroup TaskModelIntVars
409
- */
410
- class IntVarRanges : public Int::IntVarImpFwd {
411
- public:
412
- /// \name Constructors and initialization
413
- //@{
414
- /// Default constructor
415
- IntVarRanges(void);
416
- /// Initialize with ranges for integer variable \a x
417
- IntVarRanges(const IntVar& x);
418
- /// Initialize with ranges for integer variable \a x
419
- void init(const IntVar& x);
420
- //@}
421
- };
422
-
423
- /**
424
- * \brief Value iterator for integer variables
425
- * \ingroup TaskModelIntVars
426
- */
427
- class IntVarValues : public Iter::Ranges::ToValues<IntVarRanges> {
428
- public:
429
- /// \name Constructors and initialization
430
- //@{
431
- /// Default constructor
432
- IntVarValues(void);
433
- /// Initialize with values for \a x
434
- IntVarValues(const IntVar& x);
435
- /// Initialize with values \a x
436
- void init(const IntVar& x);
437
- //@}
438
- };
439
-
440
- namespace Int {
441
- class BoolView;
442
- }
443
-
444
- /**
445
- * \brief Boolean integer variables
446
- *
447
- * \ingroup TaskModelIntVars
448
- */
449
- class BoolVar : public VarBase<Int::BoolVarImp> {
450
- friend class BoolVarArray;
451
- private:
452
- using VarBase<Int::BoolVarImp>::varimp;
453
- /**
454
- * \brief Initialize Boolean variable with range domain
455
- *
456
- * The variable is created with a domain ranging from \a min
457
- * to \a max. No exceptions are thrown.
458
- */
459
- void _init(Space* home, int min, int max);
460
- public:
461
- /// \name Constructors and initialization
462
- //@{
463
- /// Default constructor
464
- BoolVar(void);
465
- /// Initialize from Boolean variable \a x
466
- BoolVar(const BoolVar& x);
467
- /// Initialize from Boolean view \a x
468
- BoolVar(const Int::BoolView& x);
469
- /// Initialize from reflection variable \a x
470
- BoolVar(const Reflection::Var& x);
471
- /**
472
- * \brief Initialize Boolean variable with range domain
473
- *
474
- * The variable is created with a domain ranging from \a min
475
- * to \a max. The following exceptions might be thrown:
476
- * - If \a min is greater than \a max, an exception of type
477
- * Gecode::Int::VariableEmptyDomain is thrown.
478
- * - If \a min is less than 0 or \a max is greater than 1,
479
- * an exception of type
480
- * Gecode::Int::NotZeroOne is thrown.
481
- */
482
- GECODE_INT_EXPORT BoolVar(Space* home, int min, int max);
483
- /**
484
- * \brief Initialize Boolean variable with range domain
485
- *
486
- * The variable is created with a domain ranging from \a min
487
- * to \a max. The following exceptions might be thrown:
488
- * - If \a min is greater than \a max, an exception of type
489
- * Gecode::Int::VariableEmptyDomain is thrown.
490
- * - If \a min is less than 0 or \a max is greater than 1,
491
- * an exception of type
492
- * Gecode::Int::NotZerOne is thrown.
493
- */
494
- GECODE_INT_EXPORT void init(Space* home, int min, int max);
495
- //@}
496
-
497
- /// \name Value access
498
- //@{
499
- /// Return minimum of domain
500
- int min(void) const;
501
- /// Return maximum of domain
502
- int max(void) const;
503
- /// Return median of domain
504
- int med(void) const;
505
- /// Return assigned value (only if assigned)
506
- int val(void) const;
507
-
508
- /// Return size (cardinality) of domain
509
- unsigned int size(void) const;
510
- /// Return width of domain (distance between maximum and minimum)
511
- unsigned int width(void) const;
512
- //@}
513
-
514
- /// \name Domain tests
515
- //@{
516
- /// Test whether domain is a range
517
- bool range(void) const;
518
- /// Test whether view is assigned
519
- bool assigned(void) const;
520
-
521
- /// Test whether \a n is contained in domain
522
- bool in(int n) const;
523
- //@}
524
-
525
- /// \name Boolean domain tests
526
- //@{
527
- /// Test whether domain is zero
528
- bool zero(void) const;
529
- /// Test whether domain is one
530
- bool one(void) const;
531
- /// Test whether domain is neither zero nor one
532
- bool none(void) const;
533
- //@}
534
-
535
- /// \name Cloning
536
- //@{
537
- /// Update this variable to be a clone of variable \a x
538
- void update(Space* home, bool share, BoolVar& x);
539
- //@}
540
-
541
- };
542
-
543
- }
544
-
545
- /**
546
- * \brief Print integer variable \a x
547
- * \relates Gecode::IntVar
548
- */
549
- std::ostream&
550
- operator<<(std::ostream&, const Gecode::IntVar& x);
551
- /**
552
- * \brief Print Boolean variable \a x
553
- * \relates Gecode::BoolVar
554
- */
555
- std::ostream&
556
- operator<<(std::ostream&, const Gecode::BoolVar& x);
557
-
558
- #include "gecode/int/view.icc"
559
- #include "gecode/int/propagator.icc"
560
-
561
- namespace Gecode {
562
-
563
- /**
564
- * \defgroup TaskModelIntArgs Argument arrays
565
- *
566
- * Argument arrays are just good enough for passing arguments
567
- * with automatic memory management.
568
- * \ingroup TaskModelInt
569
- */
570
-
571
- //@{
572
- /// Passing integer arguments
573
- typedef PrimArgArray<int> IntArgs;
574
- /// Passing integer variables
575
- typedef VarArgArray<IntVar> IntVarArgs;
576
- /// Passing Boolean variables
577
- typedef VarArgArray<BoolVar> BoolVarArgs;
578
- /// Passing set arguments
579
- typedef PrimArgArray<IntSet> IntSetArgs;
580
- //@}
581
-
582
- /**
583
- * \defgroup TaskModelIntVarArrays Variable arrays
584
- *
585
- * Variable arrays can store variables. They are typically used
586
- * for storing the variables being part of a solution (script). However,
587
- * they can also be used for temporary purposes (even though
588
- * memory is not reclaimed until the space it is created for
589
- * is deleted).
590
- * \ingroup TaskModelInt
591
- */
592
-
593
- /**
594
- * \brief Integer variable array
595
- * \ingroup TaskModelIntVarArrays
596
- */
597
- class IntVarArray : public VarArray<IntVar> {
598
- public:
599
- /// \name Creation and initialization
600
- //@{
601
- /// Default constructor (array of size 0)
602
- IntVarArray(void);
603
- /// Allocate array for \a n integer variables (variables are uninitialized)
604
- IntVarArray(Space* home, int n);
605
- /// Initialize from integer variable array \a a (share elements)
606
- IntVarArray(const IntVarArray& a);
607
- /**
608
- * \brief Initialize array with \a n new variables
609
- *
610
- * The variables are created with a domain ranging from \a min
611
- * to \a max. The following execptions might be thrown:
612
- * - If \a min is greater than \a max, an exception of type
613
- * Gecode::Int::VariableEmptyDomain is thrown.
614
- * - If \a min or \a max exceed the limits for integers as defined
615
- * in Gecode::Int::Limits, an exception of type
616
- * Gecode::Int::OutOfLimits is thrown.
617
- */
618
- GECODE_INT_EXPORT
619
- IntVarArray(Space* home, int n, int min, int max);
620
- /**
621
- * \brief Initialize array with \a n new variables
622
- *
623
- * The variables are created with a domain described by \a s.
624
- * The following execptions might be thrown:
625
- * - If \a s is empty, an exception of type
626
- * Gecode::Int::VariableEmptyDomain is thrown.
627
- * - If \a s contains values that exceed the limits for integers
628
- * as defined in Gecode::Int::Limits, an exception of type
629
- * Gecode::Int::OutOfLimits is thrown.
630
- */
631
- GECODE_INT_EXPORT
632
- IntVarArray(Space* home, int n, const IntSet& s);
633
- //@}
634
- };
635
-
636
- /**
637
- * \brief Boolean variable array
638
- * \ingroup TaskModelIntVarArrays
639
- */
640
- class BoolVarArray : public VarArray<BoolVar> {
641
- public:
642
- /// \name Creation and initialization
643
- //@{
644
- /// Default constructor (array of size 0)
645
- BoolVarArray(void);
646
- /// Allocate array for \a n Boolean variables (variables are uninitialized)
647
- BoolVarArray(Space* home, int n);
648
- /// Initialize from Boolean variable array \a a (share elements)
649
- BoolVarArray(const BoolVarArray& a);
650
- /**
651
- * \brief Initialize array with \a n new variables
652
- *
653
- * The variables are created with a domain ranging from \a min
654
- * to \a max. The following execptions might be thrown:
655
- * - If \a min is greater than \a max, an exception of type
656
- * Gecode::Int::VariableEmptyDomain is thrown.
657
- * - If \a min is less than 0 or \a max is greater than 1,
658
- * an exception of type
659
- * Gecode::Int::NotZeroOne is thrown.
660
- */
661
- GECODE_INT_EXPORT
662
- BoolVarArray(Space* home, int n, int min, int max);
663
- //@}
664
- };
665
-
666
- }
667
-
668
- #include "gecode/int/array.icc"
669
-
670
- namespace Gecode {
671
-
672
- /**
673
- * \brief Relation types for integers
674
- * \ingroup TaskModelInt
675
- */
676
- enum IntRelType {
677
- IRT_EQ, ///< Equality (\f$=\f$)
678
- IRT_NQ, ///< Disequality (\f$\neq\f$)
679
- IRT_LQ, ///< Less or equal (\f$\leq\f$)
680
- IRT_LE, ///< Less (\f$<\f$)
681
- IRT_GQ, ///< Greater or equal (\f$\geq\f$)
682
- IRT_GR ///< Greater (\f$>\f$)
683
- };
684
-
685
- /**
686
- * \brief Operation types for Booleans
687
- * \ingroup TaskModelInt
688
- */
689
- enum BoolOpType {
690
- BOT_AND, ///< Conjunction
691
- BOT_OR, ///< Disjunction
692
- BOT_IMP, ///< Implication
693
- BOT_EQV, ///< Equivalence
694
- BOT_XOR ///< Exclusive or
695
- };
696
-
697
- /**
698
- * \brief Consistency levels for integer propagators
699
- *
700
- * The descriptions are meant to be suggestions. It is not
701
- * required that a propagator achieves full domain-consistency or
702
- * full bounds-consistency. It is more like: which level
703
- * of consistency comes closest.
704
- *
705
- * If in the description of a constraint below no consistency level
706
- * is mentioned, the propagator for the constraint implements
707
- * domain-consistency.
708
- * \ingroup TaskModelInt
709
- */
710
- enum IntConLevel {
711
- ICL_VAL, ///< Value consistency (naive)
712
- ICL_BND, ///< Bounds consistency
713
- ICL_DOM, ///< Domain consistency
714
- ICL_DEF ///< The default consistency for a constraint
715
- };
716
-
717
-
718
-
719
- /**
720
- * \defgroup TaskModelIntDomain Domain constraints
721
- * \ingroup TaskModelInt
722
- *
723
- */
724
-
725
- //@{
726
- /// Propagates \f$ l\leq x\leq m\f$
727
- GECODE_INT_EXPORT void
728
- dom(Space* home, IntVar x, int l, int m,
729
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
730
- /// Propagates \f$ l\leq x_i\leq m\f$ for all \f$0\leq i<|x|\f$
731
- GECODE_INT_EXPORT void
732
- dom(Space* home, const IntVarArgs& x, int l, int m,
733
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
734
-
735
- /// Propagates \f$ x\in s \f$
736
- GECODE_INT_EXPORT void
737
- dom(Space* home, IntVar x, const IntSet& s,
738
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
739
- /// Propagates \f$ x_i\in s\f$ for all \f$0\leq i<|x|\f$
740
- GECODE_INT_EXPORT void
741
- dom(Space* home, const IntVarArgs& x, const IntSet& s,
742
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
743
-
744
- /// Post propagator for \f$ (l\leq x \leq m) \Leftrightarrow b\f$
745
- GECODE_INT_EXPORT void
746
- dom(Space* home, IntVar x, int l, int m, BoolVar b,
747
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
748
- /// Post propagator for \f$ (x \in s) \Leftrightarrow b\f$
749
- GECODE_INT_EXPORT void
750
- dom(Space* home, IntVar x, const IntSet& s, BoolVar b,
751
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
752
- //@}
753
-
754
-
755
- /**
756
- * \defgroup TaskModelIntRelInt Simple relation constraints over integer variables
757
- * \ingroup TaskModelInt
758
- */
759
- //@{
760
- /** \brief Post propagator for \f$ x_0 \sim_r x_1\f$
761
- *
762
- * Supports both bounds (\a icl = ICL_BND) and
763
- * domain-consistency (\a icl = ICL_DOM, default).
764
- */
765
- GECODE_INT_EXPORT void
766
- rel(Space* home, IntVar x0, IntRelType r, IntVar x1,
767
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
768
- /** \brief Post propagators for \f$ x_i \sim_r y \f$ for all \f$0\leq i<|x|\f$
769
- *
770
- * Supports both bounds (\a icl = ICL_BND) and
771
- * domain-consistency (\a icl = ICL_DOM, default).
772
- */
773
- GECODE_INT_EXPORT void
774
- rel(Space* home, const IntVarArgs& x, IntRelType r, IntVar y,
775
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
776
- /// Propagates \f$ x \sim_r c\f$
777
- GECODE_INT_EXPORT void
778
- rel(Space* home, IntVar x, IntRelType r, int c,
779
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
780
- /// Propagates \f$ x_i \sim_r c \f$ for all \f$0\leq i<|x|\f$
781
- GECODE_INT_EXPORT void
782
- rel(Space* home, const IntVarArgs& x, IntRelType r, int c,
783
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
784
- /** \brief Post propagator for \f$ (x_0 \sim_r x_1)\Leftrightarrow b\f$
785
- *
786
- * Supports both bounds (\a icl = ICL_BND) and
787
- * domain-consistency (\a icl = ICL_DOM, default).
788
- */
789
- GECODE_INT_EXPORT void
790
- rel(Space* home, IntVar x0, IntRelType r, IntVar x1, BoolVar b,
791
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
792
- /** \brief Post propagator for \f$(x \sim_r c)\Leftrightarrow b\f$
793
- *
794
- * Supports both bounds (\a icl = ICL_BND) and
795
- * domain-consistency (\a icl = ICL_DOM, default).
796
- */
797
- GECODE_INT_EXPORT void
798
- rel(Space* home, IntVar x, IntRelType r, int c, BoolVar b,
799
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
800
- /** \brief Post propagator for pairwise relation on \a x.
801
- *
802
- * States that the elements of \a x are in the following relation:
803
- * - if \a r = IRT_EQ, then all elements of \a x must be equal.
804
- * Supports both bounds (\a icl = ICL_BND) and
805
- * domain-consistency (\a icl = ICL_DOM, default).
806
- * - if \a r = IRT_LE, \a r = IRT_LQ, \a r = IRT_GR, or \a r = IRT_GQ,
807
- * then the elements of \a x are ordered with respt to \a r.
808
- * Supports domain-consistency (\a icl = ICL_DOM, default).
809
- * - if \a r = IRT_NQ, then all elements of \a x must be pairwise
810
- * distinct (corresponds to the distinct constraint).
811
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
812
- * and domain-consistency (\a icl = ICL_DOM).
813
- * Throws an exception of type Int::ArgumentSame, if \a x contains
814
- * the same unassigned variable multiply.
815
- *
816
- */
817
- GECODE_INT_EXPORT void
818
- rel(Space* home, const IntVarArgs& x, IntRelType r,
819
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
820
- /** \brief Post propagator for relation between \a x and \a y.
821
- *
822
- * Note that for the inequality relations this corresponds to
823
- * the lexical order between \a x and \a y.
824
- *
825
- * Supports both bounds (\a icl = ICL_BND) and
826
- * domain-consistency (\a icl = ICL_DOM, default).
827
- *
828
- * Throws an exception of type Int::ArgumentSizeMismatch, if
829
- * \a x and \a y are of different size.
830
- */
831
- GECODE_INT_EXPORT void
832
- rel(Space* home, const IntVarArgs& x, IntRelType r, const IntVarArgs& y,
833
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
834
- //@}
835
-
836
-
837
- /**
838
- * \defgroup TaskModelIntRelBool Simple relation constraints over Boolean variables
839
- * \ingroup TaskModelInt
840
- */
841
- //@{
842
- /// Post propagator for \f$ x_0 \sim_r x_1\f$
843
- GECODE_INT_EXPORT void
844
- rel(Space* home, BoolVar x0, IntRelType r, BoolVar x1,
845
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
846
- /// Post propagator for \f$ x_i \sim_r y \f$ for all \f$0\leq i<|x|\f$
847
- GECODE_INT_EXPORT void
848
- rel(Space* home, const BoolVarArgs& x, IntRelType r, BoolVar y,
849
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
850
- /**
851
- * \brief Propagates \f$ x \sim_r n\f$
852
- *
853
- * Throws an exception of type Int::NotZeroOne, if \a n is neither
854
- * 0 or 1.
855
- */
856
- GECODE_INT_EXPORT void
857
- rel(Space* home, BoolVar x, IntRelType r, int n,
858
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
859
- /**
860
- * \brief Propagates \f$ x_i \sim_r n \f$ for all \f$0\leq i<|x|\f$
861
- *
862
- * Throws an exception of type Int::NotZeroOne, if \a n is neither
863
- * 0 or 1.
864
- */
865
- GECODE_INT_EXPORT void
866
- rel(Space* home, const BoolVarArgs& x, IntRelType r, int n,
867
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
868
- /** \brief Post propagator for relation between \a x and \a y.
869
- *
870
- * Note that for the inequality relations this corresponds to
871
- * the lexical order between \a x and \a y.
872
- *
873
- * Throws an exception of type Int::ArgumentSizeMismatch, if
874
- * \a x and \a y are of different size.
875
- */
876
- GECODE_INT_EXPORT void
877
- rel(Space* home, const BoolVarArgs& x, IntRelType r, const BoolVarArgs& y,
878
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
879
- /** \brief Post propagator for pairwise relation on \a x.
880
- *
881
- * States that the elements of \a x are in the following relation:
882
- * - if \a r = IRT_EQ, then all elements of \a x must be equal.
883
- * - if \a r = IRT_LE, \a r = IRT_LQ, \a r = IRT_GR, or \a r = IRT_GQ,
884
- * then the elements of \a x are ordered with respt to \a r.
885
- * - if \a r = IRT_NQ, then all elements of \a x must be pairwise
886
- * distinct (corresponds to the distinct constraint).
887
- *
888
- */
889
- GECODE_INT_EXPORT void
890
- rel(Space* home, const BoolVarArgs& x, IntRelType r,
891
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
892
- /** \brief Post propagator for Boolean operation on \a x0 and \a x1
893
- *
894
- * Posts propagator for \f$ x_0 \diamond_{\mathit{o}} x_1 = x_2\f$
895
- */
896
- GECODE_INT_EXPORT void
897
- rel(Space* home, BoolVar x0, BoolOpType o, BoolVar x1, BoolVar x2,
898
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
899
- /** \brief Post propagator for Boolean operation on \a x0 and \a x1
900
- *
901
- * Posts propagator for \f$ x_0 \diamond_{\mathit{o}} x_1 = n\f$
902
- *
903
- * Throws an exception of type Int::NotZeroOne, if \a n is neither
904
- * 0 or 1.
905
- */
906
- GECODE_INT_EXPORT void
907
- rel(Space* home, BoolVar x0, BoolOpType o, BoolVar x1, int n,
908
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
909
- /** \brief Post propagator for Boolean operation on \a x
910
- *
911
- * Posts propagator for \f$ x_0 \diamond_{\mathit{o}} \cdots
912
- * \diamond_{\mathit{op}} x_{|x|-1}= y\f$
913
- *
914
- * Throws an exception of type Int::TooFewArguments, if \f$|x|<2\f$
915
- * and \a o is BOT_IMP, BOT_EQV, or BOT_XOR.
916
- */
917
- GECODE_INT_EXPORT void
918
- rel(Space* home, BoolOpType o, const BoolVarArgs& x, BoolVar y,
919
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
920
- /** \brief Post propagator for Boolean operation on \a x
921
- *
922
- * Posts propagator for \f$ x_0 \diamond_{\mathit{o}} \cdots
923
- * \diamond_{\mathit{op}} x_{|x|-1}= n\f$
924
- *
925
- * Throws an exception of type Int::NotZeroOne, if \a n is neither
926
- * 0 or 1.
927
- *
928
- * Throws an exception of type Int::TooFewArguments, if \f$|x|<2\f$
929
- * and \a o is BOT_IMP, BOT_EQV, or BOT_XOR.
930
- */
931
- GECODE_INT_EXPORT void
932
- rel(Space* home, BoolOpType o, const BoolVarArgs& x, int n,
933
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
934
- //@}
935
-
936
-
937
- /**
938
- * \defgroup TaskModelIntElement Element constraints
939
- * \ingroup TaskModelInt
940
- */
941
-
942
- //@{
943
- /** \brief Post propagator for \f$ n_{x_0}=x_1\f$
944
- *
945
- * Throws an exception of type Int::OutOfLimits, if
946
- * the integers in \a n exceed the limits in Int::Limits.
947
- */
948
- GECODE_INT_EXPORT void
949
- element(Space* home, const IntArgs& n, IntVar x0, IntVar x1,
950
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
951
- /** \brief Post propagator for \f$ n_{x_0}=x_1\f$
952
- *
953
- * Throws an exception of type Int::OutOfLimits, if
954
- * the integers in \a n exceed the limits in Int::Limits.
955
- */
956
- GECODE_INT_EXPORT void
957
- element(Space* home, const IntArgs& n, IntVar x0, BoolVar x1,
958
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
959
- /** \brief Post propagator for \f$ n_{x_0}=x_1\f$
960
- *
961
- * Throws an exception of type Int::OutOfLimits, if
962
- * the integers in \a n exceed the limits in Int::Limits.
963
- */
964
- GECODE_INT_EXPORT void
965
- element(Space* home, const IntArgs& n, IntVar x0, int x1,
966
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
967
- /** \brief Post propagator for \f$ x_{y_0}=y_1\f$
968
- *
969
- * Supports both bounds (\a icl = ICL_BND) and
970
- * domain-consistency (\a icl = ICL_DOM, default).
971
- */
972
- GECODE_INT_EXPORT void
973
- element(Space* home, const IntVarArgs& x, IntVar y0, IntVar y1,
974
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
975
- /** \brief Post propagator for \f$ x_{y_0}=y_1\f$
976
- *
977
- * Supports both bounds (\a icl = ICL_BND) and
978
- * domain-consistency (\a icl = ICL_DOM, default).
979
- */
980
- GECODE_INT_EXPORT void
981
- element(Space* home, const IntVarArgs& x, IntVar y0, int y1,
982
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
983
- /// Post propagator for \f$ x_{y_0}=y_1\f$
984
- GECODE_INT_EXPORT void
985
- element(Space* home, const BoolVarArgs& x, IntVar y0, BoolVar y1,
986
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
987
- /// Post propagator for \f$ x_{y_0}=y_1\f$
988
- GECODE_INT_EXPORT void
989
- element(Space* home, const BoolVarArgs& x, IntVar y0, int y1,
990
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
991
- //@}
992
-
993
-
994
- /**
995
- * \defgroup TaskModelIntDistinct Distinct constraints
996
- * \ingroup TaskModelInt
997
- */
998
-
999
- //@{
1000
- /** \brief Post propagator for \f$ x_i\neq x_j\f$ for all \f$0\leq i\neq j<|x|\f$
1001
- *
1002
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1003
- * and domain-consistency (\a icl = ICL_DOM).
1004
- *
1005
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1006
- * the same unassigned variable multiply.
1007
- */
1008
- GECODE_INT_EXPORT void
1009
- distinct(Space* home, const IntVarArgs& x,
1010
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1011
- /** \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$
1012
- *
1013
- * \li Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1014
- * and domain-consistency (\a icl = ICL_DOM).
1015
- * \li Throws an exception of type Int::OutOfLimits, if
1016
- * the integers in \a n exceed the limits in Int::Limits
1017
- * or if the sum of \a n and \a x exceed the limits.
1018
- * \li Throws an exception of type Int::ArgumentSizeMismatch, if
1019
- * \a x and \a n are of different size.
1020
- * \li Throws an exception of type Int::ArgumentSame, if \a x contains
1021
- * the same unassigned variable multiply.
1022
- */
1023
- GECODE_INT_EXPORT void
1024
- distinct(Space* home, const IntArgs& n, const IntVarArgs& x,
1025
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1026
- //@}
1027
-
1028
-
1029
- /**
1030
- * \defgroup TaskModelIntChannel Channel constraints
1031
- * \ingroup TaskModelInt
1032
- */
1033
-
1034
- //@{
1035
- /** \brief Post propagator for \f$ x_i = j\leftrightarrow y_j=i\f$ for all \f$0\leq i<|x|\f$
1036
- *
1037
- * \li Supports domain (\a icl = ICL_DOM) and value propagation (all other
1038
- * values for \a icl).
1039
- * \li Throws an exception of type Int::ArgumentSizeMismatch, if
1040
- * \a x and \a y are of different size.
1041
- * \li Throws an exception of type Int::ArgumentSame, if \a x or
1042
- * \a y contain the same unassigned variable multiply. Note that a
1043
- * variable can occur in both \a x and \a y, but not more than
1044
- * once in either \a x or \a y.
1045
- */
1046
- GECODE_INT_EXPORT void
1047
- channel(Space* home, const IntVarArgs& x, const IntVarArgs& y,
1048
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1049
-
1050
- /// Post propagator for channeling a Boolean and an integer variable \f$ x_0 = x_1\f$
1051
- GECODE_INT_EXPORT void
1052
- channel(Space* home, BoolVar x0, IntVar x1,
1053
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1054
- /// Post propagator for channeling an integer and a Boolean variable \f$ x_0 = x_1\f$
1055
- forceinline void
1056
- channel(Space* home, IntVar x0, BoolVar x1,
1057
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF) {
1058
- channel(home,x1,x0,icl,pk);
1059
- }
1060
- /** \brief Post propagator for channeling Boolean and integer variables \f$ x_i = 1\leftrightarrow y=i+o\f$
1061
- *
1062
- * Throws an exception of type Int::ArgumentSame, if \a x
1063
- * contains the same unassigned variable multiply.
1064
- */
1065
- GECODE_INT_EXPORT void
1066
- channel(Space* home, const BoolVarArgs& x, IntVar y, int o=0,
1067
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1068
- //@}
1069
-
1070
-
1071
- /**
1072
- * \defgroup TaskModelIntGraph Graph constraints
1073
- * \ingroup TaskModelInt
1074
- */
1075
-
1076
- //@{
1077
- /** \brief Post propagator such that \a x forms a circuit
1078
- *
1079
- * \a x forms a circuit if the graph with edges \f$i\to j\f$ where
1080
- * \f$x_i=j\f$ has a single cycle covering all nodes.
1081
- *
1082
- * Supports domain (\a icl = ICL_DOM) and value propagation (all
1083
- * other values for \a icl), where this refers to whether value or
1084
- * domain-consistent distinct in enforced on \a x.
1085
- *
1086
- * Throws an exception of type Int::ArgumentSame, if \a x
1087
- * contains the same unassigned variable multiply.
1088
- */
1089
- GECODE_INT_EXPORT void
1090
- circuit(Space* home, const IntVarArgs& x,
1091
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1092
- //@}
1093
-
1094
-
1095
- /**
1096
- * \defgroup TaskModelIntScheduling Scheduling constraints
1097
- * \ingroup TaskModelInt
1098
- */
1099
- //@{
1100
- /**
1101
- * \brief Post propagators for the cumulatives constraint.
1102
- *
1103
- * This function creates propagators for the cumulatives constraint
1104
- * presented in <em> "A new multi-resource cumulatives constraint
1105
- * with negative heights"</em>, Nicolas Beldiceanu and Mats
1106
- * Carlsson, Principles and Practice of Constraint Programming 2002.
1107
- *
1108
- * The constraint models a set of machines and a set of tasks that
1109
- * should be assigned to the machines. The machines have a positive
1110
- * resource limit and the tasks each have a resource usage that can
1111
- * be either positive, negative, or zero. The constraint is enforced
1112
- * over each point in time for a machine where there is at least one
1113
- * task assigned.
1114
- *
1115
- * The limit for a machine is either the maximum amount available at
1116
- * any given time (\a at_most = true), or else the least amount to
1117
- * be used (\a at_most = false).
1118
- *
1119
- * \param machine \f$ machine_i \f$ is the machine assigned to task \f$ i \f$
1120
- * \param start \f$ start_i \f$ is the start date assigned to task \f$ i \f$
1121
- * \param duration \f$ duration_i \f$ is the duration of task \f$ i \f$
1122
- * \param end \f$ end_i \f$ is the end date assigned to task \f$ i \f$
1123
- * \param height \f$ height_i \f$ is the height is the amount of
1124
- * resources consumed by task \f$ i \f$
1125
- * \param limit \f$ limit_r \f$ is the amount of resource available
1126
- * for machine \f$ r \f$
1127
- * \param at_most \a at_most tells if the amount of resources used
1128
- * for a machine should be less than the limit (\a at_most
1129
- * = true) or greater than the limit (\a at_most = false)
1130
- * \param icl Supports value-consistency only (\a icl = ICL_VAL, default).
1131
- *
1132
- * \exception Int::ArgumentSizeMismatch thrown if the sizes of the arguments
1133
- * representing tasks does not match.
1134
- * \exception Int::OutOfLimits thrown if any numerical argument is
1135
- * larger than Int::Limits::max or less than
1136
- * Int::Limits::min.
1137
- */
1138
- GECODE_INT_EXPORT void
1139
- cumulatives(Space* home, const IntVarArgs& machine,
1140
- const IntVarArgs& start, const IntVarArgs& duration,
1141
- const IntVarArgs& end, const IntVarArgs& height,
1142
- const IntArgs& limit, bool at_most,
1143
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1144
- /** \brief Post propagators for the cumulatives constraint.
1145
- *
1146
- * \copydoc cumulatives()
1147
- */
1148
- GECODE_INT_EXPORT void
1149
- cumulatives(Space* home, const IntArgs& machine,
1150
- const IntVarArgs& start, const IntVarArgs& duration,
1151
- const IntVarArgs& end, const IntVarArgs& height,
1152
- const IntArgs& limit, bool at_most,
1153
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1154
- /** \brief Post propagators for the cumulatives constraint.
1155
- *
1156
- * \copydoc cumulatives()
1157
- */
1158
- GECODE_INT_EXPORT void
1159
- cumulatives(Space* home, const IntVarArgs& machine,
1160
- const IntVarArgs& start, const IntArgs& duration,
1161
- const IntVarArgs& end, const IntVarArgs& height,
1162
- const IntArgs& limit, bool at_most,
1163
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1164
- /** \brief Post propagators for the cumulatives constraint.
1165
- *
1166
- * \copydoc cumulatives()
1167
- */
1168
- GECODE_INT_EXPORT void
1169
- cumulatives(Space* home, const IntArgs& machine,
1170
- const IntVarArgs& start, const IntArgs& duration,
1171
- const IntVarArgs& end, const IntVarArgs& height,
1172
- const IntArgs& limit, bool at_most,
1173
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1174
- /** \brief Post propagators for the cumulatives constraint.
1175
- *
1176
- * \copydoc cumulatives()
1177
- */
1178
- GECODE_INT_EXPORT void
1179
- cumulatives(Space* home, const IntVarArgs& machine,
1180
- const IntVarArgs& start, const IntVarArgs& duration,
1181
- const IntVarArgs& end, const IntArgs& height,
1182
- const IntArgs& limit, bool at_most,
1183
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1184
- /** \brief Post propagators for the cumulatives constraint.
1185
- *
1186
- * \copydoc cumulatives()
1187
- */
1188
- GECODE_INT_EXPORT void
1189
- cumulatives(Space* home, const IntArgs& machine,
1190
- const IntVarArgs& start, const IntVarArgs& duration,
1191
- const IntVarArgs& end, const IntArgs& height,
1192
- const IntArgs& limit, bool at_most,
1193
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1194
- /** \brief Post propagators for the cumulatives constraint.
1195
- *
1196
- * \copydoc cumulatives()
1197
- */
1198
- GECODE_INT_EXPORT void
1199
- cumulatives(Space* home, const IntVarArgs& machine,
1200
- const IntVarArgs& start, const IntArgs& duration,
1201
- const IntVarArgs& end, const IntArgs& height,
1202
- const IntArgs& limit, bool at_most,
1203
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1204
- /** \brief Post propagators for the cumulatives constraint.
1205
- *
1206
- * \copydoc cumulatives()
1207
- */
1208
- GECODE_INT_EXPORT void
1209
- cumulatives(Space* home, const IntArgs& machine,
1210
- const IntVarArgs& start, const IntArgs& duration,
1211
- const IntVarArgs& end, const IntArgs& height,
1212
- const IntArgs& limit, bool at_most,
1213
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1214
- //@}
1215
-
1216
-
1217
- /**
1218
- * \defgroup TaskModelIntSorted Sorted constraints
1219
- *
1220
- * All sorted constraints support bounds-consistency.
1221
- *
1222
- * \ingroup TaskModelInt
1223
- */
1224
- //@{
1225
- /**
1226
- * \brief Post propagator that \a y is \a x sorted in increasing order
1227
- *
1228
- * Might throw the following exceptions:
1229
- * - Int::ArgumentSizeMismatch, if \a x and \a y differ in size.
1230
- * - Int::ArgumentSame, if \a x or \a y contain
1231
- * shared unassigned variables.
1232
- */
1233
- GECODE_INT_EXPORT void
1234
- sorted(Space* home, const IntVarArgs& x, const IntVarArgs& y,
1235
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1236
-
1237
- /**
1238
- * \brief Post propagator that \a y is \a x sorted in increasing order
1239
- *
1240
- * The values in \a z describe the sorting permutation, that is
1241
- * \f$\forall i\in\{0,\dots,|x|-1\}: x_i=y_{z_i} \f$.
1242
- *
1243
- * Might throw the following exceptions:
1244
- * - Int::ArgumentSizeMismatch, if \a x and \a y differ in size.
1245
- * - Int::ArgumentSame, if \a x or \a y contain
1246
- * shared unassigned variables.
1247
- */
1248
- GECODE_INT_EXPORT void
1249
- sorted(Space*, const IntVarArgs& x, const IntVarArgs& y,
1250
- const IntVarArgs& z,
1251
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1252
- //@}
1253
-
1254
-
1255
- /**
1256
- * \defgroup TaskModelIntCard Cardinality constraints
1257
- * \ingroup TaskModelInt
1258
- *
1259
- * \note
1260
- * Domain consistency on the extended cardinality variables of
1261
- * the Global Cardinality Propagator is only obtained if they are bounds
1262
- * consistent, otherwise the problem of enforcing domain consistency
1263
- * on the cardinality variables is NP-complete as proved by
1264
- * \ref CardVarNPCompl "Qumiper et. al. in
1265
- * Improved Algorithms for the Global Cardinality Constraint"
1266
- */
1267
-
1268
- //@{
1269
- /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=n\}\sim_r m\f$
1270
- *
1271
- * Supports domain-consistent propagation only.
1272
- */
1273
- GECODE_INT_EXPORT void
1274
- count(Space* home, const IntVarArgs& x, int n, IntRelType r, int m,
1275
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1276
- /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\sim_r m\f$
1277
- *
1278
- * Supports domain-consistent propagation only.
1279
- */
1280
- GECODE_INT_EXPORT void
1281
- count(Space* home, const IntVarArgs& x, IntVar y, IntRelType r, int m,
1282
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1283
- /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y_i\}\sim_r m\f$
1284
- *
1285
- * Supports domain-consistent propagation only.
1286
- *
1287
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1288
- * \a x and \a y are of different size.
1289
- */
1290
- GECODE_INT_EXPORT void
1291
- count(Space* home, const IntVarArgs& x, const IntArgs& y, IntRelType r, int m,
1292
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1293
- /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=n\}\sim_r z\f$
1294
- *
1295
- * Supports domain-consistent propagation only.
1296
- */
1297
- GECODE_INT_EXPORT void
1298
- count(Space* home, const IntVarArgs& x, int n, IntRelType r, IntVar z,
1299
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1300
- /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\sim_r z\f$
1301
- *
1302
- * Supports domain-consistent propagation only.
1303
- */
1304
- GECODE_INT_EXPORT void
1305
- count(Space* home, const IntVarArgs& x, IntVar y, IntRelType r, IntVar z,
1306
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1307
- /** \brief Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y_i\}\sim_r z\f$
1308
- *
1309
- * Supports domain-consistent propagation only.
1310
- *
1311
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1312
- * \a x and \a y are of different size.
1313
- */
1314
- GECODE_INT_EXPORT void
1315
- count(Space* home, const IntVarArgs& x, const IntArgs& y, IntRelType r, IntVar z,
1316
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1317
-
1318
- /** \brief Posts a global count (cardinality) constraint
1319
- *
1320
- * Posts the constraint that
1321
- * \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=j\}=c_j\f$ and
1322
- * \f$ \bigcup_i \{x_i\} \subseteq \{0,\ldots,|c|-1\}\f$
1323
- * (no other value occurs).
1324
- *
1325
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1326
- * and domain-consistency (\a icl = ICL_DOM).
1327
- *
1328
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1329
- * the same unassigned variable multiply.
1330
- */
1331
- GECODE_INT_EXPORT void
1332
- count(Space* home, const IntVarArgs& x, const IntVarArgs& c,
1333
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1334
-
1335
- /** \brief Posts a global count (cardinality) constraint
1336
- *
1337
- * Posts the constraint that
1338
- * \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=j\}\in c_j\f$ and
1339
- * \f$ \bigcup_i \{x_i\} \subseteq \{0,\ldots,|c|-1\}\f$
1340
- * (no other value occurs).
1341
- *
1342
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1343
- * and domain-consistency (\a icl = ICL_DOM).
1344
- *
1345
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1346
- * the same unassigned variable multiply.
1347
- */
1348
- GECODE_INT_EXPORT void
1349
- count(Space* home, const IntVarArgs& x, const IntSetArgs& c,
1350
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1351
-
1352
- /** \brief Posts a global count (cardinality) constraint
1353
- *
1354
- * Posts the constraint that
1355
- * \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=v_j\}=c_j\f$ and
1356
- * \f$ \bigcup_i \{x_i\} \subseteq \bigcup_j \{v_j\}\f$
1357
- * (no other value occurs).
1358
- *
1359
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1360
- * and domain-consistency (\a icl = ICL_DOM).
1361
- *
1362
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1363
- * the same unassigned variable multiply.
1364
- *
1365
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1366
- * \a cards and \a values are of different size.
1367
- */
1368
- GECODE_INT_EXPORT void
1369
- count(Space* home, const IntVarArgs& x,
1370
- const IntVarArgs& c, const IntArgs& v,
1371
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1372
-
1373
- /** \brief Posts a global count (cardinality) constraint
1374
- *
1375
- * Posts the constraint that
1376
- * \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=v_j\}\in c_j\f$ and
1377
- * \f$ \bigcup_i \{x_i\} \subseteq \bigcup_j \{v_j\}\f$
1378
- * (no other value occurs).
1379
- *
1380
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1381
- * and domain-consistency (\a icl = ICL_DOM).
1382
- *
1383
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1384
- * the same unassigned variable multiply.
1385
- *
1386
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1387
- * \a cards and \a values are of different size.
1388
- */
1389
- GECODE_INT_EXPORT void
1390
- count(Space* home, const IntVarArgs& x,
1391
- const IntSetArgs& c, const IntArgs& v,
1392
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1393
-
1394
- /** \brief Posts a global count (cardinality) constraint
1395
- *
1396
- * Posts the constraint that
1397
- * \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=v_j\}\in c\f$ and
1398
- * \f$ \bigcup_i \{x_i\} \subseteq \bigcup_j \{v_j\}\f$
1399
- * (no other value occurs).
1400
- *
1401
- * Supports value (\a icl = ICL_VAL, default), bounds (\a icl = ICL_BND),
1402
- * and domain-consistency (\a icl = ICL_DOM).
1403
- *
1404
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1405
- * the same unassigned variable multiply.
1406
- *
1407
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1408
- * \a cards and \a values are of different size.
1409
- */
1410
- GECODE_INT_EXPORT void
1411
- count(Space* home, const IntVarArgs& x,
1412
- const IntSet& c, const IntArgs& v,
1413
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1414
-
1415
- //@}
1416
-
1417
- /**
1418
- * \defgroup TaskModelIntExt Extensional constraints
1419
- * \ingroup TaskModelInt
1420
- *
1421
- * Extensional constraints support different ways of how the
1422
- * extensionally defined relation between the variables is defined.
1423
- * Examples include specification by a %DFA or a table.
1424
- *
1425
- * A %DFA can be defined by a regular expression, for regular expressions
1426
- * see the module MiniModel.
1427
- */
1428
- //@{
1429
-
1430
- /**
1431
- * \brief Deterministic finite automaton (%DFA)
1432
- *
1433
- * After initialization, the start state is always zero.
1434
- * The final states are contiguous ranging from the first to the
1435
- * last final state.
1436
- */
1437
- class DFA : public SharedHandle {
1438
- private:
1439
- /// Implementation of DFA
1440
- class DFAI;
1441
- public:
1442
- /// Specification of a %DFA transition
1443
- class Transition {
1444
- public:
1445
- int i_state; ///< input state
1446
- int symbol; ///< symbol
1447
- int o_state; ///< output state
1448
- };
1449
- /// Iterator for %DFA transitions (sorted by symbols)
1450
- class Transitions {
1451
- private:
1452
- /// Current transition
1453
- const Transition* c_trans;
1454
- /// End of transitions
1455
- const Transition* e_trans;
1456
- public:
1457
- /// Initialize to all transitions of DFA \a d
1458
- Transitions(const DFA& d);
1459
- /// Initialize to transitions of DFA \a d for symbol \a n
1460
- Transitions(const DFA& d, int n);
1461
- /// Test whether iterator still at a transition
1462
- bool operator()(void) const;
1463
- /// Move iterator to next transition
1464
- void operator++(void);
1465
- /// Return in-state of current transition
1466
- int i_state(void) const;
1467
- /// Return symbol of current transition
1468
- int symbol(void) const;
1469
- /// Return out-state of current transition
1470
- int o_state(void) const;
1471
- };
1472
- /// Iterator for %DFA symbols
1473
- class Symbols {
1474
- private:
1475
- /// Current transition
1476
- const Transition* c_trans;
1477
- /// End of transitions
1478
- const Transition* e_trans;
1479
- public:
1480
- /// Initialize to symbols of DFA \a d
1481
- Symbols(const DFA& d);
1482
- /// Test whether iterator still at a symbol
1483
- bool operator()(void) const;
1484
- /// Move iterator to next symbol
1485
- void operator++(void);
1486
- /// Return current symbol
1487
- int val(void) const;
1488
- };
1489
- public:
1490
- friend class Transitions;
1491
- /// Initialize for DFA accepting the empty word
1492
- DFA(void);
1493
- /**
1494
- * \brief Initialize DFA
1495
- *
1496
- * - Start state is given by \a s.
1497
- * - %Transitions are described by \a t, where the last element
1498
- * must have -1 as value for \c i_state.
1499
- * - Final states are given by \a f, where the last final element
1500
- * must be -1.
1501
- * - Minimizes the DFA, if \a minimize is true.
1502
- * - Note that the transitions must be deterministic.
1503
- */
1504
- GECODE_INT_EXPORT
1505
- DFA(int s, Transition t[], int f[], bool minimize=true);
1506
- /// Initialize by DFA \a d (DFA is shared)
1507
- DFA(const DFA& d);
1508
- /// Return the number of states
1509
- unsigned int n_states(void) const;
1510
- /// Return the number of symbols
1511
- unsigned int n_symbols(void) const;
1512
- /// Return the number of transitions
1513
- unsigned int n_transitions(void) const;
1514
- /// Return the number of the first final state
1515
- int final_fst(void) const;
1516
- /// Return the number of the last final state
1517
- int final_lst(void) const;
1518
- /// Return smallest symbol in DFA
1519
- int symbol_min(void) const;
1520
- /// Return largest symbol in DFA
1521
- int symbol_max(void) const;
1522
-
1523
- /// Initialize DFA from reflection specification
1524
- GECODE_INT_EXPORT DFA(Reflection::VarMap& vm, Reflection::Arg* arg);
1525
- /// Create reflection specification for the DFA
1526
- GECODE_INT_EXPORT Reflection::Arg* spec(Reflection::VarMap& vm) const;
1527
- };
1528
-
1529
- /**
1530
- * \brief Post propagator for extensional constraint described by a DFA
1531
- *
1532
- * The elements of \a x must be a word of the language described by
1533
- * the DFA \a d.
1534
- *
1535
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1536
- * the same unassigned variable multiply. If shared occurences of variables
1537
- * are required, unshare should be used.
1538
- */
1539
- GECODE_INT_EXPORT void
1540
- extensional(Space* home, const IntVarArgs& x, DFA d,
1541
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1542
-
1543
- /**
1544
- * \brief Post propagator for extensional constraint described by a DFA
1545
- *
1546
- * The elements of \a x must be a word of the language described by
1547
- * the DFA \a d.
1548
- *
1549
- * Throws an exception of type Int::ArgumentSame, if \a x contains
1550
- * the same unassigned variable multiply. If shared occurences of variables
1551
- * are required, unshare should be used.
1552
- */
1553
- GECODE_INT_EXPORT void
1554
- extensional(Space* home, const BoolVarArgs& x, DFA d,
1555
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1556
-
1557
- /** \brief Class represeting a set of tuples.
1558
- *
1559
- * A TupleSet is used for storing an extensional representation of a
1560
- * constraint. After a TupleSet is finalized, no more tuples may be
1561
- * added to it.
1562
- */
1563
- class TupleSet : public SharedHandle {
1564
- public:
1565
- /** \brief Type of a tuple
1566
- *
1567
- * The arity of the tuple is left implicit.
1568
- */
1569
- typedef int* Tuple;
1570
-
1571
- /// Class for table data
1572
- class TupleSetI;
1573
- /// Get implementation
1574
- TupleSetI* implementation(void);
1575
-
1576
- /// Construct empty tuple
1577
- TupleSet(void);
1578
- /// Initialize by TupleSet \a d (tuple set is shared)
1579
- TupleSet(const TupleSet& d);
1580
-
1581
- /// Add tuple to tuple set
1582
- void add(const IntArgs& tuple);
1583
- /// Finalize tuple set
1584
- void finalize(void);
1585
- /// Is tuple set finalized
1586
- bool finalized(void) const;
1587
- /// Arity of tuple set
1588
- int arity(void) const;
1589
- /// Number of tuples
1590
- int tuples(void) const;
1591
- /// Get tuple i
1592
- Tuple operator[](int i) const;
1593
- /// Minimum domain size
1594
- int min(void) const;
1595
- /// Maximum domain size
1596
- int max(void) const;
1597
-
1598
- /// Initialize TupleSet from reflection specification
1599
- GECODE_INT_EXPORT TupleSet(Reflection::VarMap& vm, Reflection::Arg* arg);
1600
- /// Create reflection specification for the TupleSet
1601
- GECODE_INT_EXPORT Reflection::Arg* spec(Reflection::VarMap& vm) const;
1602
- };
1603
-
1604
- /** \brief Post propagator for \f$x\in T\f$.
1605
- *
1606
- * \li Supports implementations optimized for memory (\a pk = \a
1607
- * PK_MEMORY, default) and speed (\a pk = \a PK_SPEED).
1608
- * \li Supports domain-consistency (\a icl = ICL_DOM, default) only.
1609
- * \li Throws an exception of type Int::ArgumentSizeMismatch, if
1610
- * \a x and \a t are of different size.
1611
- *
1612
- * \warning If the domains for the \f$x_i\f$ are not dense and
1613
- * have similar bounds, lots of memory will be wasted (memory
1614
- * consumption is in \f$
1615
- * O\left(|x|\cdot\min_i(\underline{x_i})\cdot\max_i(\overline{x_i})\right)\f$
1616
- * for the basic algorithm (\a pk = \a PK_MEMORY) and additionally \f$
1617
- * O\left(|x|^2\cdot\min_i(\underline{x_i})\cdot\max_i(\overline{x_i})\right)\f$
1618
- * for the incremental algorithm (\a pk = \a PK_SPEED).
1619
- */
1620
- GECODE_INT_EXPORT void
1621
- extensional(Space* home, const IntVarArgs& x, const TupleSet& t,
1622
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1623
-
1624
- /** \brief Post propagator for \f$x\in T\f$.
1625
- *
1626
- * \li Supports implementations optimized for memory (\a pk = \a
1627
- * PK_MEMORY, default) and speed (\a pk = \a PK_SPEED).
1628
- * \li Supports domain-consistency (\a icl = ICL_DOM, default) only.
1629
- * \li Throws an exception of type Int::ArgumentSizeMismatch, if
1630
- * \a x and \a t are of different size.
1631
- */
1632
- GECODE_INT_EXPORT void
1633
- extensional(Space* home, const BoolVarArgs& x, const TupleSet& t,
1634
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1635
- //@}
1636
- }
1637
-
1638
- #include "gecode/int/extensional/dfa.icc"
1639
- #include "gecode/int/extensional/tuple-set.icc"
1640
-
1641
- namespace Gecode {
1642
-
1643
- /**
1644
- * \defgroup TaskModelIntArith Arithmetic constraints
1645
- * \ingroup TaskModelInt
1646
- */
1647
-
1648
- //@{
1649
- /** \brief Post propagator for \f$ \min\{x_0,x_1\}=x_2\f$
1650
- *
1651
- * Only bounds-consistency is supported.
1652
- */
1653
- GECODE_INT_EXPORT void
1654
- min(Space* home, IntVar x0, IntVar x1, IntVar x2,
1655
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1656
- /** \brief Post propagator for \f$ \min x=y\f$
1657
- *
1658
- * Only bounds-consistency is supported.
1659
- */
1660
- GECODE_INT_EXPORT void
1661
- min(Space* home, const IntVarArgs& x, IntVar y,
1662
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1663
- /** \brief Post propagator for \f$ \max\{x_0,x_1\}=x_2\f$
1664
- *
1665
- * Only bounds-consistency is supported. If \a x is empty,
1666
- * an exception of type Int::TooFewArguments is thrown.
1667
- */
1668
- GECODE_INT_EXPORT void
1669
- max(Space* home, IntVar x0, IntVar x1, IntVar x2,
1670
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1671
- /** \brief Post propagator for \f$ \max x=y\f$
1672
- *
1673
- * Only bounds-consistency is supported. If \a x is empty,
1674
- * an exception of type Int::TooFewArguments is thrown.
1675
- */
1676
- GECODE_INT_EXPORT void
1677
- max(Space* home, const IntVarArgs& x, IntVar y,
1678
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1679
-
1680
- /** \brief Post propagator for \f$ |x_0|=x_1\f$
1681
- *
1682
- * Only bounds-consistency is supported.
1683
- */
1684
- GECODE_INT_EXPORT void
1685
- abs(Space* home, IntVar x0, IntVar x1,
1686
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1687
-
1688
- /** \brief Post propagator for \f$x_0\cdot x_1=x_2\f$
1689
- *
1690
- * Only bounds-consistency is supported.
1691
- */
1692
- GECODE_INT_EXPORT void
1693
- mult(Space* home, IntVar x0, IntVar x1, IntVar x2,
1694
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1695
-
1696
- /** \brief Post propagator for \f$x_0\cdot x_0=x_1\f$
1697
- *
1698
- * Only bounds-consistency is supported.
1699
- */
1700
- GECODE_INT_EXPORT void
1701
- sqr(Space* home, IntVar x0, IntVar x1,
1702
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1703
-
1704
- /** \brief Post propagator for \f$\lfloor\sqrt{x_0}\rfloor=x_1\f$
1705
- *
1706
- * Only bounds-consistency is supported.
1707
- */
1708
- GECODE_INT_EXPORT void
1709
- sqrt(Space* home, IntVar x0, IntVar x1,
1710
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1711
- //@}
1712
-
1713
- /**
1714
- * \defgroup TaskModelIntLinearInt Linear constraints over integer variables
1715
- * \ingroup TaskModelInt
1716
- *
1717
- * All variants for linear constraints over integer variables share
1718
- * the following properties:
1719
- * - Bounds-consistency (over the real numbers) is supported for
1720
- * all constraints (actually, for disequlities always domain-consistency
1721
- * is used as it is cheaper). Domain-consistency is supported for all
1722
- * non-reified constraint. As bounds-consistency for inequalities
1723
- * coincides with domain-consistency, the only
1724
- * real variation is for linear equations. Domain-consistent
1725
- * linear equations have exponential complexity, so use with care!
1726
- * - Variables occurring multiply in the argument arrays are replaced
1727
- * by a single occurrence: for example, \f$ax+bx\f$ becomes
1728
- * \f$(a+b)x\f$.
1729
- * - If in the above simplification the value for \f$(a+b)\f$ (or for
1730
- * \f$a\f$ and \f$b\f$) exceeds the limits for integers as
1731
- * defined in Int::Limits, an exception of type
1732
- * Int::OutOfLimits is thrown.
1733
- * - Assume the constraint
1734
- * \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$.
1735
- * If \f$|c|+\sum_{i=0}^{|x|-1}a_i\cdot x_i\f$ exceeds the maximal
1736
- * available precision (at least \f$2^{48}\f$), an exception of
1737
- * type Int::OutOfLimits is thrown.
1738
- * - In all other cases, the created propagators are accurate (that
1739
- * is, they will not silently overflow during propagation).
1740
- */
1741
-
1742
- //@{
1743
- /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r c\f$
1744
- GECODE_INT_EXPORT void
1745
- linear(Space* home, const IntVarArgs& x,
1746
- IntRelType r, int c,
1747
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1748
- /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r y\f$
1749
- GECODE_INT_EXPORT void
1750
- linear(Space* home, const IntVarArgs& x,
1751
- IntRelType r, IntVar y,
1752
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1753
- /// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i\sim_r c\right)\Leftrightarrow b\f$
1754
- GECODE_INT_EXPORT void
1755
- linear(Space* home, const IntVarArgs& x,
1756
- IntRelType r, int c, BoolVar b,
1757
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1758
- /// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i\sim_r y\right)\Leftrightarrow b\f$
1759
- GECODE_INT_EXPORT void
1760
- linear(Space* home, const IntVarArgs& x,
1761
- IntRelType r, IntVar y, BoolVar b,
1762
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1763
- /** \brief Post propagator for \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$
1764
- *
1765
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1766
- * \a a and \a x are of different size.
1767
- */
1768
- GECODE_INT_EXPORT void
1769
- linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1770
- IntRelType r, int c,
1771
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1772
- /** \brief Post propagator for \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r y\f$
1773
- *
1774
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1775
- * \a a and \a x are of different size.
1776
- */
1777
- GECODE_INT_EXPORT void
1778
- linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1779
- IntRelType r, IntVar y,
1780
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1781
- /** \brief Post propagator for \f$\left(\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\right)\Leftrightarrow b\f$
1782
- *
1783
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1784
- * \a a and \a x are of different size.
1785
- */
1786
- GECODE_INT_EXPORT void
1787
- linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1788
- IntRelType r, int c, BoolVar b,
1789
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1790
- /** \brief Post propagator for \f$\left(\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r y\right)\Leftrightarrow b\f$
1791
- *
1792
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1793
- * \a a and \a x are of different size.
1794
- */
1795
- GECODE_INT_EXPORT void
1796
- linear(Space* home, const IntArgs& a, const IntVarArgs& x,
1797
- IntRelType r, IntVar y, BoolVar b,
1798
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1799
- //@}
1800
-
1801
-
1802
- /**
1803
- * \defgroup TaskModelIntLinearBool Linear constraints over Boolean variables
1804
- * \ingroup TaskModelInt
1805
- *
1806
- * All variants for linear constraints over Boolean variables share
1807
- * the following properties:
1808
- * - Bounds-consistency (over the real numbers) is supported for
1809
- * all constraints (actually, for disequlities always domain-consistency
1810
- * is used as it is cheaper).
1811
- * - Variables occurring multiply in the argument arrays are replaced
1812
- * by a single occurrence: for example, \f$ax+bx\f$ becomes
1813
- * \f$(a+b)x\f$.
1814
- * - If in the above simplification the value for \f$(a+b)\f$ (or for
1815
- * \f$a\f$ and \f$b\f$) exceeds the limits for integers as
1816
- * defined in Int::Limits, an exception of type
1817
- * Int::OutOfLimits is thrown.
1818
- * - Assume the constraint
1819
- * \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$.
1820
- * If \f$|c|+\sum_{i=0}^{|x|-1}a_i\cdot x_i\f$ exceeds the limits
1821
- * for integers as defined in Int::Limits, an exception of
1822
- * type Int::OutOfLimits is thrown.
1823
- * - In all other cases, the created propagators are accurate (that
1824
- * is, they will not silently overflow during propagation).
1825
- */
1826
- //@{
1827
- /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r c\f$
1828
- GECODE_INT_EXPORT void
1829
- linear(Space* home, const BoolVarArgs& x,
1830
- IntRelType r, int c,
1831
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1832
- /// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i\sim_r c\right)\Leftrightarrow b\f$
1833
- GECODE_INT_EXPORT void
1834
- linear(Space* home, const BoolVarArgs& x,
1835
- IntRelType r, int c, BoolVar b,
1836
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1837
- /// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i\sim_r y\f$
1838
- GECODE_INT_EXPORT void
1839
- linear(Space* home, const BoolVarArgs& x,
1840
- IntRelType r, IntVar y,
1841
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1842
- /// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i\sim_r y\right)\Leftrightarrow b\f$
1843
- GECODE_INT_EXPORT void
1844
- linear(Space* home, const BoolVarArgs& x,
1845
- IntRelType r, IntVar y, BoolVar b,
1846
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1847
- /** \brief Post propagator for \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$
1848
- *
1849
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1850
- * \a a and \a x are of different size.
1851
- */
1852
- GECODE_INT_EXPORT void
1853
- linear(Space* home, const IntArgs& a, const BoolVarArgs& x,
1854
- IntRelType r, int c,
1855
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1856
- /** \brief Post propagator for \f$\left(\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\right)\Leftrightarrow b\f$
1857
- *
1858
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1859
- * \a a and \a x are of different size.
1860
- */
1861
- GECODE_INT_EXPORT void
1862
- linear(Space* home, const IntArgs& a, const BoolVarArgs& x,
1863
- IntRelType r, int c, BoolVar b,
1864
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1865
- /** \brief Post propagator for \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r y\f$
1866
- *
1867
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1868
- * \a a and \a x are of different size.
1869
- */
1870
- GECODE_INT_EXPORT void
1871
- linear(Space* home, const IntArgs& a, const BoolVarArgs& x,
1872
- IntRelType r, IntVar y,
1873
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1874
- /** \brief Post propagator for \f$\left(\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r y\f\right)\Leftrightarrow b$
1875
- *
1876
- * Throws an exception of type Int::ArgumentSizeMismatch, if
1877
- * \a a and \a x are of different size.
1878
- */
1879
- GECODE_INT_EXPORT void
1880
- linear(Space* home, const IntArgs& a, const BoolVarArgs& x,
1881
- IntRelType r, IntVar y, BoolVar b,
1882
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1883
- //@}
1884
-
1885
-
1886
- /**
1887
- * \defgroup TaskModelIntUnshare Unsharing variables
1888
- *
1889
- * Unsharing replaces multiple occurences of the same variable by
1890
- * fresh yet equal (enforced through propagators for equality)
1891
- * variables: after unsharing a variable appears at most once. Note
1892
- * that this is only done for not yet assigned variables (as all
1893
- * propagators can handle multiple occurences of the same variable
1894
- * provided it is already assigned).
1895
- *
1896
- * Unsharing is useful for constraints that only accept variable
1897
- * arrays without multiple occurences of the same variable, for
1898
- * example extensional.
1899
- *
1900
- * \ingroup TaskModelInt
1901
- */
1902
- //@{
1903
- /**
1904
- * \brief Replace multiple variable occurences in \a x by fresh variables
1905
- *
1906
- * Supports domain-consistency (\a icl = ICL_DOM, default) and
1907
- * bounds-consistency (\a icl = ICL_BND).
1908
- *
1909
- */
1910
- GECODE_INT_EXPORT void
1911
- unshare(Space* home, IntVarArgs& x,
1912
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1913
- /// Replace multiple variable occurences in \a x by fresh variables
1914
- GECODE_INT_EXPORT void
1915
- unshare(Space* home, BoolVarArgs& x,
1916
- IntConLevel icl=ICL_DEF, PropKind pk=PK_DEF);
1917
- //@}
1918
-
1919
-
1920
- /**
1921
- * \defgroup TaskModelIntBranch Branching
1922
- * \ingroup TaskModelInt
1923
- */
1924
-
1925
- //@{
1926
- /// Which variable to select for branching
1927
- enum IntVarBranch {
1928
- INT_VAR_NONE, ///< First unassigned
1929
- INT_VAR_MIN_MIN, ///< With smallest min
1930
- INT_VAR_MIN_MAX, ///< With largest min
1931
- INT_VAR_MAX_MIN, ///< With smallest max
1932
- INT_VAR_MAX_MAX, ///< With largest max
1933
- INT_VAR_SIZE_MIN, ///< With smallest domain size
1934
- INT_VAR_SIZE_MAX, ///< With largest domain size
1935
- /** \brief With smallest degree
1936
- *
1937
- * The degree of a variable is defined as the number of dependant
1938
- * propagators. In case of ties, choose the variable with smallest
1939
- * domain.
1940
- */
1941
- INT_VAR_DEGREE_MIN,
1942
- /** \brief With largest degree
1943
- *
1944
- * The degree of a variable is defined as the number of dependant
1945
- * propagators. In case of ties, choose the variable with smallest
1946
- * domain.
1947
- */
1948
- INT_VAR_DEGREE_MAX,
1949
- INT_VAR_SIZE_DEGREE_MIN, ///< With smallest domain size divided by degree
1950
- INT_VAR_SIZE_DEGREE_MAX, ///< With largest domain size divided by degree
1951
- /** \brief With smallest min-regret
1952
- *
1953
- * The min-regret of a variable is the difference between the
1954
- * smallest and second-smallest value still in the domain.
1955
- */
1956
- INT_VAR_REGRET_MIN_MIN,
1957
- /** \brief With largest min-regret
1958
- *
1959
- * The min-regret of a variable is the difference between the
1960
- * smallest and second-smallest value still in the domain.
1961
- */
1962
- INT_VAR_REGRET_MIN_MAX,
1963
- /** \brief With smallest max-regret
1964
- *
1965
- * The max-regret of a variable is the difference between the
1966
- * largest and second-largest value still in the domain.
1967
- */
1968
- INT_VAR_REGRET_MAX_MIN,
1969
- /** \brief With largest max-regret
1970
- *
1971
- * The max-regret of a variable is the difference between the
1972
- * largest and second-largest value still in the domain.
1973
- */
1974
- INT_VAR_REGRET_MAX_MAX
1975
- };
1976
-
1977
- /// Which values to select first for branching
1978
- enum IntValBranch {
1979
- INT_VAL_MIN, ///< Select smallest value
1980
- INT_VAL_MED, ///< Select median value
1981
- INT_VAL_MAX, ///< Select maximal value
1982
- INT_VAL_SPLIT_MIN, ///< Select lower half of domain
1983
- INT_VAL_SPLIT_MAX ///< Select upper half of domain
1984
- };
1985
-
1986
- /// Branch over \a x with variable selection \a vars and value selection \a vals
1987
- GECODE_INT_EXPORT void
1988
- branch(Space* home, const IntVarArgs& x,
1989
- IntVarBranch vars, IntValBranch vals);
1990
- /// Branch over \a x with variable selection \a vars and value selection \a vals
1991
- GECODE_INT_EXPORT void
1992
- branch(Space* home, const BoolVarArgs& x,
1993
- IntVarBranch vars, IntValBranch vals);
1994
- //@}
1995
-
1996
- /**
1997
- * \defgroup TaskModelIntAssign Assigning
1998
- * \ingroup TaskModelInt
1999
- */
2000
- //@{
2001
- /// Which value to select for assignment
2002
- enum IntAssign {
2003
- INT_ASSIGN_MIN, ///< Select smallest value
2004
- INT_ASSIGN_MED, ///< Select median value
2005
- INT_ASSIGN_MAX ///< Select maximum value
2006
- };
2007
-
2008
- /// Assign all \a x with value selection \a vals
2009
- GECODE_INT_EXPORT void
2010
- assign(Space* home, const IntVarArgs& x, IntAssign vals);
2011
- /// Assign all \a x with value selection \a vals
2012
- GECODE_INT_EXPORT void
2013
- assign(Space* home, const BoolVarArgs& x, IntAssign vals);
2014
-
2015
- //@}
2016
-
2017
- }
2018
-
2019
- /** \relates Gecode::DFA
2020
- * Print DFA \a d
2021
- */
2022
- GECODE_INT_EXPORT std::ostream&
2023
- operator<<(std::ostream&, const Gecode::DFA& d);
2024
-
2025
- /** \relates Gecode::TupleSet
2026
- * Print TupleSet \a ts
2027
- */
2028
- GECODE_INT_EXPORT std::ostream&
2029
- operator<<(std::ostream&, const Gecode::TupleSet& ts);
2030
-
2031
- #endif
2032
-
2033
- // IFDEF: GECODE_HAS_INT_VARS
2034
- // STATISTICS: int-post
2035
-