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
@@ -0,0 +1,128 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2002
8
+ *
9
+ * Last modified:
10
+ * $Date: 2008-07-11 10:54:36 +0200 (Fri, 11 Jul 2008) $ by $Author: tack $
11
+ * $Revision: 7354 $
12
+ *
13
+ * This file is part of Gecode, the generic constraint
14
+ * development environment:
15
+ * http://www.gecode.org
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining
18
+ * a copy of this software and associated documentation files (the
19
+ * "Software"), to deal in the Software without restriction, including
20
+ * without limitation the rights to use, copy, modify, merge, publish,
21
+ * distribute, sublicense, and/or sell copies of the Software, and to
22
+ * permit persons to whom the Software is furnished to do so, subject to
23
+ * the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be
26
+ * included in all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ *
36
+ */
37
+
38
+ namespace Gecode {
39
+
40
+ forceinline void
41
+ BoolVar::_init(Space* home, int min, int max) {
42
+ assert((min >= 0) && (max <= 1) && (min <= max));
43
+ if (min > 0)
44
+ varimp = &Int::BoolVarImp::s_one;
45
+ else if (max == 0)
46
+ varimp = &Int::BoolVarImp::s_zero;
47
+ else
48
+ varimp = new (home) Int::BoolVarImp(home,0,1);
49
+ }
50
+
51
+ forceinline
52
+ BoolVar::BoolVar(void) {}
53
+ forceinline
54
+ BoolVar::BoolVar(const BoolVar& x)
55
+ : VarBase<Int::BoolVarImp>(x.varimp) {}
56
+ forceinline
57
+ BoolVar::BoolVar(const Int::BoolView& x)
58
+ : VarBase<Int::BoolVarImp>(x.var()) {}
59
+ forceinline
60
+ BoolVar::BoolVar(const Reflection::Var& x)
61
+ : VarBase<Int::BoolVarImp>(x.var<Int::BoolVarImp>()) {}
62
+
63
+ forceinline int
64
+ BoolVar::val(void) const {
65
+ if (!varimp->assigned())
66
+ throw Int::ValOfUnassignedVar("BoolVar::val");
67
+ return varimp->val();
68
+ }
69
+ forceinline int
70
+ BoolVar::min(void) const {
71
+ return varimp->min();
72
+ }
73
+ forceinline int
74
+ BoolVar::med(void) const {
75
+ return varimp->med();
76
+ }
77
+ forceinline int
78
+ BoolVar::max(void) const {
79
+ return varimp->max();
80
+ }
81
+
82
+
83
+ forceinline unsigned int
84
+ BoolVar::width(void) const {
85
+ return varimp->width();
86
+ }
87
+ forceinline unsigned int
88
+ BoolVar::size(void) const {
89
+ return varimp->size();
90
+ }
91
+
92
+
93
+
94
+ forceinline bool
95
+ BoolVar::assigned(void) const {
96
+ return varimp->assigned();
97
+ }
98
+ forceinline bool
99
+ BoolVar::range(void) const {
100
+ return varimp->range();
101
+ }
102
+ forceinline bool
103
+ BoolVar::in(int n) const {
104
+ return varimp->in(n);
105
+ }
106
+
107
+
108
+ forceinline void
109
+ BoolVar::update(Space* home, bool share, BoolVar& x) {
110
+ varimp = x.varimp->copy(home,share);
111
+ }
112
+
113
+ forceinline bool
114
+ BoolVar::zero(void) const {
115
+ return varimp->zero();
116
+ }
117
+ forceinline bool
118
+ BoolVar::one(void) const {
119
+ return varimp->one();
120
+ }
121
+ forceinline bool
122
+ BoolVar::none(void) const {
123
+ return varimp->none();
124
+ }
125
+
126
+ }
127
+
128
+ // STATISTICS: int-var
@@ -0,0 +1,153 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2002
8
+ *
9
+ * Last modified:
10
+ * $Date: 2008-07-11 10:54:36 +0200 (Fri, 11 Jul 2008) $ by $Author: tack $
11
+ * $Revision: 7354 $
12
+ *
13
+ * This file is part of Gecode, the generic constraint
14
+ * development environment:
15
+ * http://www.gecode.org
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining
18
+ * a copy of this software and associated documentation files (the
19
+ * "Software"), to deal in the Software without restriction, including
20
+ * without limitation the rights to use, copy, modify, merge, publish,
21
+ * distribute, sublicense, and/or sell copies of the Software, and to
22
+ * permit persons to whom the Software is furnished to do so, subject to
23
+ * the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be
26
+ * included in all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ *
36
+ */
37
+
38
+ namespace Gecode {
39
+
40
+ forceinline void
41
+ IntVar::_init(Space* home, int min, int max) {
42
+ varimp = new (home) Int::IntVarImp(home,min,max);
43
+ }
44
+
45
+ forceinline void
46
+ IntVar::_init(Space* home, const IntSet& ds) {
47
+ varimp = new (home) Int::IntVarImp(home,ds);
48
+ }
49
+
50
+ forceinline
51
+ IntVar::IntVar(void) {}
52
+ forceinline
53
+ IntVar::IntVar(const IntVar& x)
54
+ : VarBase<Int::IntVarImp>(x.varimp) {}
55
+ forceinline
56
+ IntVar::IntVar(const Int::IntView& x)
57
+ : VarBase<Int::IntVarImp>(x.var()) {}
58
+ forceinline
59
+ IntVar::IntVar(const Reflection::Var& x)
60
+ : VarBase<Int::IntVarImp>(x.var<Int::IntVarImp>()) {}
61
+
62
+
63
+ forceinline int
64
+ IntVar::val(void) const {
65
+ if (!varimp->assigned())
66
+ throw Int::ValOfUnassignedVar("IntVar::val");
67
+ return varimp->val();
68
+ }
69
+ forceinline int
70
+ IntVar::min(void) const {
71
+ return varimp->min();
72
+ }
73
+ forceinline int
74
+ IntVar::med(void) const {
75
+ return varimp->med();
76
+ }
77
+ forceinline int
78
+ IntVar::max(void) const {
79
+ return varimp->max();
80
+ }
81
+
82
+
83
+ forceinline unsigned int
84
+ IntVar::width(void) const {
85
+ return varimp->width();
86
+ }
87
+ forceinline unsigned int
88
+ IntVar::size(void) const {
89
+ return varimp->size();
90
+ }
91
+
92
+
93
+
94
+ forceinline bool
95
+ IntVar::assigned(void) const {
96
+ return varimp->assigned();
97
+ }
98
+ forceinline bool
99
+ IntVar::range(void) const {
100
+ return varimp->range();
101
+ }
102
+ forceinline bool
103
+ IntVar::in(int n) const {
104
+ return varimp->in(n);
105
+ }
106
+
107
+
108
+ forceinline void
109
+ IntVar::update(Space* home, bool share, IntVar& x) {
110
+ varimp = x.varimp->copy(home,share);
111
+ }
112
+
113
+ /*
114
+ * Range iterator
115
+ *
116
+ */
117
+ forceinline
118
+ IntVarRanges::IntVarRanges(void) {}
119
+
120
+ forceinline
121
+ IntVarRanges::IntVarRanges(const IntVar& x)
122
+ : Int::IntVarImpFwd(x.var()) {}
123
+
124
+ forceinline void
125
+ IntVarRanges::init(const IntVar& x) {
126
+ Int::IntVarImpFwd::init(x.var());
127
+ }
128
+
129
+
130
+ /*
131
+ * Value iterator
132
+ *
133
+ */
134
+
135
+ forceinline
136
+ IntVarValues::IntVarValues(void) {}
137
+
138
+ forceinline
139
+ IntVarValues::IntVarValues(const IntVar& x) {
140
+ IntVarRanges r(x);
141
+ Iter::Ranges::ToValues<IntVarRanges>::init(r);
142
+ }
143
+
144
+ forceinline void
145
+ IntVarValues::init(const IntVar& x) {
146
+ IntVarRanges r(x);
147
+ Iter::Ranges::ToValues<IntVarRanges>::init(r);
148
+ }
149
+
150
+ }
151
+
152
+ // STATISTICS: int-var
153
+
@@ -0,0 +1,1918 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2005
8
+ *
9
+ * Last modified:
10
+ * $Date: 2008-07-11 09:39:08 +0200 (Fri, 11 Jul 2008) $ by $Author: tack $
11
+ * $Revision: 7297 $
12
+ *
13
+ * This file is part of Gecode, the generic constraint
14
+ * development environment:
15
+ * http://www.gecode.org
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining
18
+ * a copy of this software and associated documentation files (the
19
+ * "Software"), to deal in the Software without restriction, including
20
+ * without limitation the rights to use, copy, modify, merge, publish,
21
+ * distribute, sublicense, and/or sell copies of the Software, and to
22
+ * permit persons to whom the Software is furnished to do so, subject to
23
+ * the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be
26
+ * included in all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ *
36
+ */
37
+
38
+ #include <iostream>
39
+
40
+ #if (-17 / 7) == -2
41
+ #define GECODE_INT_RND_TWDS_ZERO 1
42
+ #else
43
+ #define GECODE_INT_RND_TWDS_ZERO 0
44
+ #endif
45
+
46
+ namespace Gecode { namespace Int {
47
+
48
+ /**
49
+ * \brief Range iterator for integer views
50
+ *
51
+ * This class provides (by specialization) a range iterator
52
+ * for all integer views.
53
+ *
54
+ * Note that this template class serves only as a specification
55
+ * of the interface of the various specializations.
56
+ *
57
+ * \ingroup TaskActorInt
58
+ */
59
+ template <class View>
60
+ class ViewRanges {
61
+ public:
62
+ /// \name Constructors and initialization
63
+ //@{
64
+ /// Default constructor
65
+ ViewRanges(void);
66
+ /// Initialize with ranges for view \a x
67
+ ViewRanges(const View& x);
68
+ /// Initialize with ranges for view \a x
69
+ void init(const View& x);
70
+ //@}
71
+
72
+ /// \name Iteration control
73
+ //@{
74
+ /// Test whether iterator is still at a range or done
75
+ bool operator()(void) const;
76
+ /// Move iterator to next range (if possible)
77
+ void operator++(void);
78
+ //@}
79
+
80
+ /// \name Range access
81
+ //@{
82
+ /// Return smallest value of range
83
+ int min(void) const;
84
+ /// Return largest value of range
85
+ int max(void) const;
86
+ /// Return width of range (distance between minimum and maximum)
87
+ unsigned int width(void) const;
88
+ //@}
89
+ };
90
+
91
+ /**
92
+ * \brief Value iterator for integer views
93
+ *
94
+ * This class provides a value iterator for all
95
+ * integer views.
96
+ *
97
+ * \ingroup TaskActorInt
98
+ */
99
+ template <class View>
100
+ class ViewValues : public Iter::Ranges::ToValues<ViewRanges<View> > {
101
+ public:
102
+ /// \name Constructors and initialization
103
+ //@{
104
+ /// Default constructor
105
+ ViewValues(void);
106
+ /// Initialize with values for \a x
107
+ ViewValues(const View& x);
108
+ /// Initialize with values \a x
109
+ void init(const View& x);
110
+ //@}
111
+ };
112
+
113
+ }}
114
+
115
+ #include "gecode/int/view/iter.icc"
116
+
117
+ namespace Gecode {
118
+
119
+ namespace Int {
120
+
121
+ /**
122
+ * \defgroup TaskActorIntView Integer views
123
+ *
124
+ * Integer propagators and branchings compute with integer views.
125
+ * Integer views provide views on integer variable implementations,
126
+ * integer constants, and also allow to scale, translate, and negate
127
+ * variables. Additionally, a special Boolean view is provided that
128
+ * offers convenient and efficient operations for Boolean (0/1)
129
+ * views.
130
+ * \ingroup TaskActorInt
131
+ */
132
+
133
+ /**
134
+ * \brief Integer view for integer variables
135
+ * \ingroup TaskActorIntView
136
+ */
137
+ class IntView : public VarViewBase<IntVarImp> {
138
+ protected:
139
+ using VarViewBase<IntVarImp>::varimp;
140
+ public:
141
+ /// \name Constructors and initialization
142
+ //@{
143
+ /// Default constructor
144
+ IntView(void);
145
+ /// Initialize from integer variable \a x
146
+ IntView(const IntVar& x);
147
+ /// Initialize from integer variable \a x
148
+ IntView(IntVarImp* x);
149
+ /// Initialize from specification
150
+ IntView(Space* home, const Reflection::VarMap& vars,
151
+ Reflection::Arg* arg);
152
+ //@}
153
+
154
+ /// \name Value access
155
+ //@{
156
+ /// Return minimum of domain
157
+ int min(void) const;
158
+ /// Return maximum of domain
159
+ int max(void) const;
160
+ /// Return median of domain
161
+ int med(void) const;
162
+ /// Return assigned value (only if assigned)
163
+ int val(void) const;
164
+
165
+ /// Return size (cardinality) of domain
166
+ unsigned int size(void) const;
167
+ /// Return width of domain (distance between maximum and minimum)
168
+ unsigned int width(void) const;
169
+ /// Return regret of domain minimum (distance to next larger value)
170
+ unsigned int regret_min(void) const;
171
+ /// Return regret of domain maximum (distance to next smaller value)
172
+ unsigned int regret_max(void) const;
173
+ //@}
174
+
175
+ /// \name Domain tests
176
+ //@{
177
+ /// Test whether domain is a range
178
+ bool range(void) const;
179
+ /// Test whether view is assigned
180
+ bool assigned(void) const;
181
+
182
+ /// Test whether \a n is contained in domain
183
+ bool in(int n) const;
184
+ /// Test whether \a n is contained in domain
185
+ bool in(double n) const;
186
+ //@}
187
+
188
+ /// \name Domain update by value
189
+ //@{
190
+ /// Restrict domain values to be less or equal than \a n
191
+ ModEvent lq(Space* home, int n);
192
+ /// Restrict domain values to be less or equal than \a n
193
+ ModEvent lq(Space* home, double n);
194
+
195
+ /// Restrict domain values to be less than \a n
196
+ ModEvent le(Space* home, int n);
197
+ /// Restrict domain values to be less than \a n
198
+ ModEvent le(Space* home, double n);
199
+
200
+ /// Restrict domain values to be greater or equal than \a n
201
+ ModEvent gq(Space* home, int n);
202
+ /// Restrict domain values to be greater or equal than \a n
203
+ ModEvent gq(Space* home, double n);
204
+
205
+ /// Restrict domain values to be greater than \a n
206
+ ModEvent gr(Space* home, int n);
207
+ /// Restrict domain values to be greater than \a n
208
+ ModEvent gr(Space* home, double n);
209
+ /// Restrict domain values to be different from \a n
210
+ ModEvent nq(Space* home, int n);
211
+ /// Restrict domain values to be different from \a n
212
+ ModEvent nq(Space* home, double n);
213
+
214
+ /// Restrict domain values to be equal to \a n
215
+ ModEvent eq(Space* home, int n);
216
+ /// Restrict domain values to be equal to \a n
217
+ ModEvent eq(Space* home, double n);
218
+ //@}
219
+
220
+ /**
221
+ * \name Domain update by iterator
222
+ *
223
+ * Views can be both updated by range and value iterators.
224
+ * Value iterators do not need to be strict in that the same value
225
+ * is allowed to occur more than once in the iterated sequence.
226
+ *
227
+ * The argument \a depends must be true, if the iterator
228
+ * passed as argument depends on the view on which the operation
229
+ * is invoked. In this case, the view is only updated after the
230
+ * iterator has been consumed. Otherwise, the domain might be updated
231
+ * concurrently while following the iterator.
232
+ *
233
+ */
234
+ //@{
235
+ /// Replace domain by ranges described by \a i
236
+ template <class I>
237
+ ModEvent narrow_r(Space* home, I& i, bool depends=true);
238
+ /// Intersect domain with ranges described by \a i
239
+ template <class I>
240
+ ModEvent inter_r(Space* home, I& i, bool depends=true);
241
+ /// Remove from domain the ranges described by \a i
242
+ template <class I>
243
+ ModEvent minus_r(Space* home, I& i, bool depends=true);
244
+ /// Replace domain by values described by \a i
245
+ template <class I>
246
+ ModEvent narrow_v(Space* home, I& i, bool depends=true);
247
+ /// Intersect domain with values described by \a i
248
+ template <class I>
249
+ ModEvent inter_v(Space* home, I& i, bool depends=true);
250
+ /// Remove from domain the values described by \a i
251
+ template <class I>
252
+ ModEvent minus_v(Space* home, I& i, bool depends=true);
253
+ //@}
254
+
255
+ /// \name Delta information for advisors
256
+ //@{
257
+ /// Return modification event
258
+ static ModEvent modevent(const Delta* d);
259
+ /// Return minimum value just pruned
260
+ int min(const Delta* d) const;
261
+ /// Return maximum value just pruned
262
+ int max(const Delta* d) const;
263
+ /// Test whether arbitrary values got pruned
264
+ bool any(const Delta* d) const;
265
+ //@}
266
+
267
+ /// \name View-dependent propagator support
268
+ //@{
269
+ /// Translate modification event \a me to modification event delta for view
270
+ static ModEventDelta med(ModEvent me);
271
+ //@}
272
+
273
+ /// \name Cloning
274
+ //@{
275
+ /// Update this view to be a clone of view \a x
276
+ void update(Space* home, bool share, IntView& x);
277
+ //@}
278
+
279
+ /// \name Reflection
280
+ //@{
281
+ /// Return specification for this view, using variable map \a m
282
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
283
+ static Support::Symbol type(void);
284
+ //@}
285
+
286
+ };
287
+
288
+ }
289
+
290
+ /**
291
+ * \brief Traits class for views and variable implementations
292
+ *
293
+ * This class specializes the ViewVarImpTraits for IntView
294
+ * \ingroup TaskActorIntView
295
+ */
296
+ template<>
297
+ class ViewVarImpTraits<Int::IntView> {
298
+ public:
299
+ /// The variable type of an IntView
300
+ typedef Int::IntVarImp VarImp;
301
+ };
302
+
303
+ /**
304
+ * \brief Traits class mapping variables to views
305
+ *
306
+ * This class specializes the VarViewTraits for integer variables.
307
+ */
308
+ template<>
309
+ class VarViewTraits<IntVar> {
310
+ public:
311
+ /// The variable type of an IntView
312
+ typedef Int::IntView View;
313
+ };
314
+
315
+ /**
316
+ * \brief Class providing domain size info
317
+ *
318
+ * This class specializes the DomainSize class for integer views.
319
+ */
320
+ template<>
321
+ class DomainSize<Int::IntView> {
322
+ public:
323
+ /// The size of an integer domain
324
+ static int size(const Int::IntView& iv) { return iv.size(); }
325
+ };
326
+
327
+ namespace Int {
328
+
329
+ /**
330
+ * \brief Minus integer view
331
+ *
332
+ * A minus integer view \f$m\f$ for an integer view \f$x\f$ provides
333
+ * operations such that \f$m\f$ behaves as \f$-x\f$.
334
+ * \ingroup TaskActorIntView
335
+ */
336
+ class MinusView : public DerivedViewBase<IntView> {
337
+ protected:
338
+ using DerivedViewBase<IntView>::view;
339
+ public:
340
+ /// \name Constructors and initialization
341
+ //@{
342
+ /// Default constructor
343
+ MinusView(void);
344
+ /// Initialize with integer view \a x
345
+ MinusView(const IntView& x);
346
+ /// Initialize from specification
347
+ MinusView(Space* home, const Reflection::VarMap& vars,
348
+ Reflection::Arg* arg);
349
+ /// Initialize with integer view \a x
350
+ void init(const IntView& x);
351
+ //@}
352
+
353
+ /// \name Value access
354
+ //@{
355
+ /// Return minimum of domain
356
+ int min(void) const;
357
+ /// Return maximum of domain
358
+ int max(void) const;
359
+ /// Return median of domain
360
+ int med(void) const;
361
+ /// Return assigned value (only if assigned)
362
+ int val(void) const;
363
+
364
+ /// Return size (cardinality) of domain
365
+ unsigned int size(void) const;
366
+ /// Return width of domain (distance between maximum and minimum)
367
+ unsigned int width(void) const;
368
+ /// Return regret of domain minimum (distance to next larger value)
369
+ unsigned int regret_min(void) const;
370
+ /// Return regret of domain maximum (distance to next smaller value)
371
+ unsigned int regret_max(void) const;
372
+ //@}
373
+
374
+ /// \name Domain tests
375
+ //@{
376
+ /// Test whether domain is a range
377
+ bool range(void) const;
378
+ /// Test whether view is assigned
379
+ bool assigned(void) const;
380
+
381
+ /// Test whether \a n is contained in domain
382
+ bool in(int n) const;
383
+ /// Test whether \a n is contained in domain
384
+ bool in(double n) const;
385
+ //@}
386
+
387
+ /// \name Domain update by value
388
+ //@{
389
+ /// Restrict domain values to be less or equal than \a n
390
+ ModEvent lq(Space* home, int n);
391
+ /// Restrict domain values to be less or equal than \a n
392
+ ModEvent lq(Space* home, double n);
393
+ /// Restrict domain values to be less than \a n
394
+ ModEvent le(Space* home, int n);
395
+ /// Restrict domain values to be less than \a n
396
+ ModEvent le(Space* home, double n);
397
+ /// Restrict domain values to be greater or equal than \a n
398
+ ModEvent gq(Space* home, int n);
399
+ /// Restrict domain values to be greater or equal than \a n
400
+ ModEvent gq(Space* home, double n);
401
+ /// Restrict domain values to be greater than \a n
402
+ ModEvent gr(Space* home, int n);
403
+ /// Restrict domain values to be greater than \a n
404
+ ModEvent gr(Space* home, double n);
405
+ /// Restrict domain values to be different from \a n
406
+ ModEvent nq(Space* home, int n);
407
+ /// Restrict domain values to be different from \a n
408
+ ModEvent nq(Space* home, double n);
409
+ /// Restrict domain values to be equal to \a n
410
+ ModEvent eq(Space* home, int n);
411
+ /// Restrict domain values to be equal to \a n
412
+ ModEvent eq(Space* home, double n);
413
+ //@}
414
+
415
+ /**
416
+ * \name Domain update by iterator
417
+ *
418
+ * Views can be both updated by range and value iterators.
419
+ * Value iterators do not need to be strict in that the same value
420
+ * is allowed to occur more than once in the iterated sequence.
421
+ *
422
+ * The argument \a depends must be true, if the iterator
423
+ * passed as argument depends on the view on which the operation
424
+ * is invoked. In this case, the view is only updated after the
425
+ * iterator has been consumed. Otherwise, the domain might be updated
426
+ * concurrently while following the iterator.
427
+ *
428
+ */
429
+ //@{
430
+ /// Replace domain by ranges described by \a i
431
+ template <class I>
432
+ ModEvent narrow_r(Space* home, I& i, bool depends=true);
433
+ /// Intersect domain with ranges described by \a i
434
+ template <class I>
435
+ ModEvent inter_r(Space* home, I& i, bool depends=true);
436
+ /// Remove from domain the ranges described by \a i
437
+ template <class I>
438
+ ModEvent minus_r(Space* home, I& i, bool depends=true);
439
+ /// Replace domain by values described by \a i
440
+ template <class I>
441
+ ModEvent narrow_v(Space* home, I& i, bool depends=true);
442
+ /// Intersect domain with values described by \a i
443
+ template <class I>
444
+ ModEvent inter_v(Space* home, I& i, bool depends=true);
445
+ /// Remove from domain the values described by \a i
446
+ template <class I>
447
+ ModEvent minus_v(Space* home, I& i, bool depends=true);
448
+ //@}
449
+
450
+ /// \name View-dependent propagator support
451
+ //@{
452
+ /// Schedule propagator \a p with modification event \a me
453
+ static void schedule(Space* home, Propagator* p, ModEvent me);
454
+ /// Return modification event for view type in \a med
455
+ static ModEvent me(ModEventDelta med);
456
+ /// Translate modification event \a me to modification event delta for view
457
+ static ModEventDelta med(ModEvent me);
458
+ //@}
459
+
460
+ /// \name Dependencies
461
+ //@{
462
+ /**
463
+ * \brief Subscribe propagator \a p with propagation condition \a pc to view
464
+ *
465
+ * In case \a process is false, the propagator is just subscribed but
466
+ * not processed for execution (this must be used when creating
467
+ * subscriptions during propagation).
468
+ */
469
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
470
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
471
+ void cancel(Space* home, Propagator* p, PropCond pc);
472
+ /// Subscribe advisor \a a to view
473
+ void subscribe(Space* home, Advisor* a);
474
+ /// Cancel subscription of advisor \a a
475
+ void cancel(Space* home, Advisor* a);
476
+ //@}
477
+
478
+ /// \name Delta information for advisors
479
+ //@{
480
+ /// Return modification event
481
+ static ModEvent modevent(const Delta* d);
482
+ /// Return minimum value just pruned
483
+ int min(const Delta* d) const;
484
+ /// Return maximum value just pruned
485
+ int max(const Delta* d) const;
486
+ /// Test whether arbitrary values got pruned
487
+ bool any(const Delta* d) const;
488
+ //@}
489
+
490
+ /// \name Cloning
491
+ //@{
492
+ /// Update this view to be a clone of view \a x
493
+ void update(Space* home, bool share, MinusView& x);
494
+ //@}
495
+
496
+ /// \name Reflection
497
+ //@{
498
+ /// Return specification for this view, using variable map \a m
499
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
500
+ static Support::Symbol type(void);
501
+ //@}
502
+ };
503
+
504
+ }
505
+
506
+ /** \name View comparison
507
+ * \relates Gecode::Int::MinusView
508
+ */
509
+ //@{
510
+ /// Test whether views \a x and \a y are the same
511
+ bool same(const Int::MinusView& x, const Int::MinusView& y);
512
+ /// Test whether view \a x comes before \a y (arbitrary order)
513
+ bool before(const Int::MinusView& x, const Int::MinusView& y);
514
+ //@}
515
+
516
+ /**
517
+ * \brief Traits class for views and variable implementations
518
+ *
519
+ * This class specializes the ViewVarImpTraits for MinusView.
520
+ * \ingroup TaskActorIntView
521
+ */
522
+ template<>
523
+ class ViewVarImpTraits<Int::MinusView> {
524
+ public:
525
+ /// The variable type of a MinusView
526
+ typedef Int::IntVarImp VarImp;
527
+ };
528
+
529
+
530
+ namespace Int {
531
+
532
+ /**
533
+ * \brief Offset integer view
534
+ *
535
+ * An offset integer view \f$o\f$ for an integer view \f$x\f$ and
536
+ * an integer \f$c\f$ provides operations such that \f$o\f$
537
+ * behaves as \f$x+c\f$.
538
+ * \ingroup TaskActorIntView
539
+ */
540
+ class OffsetView : public DerivedViewBase<IntView> {
541
+ protected:
542
+ /// Offset
543
+ int c;
544
+ using DerivedViewBase<IntView>::view;
545
+ public:
546
+ /// \name Constructors and initialization
547
+ //@{
548
+ /// Default constructor
549
+ OffsetView(void);
550
+ /// Initialize with integer view \a x and offset \a c
551
+ OffsetView(const IntView& x, int c);
552
+ /// Initialize from specification
553
+ OffsetView(Space* home, const Reflection::VarMap& vars,
554
+ Reflection::Arg* arg);
555
+ /// Initialize with integer view \a x and offset \a c
556
+ void init(const IntView& x, int c);
557
+ /// Return offset
558
+ int offset(void) const;
559
+ //@}
560
+
561
+ /// \name Value access
562
+ //@{
563
+ /// Return minimum of domain
564
+ int min(void) const;
565
+ /// Return maximum of domain
566
+ int max(void) const;
567
+ /// Return median of domain
568
+ int med(void) const;
569
+ /// Return assigned value (only if assigned)
570
+ int val(void) const;
571
+
572
+ /// Return size (cardinality) of domain
573
+ unsigned int size(void) const;
574
+ /// Return width of domain (distance between maximum and minimum)
575
+ unsigned int width(void) const;
576
+ /// Return regret of domain minimum (distance to next larger value)
577
+ unsigned int regret_min(void) const;
578
+ /// Return regret of domain maximum (distance to next smaller value)
579
+ unsigned int regret_max(void) const;
580
+ //@}
581
+
582
+ /// \name Domain tests
583
+ //@{
584
+ /// Test whether domain is a range
585
+ bool range(void) const;
586
+ /// Test whether view is assigned
587
+ bool assigned(void) const;
588
+
589
+ /// Test whether \a n is contained in domain
590
+ bool in(int n) const;
591
+ /// Test whether \a n is contained in domain
592
+ bool in(double n) const;
593
+ //@}
594
+
595
+ /// \name Domain update by value
596
+ //@{
597
+ /// Restrict domain values to be less or equal than \a n
598
+ ModEvent lq(Space* home, int n);
599
+ /// Restrict domain values to be less or equal than \a n
600
+ ModEvent lq(Space* home, double n);
601
+ /// Restrict domain values to be less than \a n
602
+ ModEvent le(Space* home, int n);
603
+ /// Restrict domain values to be less than \a n
604
+ ModEvent le(Space* home, double n);
605
+ /// Restrict domain values to be greater or equal than \a n
606
+ ModEvent gq(Space* home, int n);
607
+ /// Restrict domain values to be greater or equal than \a n
608
+ ModEvent gq(Space* home, double n);
609
+ /// Restrict domain values to be greater than \a n
610
+ ModEvent gr(Space* home, int n);
611
+ /// Restrict domain values to be greater than \a n
612
+ ModEvent gr(Space* home, double n);
613
+ /// Restrict domain values to be different from \a n
614
+ ModEvent nq(Space* home, int n);
615
+ /// Restrict domain values to be different from \a n
616
+ ModEvent nq(Space* home, double n);
617
+ /// Restrict domain values to be equal to \a n
618
+ ModEvent eq(Space* home, int n);
619
+ /// Restrict domain values to be equal to \a n
620
+ ModEvent eq(Space* home, double n);
621
+ //@}
622
+
623
+ /**
624
+ * \name Domain update by iterator
625
+ *
626
+ * Views can be both updated by range and value iterators.
627
+ * Value iterators do not need to be strict in that the same value
628
+ * is allowed to occur more than once in the iterated sequence.
629
+ *
630
+ * The argument \a depends must be true, if the iterator
631
+ * passed as argument depends on the view on which the operation
632
+ * is invoked. In this case, the view is only updated after the
633
+ * iterator has been consumed. Otherwise, the domain might be updated
634
+ * concurrently while following the iterator.
635
+ *
636
+ */
637
+ //@{
638
+ /// Replace domain by ranges described by \a i
639
+ template <class I>
640
+ ModEvent narrow_r(Space* home, I& i, bool depends=true);
641
+ /// Intersect domain with ranges described by \a i
642
+ template <class I>
643
+ ModEvent inter_r(Space* home, I& i, bool depends=true);
644
+ /// Remove from domain the ranges described by \a i
645
+ template <class I>
646
+ ModEvent minus_r(Space* home, I& i, bool depends=true);
647
+ /// Replace domain by values described by \a i
648
+ template <class I>
649
+ ModEvent narrow_v(Space* home, I& i, bool depends=true);
650
+ /// Intersect domain with values described by \a i
651
+ template <class I>
652
+ ModEvent inter_v(Space* home, I& i, bool depends=true);
653
+ /// Remove from domain the values described by \a i
654
+ template <class I>
655
+ ModEvent minus_v(Space* home, I& i, bool depends=true);
656
+ //@}
657
+
658
+ /// \name View-dependent propagator support
659
+ //@{
660
+ /// Schedule propagator \a p with modification event \a me
661
+ static void schedule(Space* home, Propagator* p, ModEvent me);
662
+ /// Return modification event for view type in \a med
663
+ static ModEvent me(ModEventDelta med);
664
+ /// Translate modification event \a me to modification event delta for view
665
+ static ModEventDelta med(ModEvent me);
666
+ //@}
667
+
668
+ /// \name Dependencies
669
+ //@{
670
+ /**
671
+ * \brief Subscribe propagator \a p with propagation condition \a pc to view
672
+ *
673
+ * In case \a process is false, the propagator is just subscribed but
674
+ * not processed for execution (this must be used when creating
675
+ * subscriptions during propagation).
676
+ */
677
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
678
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
679
+ void cancel(Space* home, Propagator* p, PropCond pc);
680
+ /// Subscribe advisor \a a to view
681
+ void subscribe(Space* home, Advisor* a);
682
+ /// Cancel subscription of advisor \a a
683
+ void cancel(Space* home, Advisor* a);
684
+ //@}
685
+
686
+ /// \name Delta information for advisors
687
+ //@{
688
+ /// Return modification event
689
+ static ModEvent modevent(const Delta* d);
690
+ /// Return minimum value just pruned
691
+ int min(const Delta* d) const;
692
+ /// Return maximum value just pruned
693
+ int max(const Delta* d) const;
694
+ /// Test whether arbitrary values got pruned
695
+ bool any(const Delta* d) const;
696
+ //@}
697
+
698
+ /// \name Cloning
699
+ //@{
700
+ /// Update this view to be a clone of view \a x
701
+ void update(Space* home, bool share, OffsetView& x);
702
+ //@}
703
+
704
+ /// \name Reflection
705
+ //@{
706
+ /// Return specification for this view, using variable map \a m
707
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
708
+ static Support::Symbol type(void);
709
+ //@}
710
+ };
711
+
712
+ }
713
+
714
+ /** \name View comparison
715
+ * \relates Gecode::Int::OffsetView
716
+ */
717
+ //@{
718
+ /// Test whether views \a x and \a y are the same
719
+ bool same(const Int::OffsetView& x, const Int::OffsetView& y);
720
+ /// Test whether view \a x comes before \a y (arbitrary order)
721
+ bool before(const Int::OffsetView& x, const Int::OffsetView& y);
722
+ //@}
723
+
724
+ /**
725
+ * \brief Traits class for views and variable implementations
726
+ *
727
+ * This class specializes the ViewVarImpTraits for OffsetView.
728
+ * \ingroup TaskActorIntView
729
+ */
730
+ template<>
731
+ class ViewVarImpTraits<Int::OffsetView> {
732
+ public:
733
+ /// The variable type of an OffsetView
734
+ typedef Int::IntVarImp VarImp;
735
+ };
736
+
737
+
738
+
739
+ namespace Int {
740
+
741
+ /**
742
+ * \brief Scale integer view (template)
743
+ *
744
+ * A scale integer view \f$s\f$ for an integer view \f$x\f$ and
745
+ * a non-negative integer \f$a\f$ provides operations such that \f$s\f$
746
+ * behaves as \f$a\cdot x\f$.
747
+ *
748
+ * The precision of a scale integer view is defined by the value types
749
+ * \a Val and \a UnsVal. \a Val can be either \c int or \c double where
750
+ * \a UnsVal must be the unsigned variant of \a Val (that is, if \a Val
751
+ * is \c int, then \a UnsVal must be \c unsigned \c int; if \a Val is
752
+ * \c double, then \a UnsVal must be \c double as well). The range which is
753
+ * allowed for the two types is defined by the values in
754
+ * Gecode::Limits.
755
+ *
756
+ * Note that scale integer views currently do not provide operations
757
+ * for updating domains by range iterators.
758
+ *
759
+ * The template is not to be used directly (as it is very clumsy). Use
760
+ * the following instead:
761
+ * - IntScaleView for scale views with integer precision
762
+ * - DoubleScaleView for scale views with double precision
763
+ *
764
+ * \ingroup TaskActorIntView
765
+ */
766
+ template <class Val, class UnsVal>
767
+ class ScaleView : public DerivedViewBase<IntView> {
768
+ protected:
769
+ /// Scale factor
770
+ int a;
771
+ using DerivedViewBase<IntView>::view;
772
+
773
+ /// \name Support functions for division
774
+ //@{
775
+ /// Return \f$\lfloor x/a\rfloor\f$
776
+ int floor_div(double x) const;
777
+ /// Return \f$\lceil x/a\rceil\f$
778
+ int ceil_div(double x) const;
779
+ /// Return \f$x/a\f$ and set \a exact to true if \a x is multiple of \a a
780
+ int exact_div(double x, bool& exact) const;
781
+ #if GECODE_INT_RND_TWDS_ZERO
782
+ /// Return \f$\lfloor x/a\rfloor\f$
783
+ int floor_div(int) const;
784
+ /// Return \f$\lceil x/a\rceil\f$
785
+ int ceil_div(int) const;
786
+ /// Return \f$x/a\f$ and set \a exact to true if \a x is multiple of \a a
787
+ int exact_div(int, bool&) const;
788
+ #endif
789
+ //@}
790
+
791
+ public:
792
+ /// \name Constructors and initialization
793
+ //@{
794
+ /// Default constructor
795
+ ScaleView(void);
796
+ /// Initialize as \f$b\cdot y\f$
797
+ ScaleView(int b, const IntView& y);
798
+ /// Initialize from specification
799
+ ScaleView(Space* home, const Reflection::VarMap& vars,
800
+ Reflection::Arg* arg);
801
+ /// Initialize as \f$b\cdot y\f$
802
+ void init(int b, const IntView& y);
803
+ /// Return scale factor of scale view
804
+ int scale(void) const;
805
+ //@}
806
+
807
+
808
+ /// \name Value access
809
+ //@{
810
+ /// Return minimum of domain
811
+ Val min(void) const;
812
+ /// Return maximum of domain
813
+ Val max(void) const;
814
+ /// Return median of domain
815
+ Val med(void) const;
816
+ /// Return assigned value (only if assigned)
817
+ Val val(void) const;
818
+
819
+ /// Return size (cardinality) of domain
820
+ UnsVal size(void) const;
821
+ /// Return width of domain (distance between maximum and minimum)
822
+ UnsVal width(void) const;
823
+ /// Return regret of domain minimum (distance to next larger value)
824
+ UnsVal regret_min(void) const;
825
+ /// Return regret of domain maximum (distance to next smaller value)
826
+ UnsVal regret_max(void) const;
827
+ //@}
828
+
829
+ /// \name Domain tests
830
+ //@{
831
+ /// Test whether domain is a range
832
+ bool range(void) const;
833
+ /// Test whether view is assigned
834
+ bool assigned(void) const;
835
+ /// Test whether \a n is contained in domain
836
+ bool in(Val n) const;
837
+ //@}
838
+
839
+ /// \name Domain update by value
840
+ //@{
841
+ /// Restrict domain values to be less or equal than \a n
842
+ ModEvent lq(Space* home, Val n);
843
+ /// Restrict domain values to be less than \a n
844
+ ModEvent le(Space* home, Val n);
845
+ /// Restrict domain values to be greater or equal than \a n
846
+ ModEvent gq(Space* home, Val n);
847
+ /// Restrict domain values to be greater than \a n
848
+ ModEvent gr(Space* home, Val n);
849
+ /// Restrict domain values to be different from \a n
850
+ ModEvent nq(Space* home, Val n);
851
+ /// Restrict domain values to be equal to \a n
852
+ ModEvent eq(Space* home, Val n);
853
+ //@}
854
+
855
+ /// \name View-dependent propagator support
856
+ //@{
857
+ /// Schedule propagator \a p with modification event \a me
858
+ static void schedule(Space* home, Propagator* p, ModEvent me);
859
+ /// Return modification event for view type in \a med
860
+ static ModEvent me(ModEventDelta med);
861
+ /// Translate modification event \a me to modification event delta for view
862
+ static ModEventDelta med(ModEvent me);
863
+ //@}
864
+
865
+ /// \name Dependencies
866
+ //@{
867
+ /**
868
+ * \brief Subscribe propagator \a p with propagation condition \a pc to view
869
+ *
870
+ * In case \a process is false, the propagator is just subscribed but
871
+ * not processed for execution (this must be used when creating
872
+ * subscriptions during propagation).
873
+ */
874
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
875
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
876
+ void cancel(Space* home, Propagator* p, PropCond pc);
877
+ /// Subscribe advisor \a a to view
878
+ void subscribe(Space* home, Advisor* a);
879
+ /// Cancel subscription of advisor \a a
880
+ void cancel(Space* home, Advisor* a);
881
+ //@}
882
+
883
+ /// \name Delta information for advisors
884
+ //@{
885
+ /// Return modification event
886
+ static ModEvent modevent(const Delta* d);
887
+ /// Return minimum value just pruned
888
+ Val min(const Delta* d) const;
889
+ /// Return maximum value just pruned
890
+ Val max(const Delta* d) const;
891
+ /// Test whether arbitrary values got pruned
892
+ bool any(const Delta* d) const;
893
+ //@}
894
+
895
+ /// \name Cloning
896
+ //@{
897
+ /// Update this view to be a clone of view \a x
898
+ void update(Space* home, bool share, ScaleView<Val,UnsVal>& x);
899
+ //@}
900
+
901
+ /// \name Reflection
902
+ //@{
903
+ /// Return specification for this view, using variable map \a m
904
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
905
+ static Support::Symbol type(void);
906
+ //@}
907
+ };
908
+
909
+ /**
910
+ * \brief Integer-precision integer scale view
911
+ * \ingroup TaskActorIntView
912
+ */
913
+ typedef ScaleView<int,unsigned int> IntScaleView;
914
+
915
+ /**
916
+ * \brief Double-precision integer scale view
917
+ * \ingroup TaskActorIntView
918
+ */
919
+ typedef ScaleView<double,double> DoubleScaleView;
920
+
921
+ }
922
+
923
+ /** \name View comparison
924
+ * \relates Gecode::Int::ScaleView
925
+ */
926
+ //@{
927
+ /// Test whether views \a x and \a y are the same
928
+ template <class Val, class UnsVal>
929
+ bool same(const Int::ScaleView<Val,UnsVal>& x,
930
+ const Int::ScaleView<Val,UnsVal>& y);
931
+ /// Test whether view \a x comes before \a y (arbitrary order)
932
+ template <class Val, class UnsVal>
933
+ bool before(const Int::ScaleView<Val,UnsVal>& x,
934
+ const Int::ScaleView<Val,UnsVal>& y);
935
+ //@}
936
+
937
+
938
+ /**
939
+ * \brief Traits class for views and variable implementations
940
+ *
941
+ * This class specializes the ViewVarImpTraits for ScaleView.
942
+ * \ingroup TaskActorIntView
943
+ */
944
+ template <class Val, class UnsVal>
945
+ class ViewVarImpTraits<Int::ScaleView<Val,UnsVal> > {
946
+ public:
947
+ /// The variable type of a ScaleView
948
+ typedef Int::IntVarImp VarImp;
949
+ };
950
+
951
+
952
+
953
+ namespace Int {
954
+
955
+ /**
956
+ * \brief Constant integer view
957
+ *
958
+ * A constant integer view \f$x\f$ for an integer \f$c\f$ provides
959
+ * operations such that \f$x\f$ behaves as a view assigned to \f$c\f$.
960
+ * \ingroup TaskActorIntView
961
+ */
962
+ class ConstIntView : public ConstViewBase {
963
+ protected:
964
+ int x;
965
+ public:
966
+ /// \name Constructors and initialization
967
+ //@{
968
+ /// Default constructor
969
+ ConstIntView(void);
970
+ /// Initialize with integer value \a n
971
+ ConstIntView(int n);
972
+ /// Initialize with integer value \a n
973
+ void init(int n);
974
+ /// Initialize from specification
975
+ ConstIntView(Space* home, const Reflection::VarMap& vars,
976
+ Reflection::Arg* arg);
977
+ //@}
978
+
979
+ /// \name Value access
980
+ //@{
981
+ /// Return minimum of domain
982
+ int min(void) const;
983
+ /// Return maximum of domain
984
+ int max(void) const;
985
+ /// Return median of domain
986
+ int med(void) const;
987
+ /// Return assigned value (only if assigned)
988
+ int val(void) const;
989
+
990
+ /// Return size (cardinality) of domain
991
+ unsigned int size(void) const;
992
+ /// Return width of domain (distance between maximum and minimum)
993
+ unsigned int width(void) const;
994
+ /// Return regret of domain minimum (distance to next larger value)
995
+ unsigned int regret_min(void) const;
996
+ /// Return regret of domain maximum (distance to next smaller value)
997
+ unsigned int regret_max(void) const;
998
+ //@}
999
+
1000
+ /// \name Domain tests
1001
+ //@{
1002
+ /// Test whether domain is a range
1003
+ bool range(void) const;
1004
+ /// Test whether view is assigned
1005
+ bool assigned(void) const;
1006
+
1007
+ /// Test whether \a n is contained in domain
1008
+ bool in(int n) const;
1009
+ /// Test whether \a n is contained in domain
1010
+ bool in(double n) const;
1011
+ //@}
1012
+
1013
+ /// \name Domain update by value
1014
+ //@{
1015
+ /// Restrict domain values to be less or equal than \a n
1016
+ ModEvent lq(Space* home, int n);
1017
+ /// Restrict domain values to be less or equal than \a n
1018
+ ModEvent lq(Space* home, double n);
1019
+ /// Restrict domain values to be less than \a n
1020
+ ModEvent le(Space* home, int n);
1021
+ /// Restrict domain values to be less than \a n
1022
+ ModEvent le(Space* home, double n);
1023
+ /// Restrict domain values to be greater or equal than \a n
1024
+ ModEvent gq(Space* home, int n);
1025
+ /// Restrict domain values to be greater or equal than \a n
1026
+ ModEvent gq(Space* home, double n);
1027
+ /// Restrict domain values to be greater than \a n
1028
+ ModEvent gr(Space* home, int n);
1029
+ /// Restrict domain values to be greater than \a n
1030
+ ModEvent gr(Space* home, double n);
1031
+ /// Restrict domain values to be different from \a n
1032
+ ModEvent nq(Space* home, int n);
1033
+ /// Restrict domain values to be different from \a n
1034
+ ModEvent nq(Space* home, double n);
1035
+ /// Restrict domain values to be equal to \a n
1036
+ ModEvent eq(Space* home, int n);
1037
+ /// Restrict domain values to be equal to \a n
1038
+ ModEvent eq(Space* home, double n);
1039
+ //@}
1040
+
1041
+ /**
1042
+ * \name Domain update by iterator
1043
+ *
1044
+ * Views can be both updated by range and value iterators.
1045
+ * Value iterators do not need to be strict in that the same value
1046
+ * is allowed to occur more than once in the iterated sequence.
1047
+ *
1048
+ * The argument \a depends must be true, if the iterator
1049
+ * passed as argument depends on the view on which the operation
1050
+ * is invoked. In this case, the view is only updated after the
1051
+ * iterator has been consumed. Otherwise, the domain might be updated
1052
+ * concurrently while following the iterator.
1053
+ *
1054
+ */
1055
+ //@{
1056
+ /// Replace domain by ranges described by \a i
1057
+ template <class I>
1058
+ ModEvent narrow_r(Space* home, I& i, bool depends=true);
1059
+ /// Intersect domain with ranges described by \a i
1060
+ template <class I>
1061
+ ModEvent inter_r(Space* home, I& i, bool depends=true);
1062
+ /// Remove from domain the ranges described by \a i
1063
+ template <class I>
1064
+ ModEvent minus_r(Space* home, I& i, bool depends=true);
1065
+ /// Replace domain by values described by \a i
1066
+ template <class I>
1067
+ ModEvent narrow_v(Space* home, I& i, bool depends=true);
1068
+ /// Intersect domain with values described by \a i
1069
+ template <class I>
1070
+ ModEvent inter_v(Space* home, I& i, bool depends=true);
1071
+ /// Remove from domain the values described by \a i
1072
+ template <class I>
1073
+ ModEvent minus_v(Space* home, I& i, bool depends=true);
1074
+ //@}
1075
+
1076
+ /// \name View-dependent propagator support
1077
+ //@{
1078
+ /// Schedule propagator \a p with modification event \a me
1079
+ static void schedule(Space* home, Propagator* p, ModEvent me);
1080
+ /// Return modification event for view type in \a med
1081
+ static ModEvent me(ModEventDelta med);
1082
+ /// Translate modification event \a me to modification event delta for view
1083
+ static ModEventDelta med(ModEvent me);
1084
+ //@}
1085
+
1086
+ /// \name Dependencies
1087
+ //@{
1088
+ /**
1089
+ * \brief Subscribe propagator \a p with propagation condition \a pc to view
1090
+ *
1091
+ * In case \a process is false, the propagator is just subscribed but
1092
+ * not processed for execution (this must be used when creating
1093
+ * subscriptions during propagation).
1094
+ */
1095
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
1096
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
1097
+ void cancel(Space* home, Propagator* p, PropCond pc);
1098
+ /// Subscribe advisor \a a to view
1099
+ void subscribe(Space* home, Advisor* a);
1100
+ /// Cancel subscription of advisor \a a
1101
+ void cancel(Space* home, Advisor* a);
1102
+ //@}
1103
+
1104
+ /// \name Delta information for advisors
1105
+ //@{
1106
+ /// Return modification event
1107
+ static ModEvent modevent(const Delta* d);
1108
+ /// Return minimum value just pruned
1109
+ int min(const Delta* d) const;
1110
+ /// Return maximum value just pruned
1111
+ int max(const Delta* d) const;
1112
+ /// Test whether arbitrary values got pruned
1113
+ bool any(const Delta* d) const;
1114
+ //@}
1115
+
1116
+ /// \name Cloning
1117
+ //@{
1118
+ /// Update this view to be a clone of view \a x
1119
+ void update(Space* home, bool share, ConstIntView& x);
1120
+ //@}
1121
+
1122
+ /// \name Reflection
1123
+ //@{
1124
+ /// Return specification for this view, using variable map \a m
1125
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
1126
+ static Support::Symbol type(void);
1127
+ //@}
1128
+ };
1129
+
1130
+ }
1131
+
1132
+ /**
1133
+ * \name View comparison
1134
+ * \relates Gecode::Int::ConstIntView
1135
+ */
1136
+ //@{
1137
+ /// Test whether views \a x and \a y are the same
1138
+ bool same(const Int::ConstIntView& x, const Int::ConstIntView& y);
1139
+ /// Test whether view \a x is before \a y (arbitrary order)
1140
+ bool before(const Int::ConstIntView& x, const Int::ConstIntView& y);
1141
+ //@}
1142
+
1143
+ /**
1144
+ * \brief Traits class for views and variable implementations
1145
+ *
1146
+ * This class specializes the ViewVarImpTraits for ConstIntView.
1147
+ * \ingroup TaskActorIntView
1148
+ */
1149
+ template<>
1150
+ class ViewVarImpTraits<Int::ConstIntView> {
1151
+ public:
1152
+ /// The variable type of a ConstIntView
1153
+ typedef VarImpBase VarImp;
1154
+ };
1155
+
1156
+ namespace Int {
1157
+
1158
+ /**
1159
+ * \brief Zero integer view
1160
+ *
1161
+ * A zero integer view \f$x\f$ for provides
1162
+ * operations such that \f$x\f$ behaves as a view assigned to \f$0\f$.
1163
+ * \ingroup TaskActorIntView
1164
+ */
1165
+ class ZeroIntView : public ConstViewBase {
1166
+ public:
1167
+ /// \name Constructors and initialization
1168
+ //@{
1169
+ /// Default constructor
1170
+ ZeroIntView(void);
1171
+ /// Initialize
1172
+ void init(void);
1173
+ /// Initialize from specification
1174
+ ZeroIntView(Space* home, const Reflection::VarMap& vars,
1175
+ Reflection::Arg* arg);
1176
+ //@}
1177
+
1178
+ /// \name Value access
1179
+ //@{
1180
+ /// Return minimum of domain
1181
+ int min(void) const;
1182
+ /// Return maximum of domain
1183
+ int max(void) const;
1184
+ /// Return median of domain
1185
+ int med(void) const;
1186
+ /// Return assigned value (only if assigned)
1187
+ int val(void) const;
1188
+
1189
+ /// Return size (cardinality) of domain
1190
+ unsigned int size(void) const;
1191
+ /// Return width of domain (distance between maximum and minimum)
1192
+ unsigned int width(void) const;
1193
+ /// Return regret of domain minimum (distance to next larger value)
1194
+ unsigned int regret_min(void) const;
1195
+ /// Return regret of domain maximum (distance to next smaller value)
1196
+ unsigned int regret_max(void) const;
1197
+ //@}
1198
+
1199
+ /// \name Domain tests
1200
+ //@{
1201
+ /// Test whether domain is a range
1202
+ bool range(void) const;
1203
+ /// Test whether view is assigned
1204
+ bool assigned(void) const;
1205
+
1206
+ /// Test whether \a n is contained in domain
1207
+ bool in(int n) const;
1208
+ /// Test whether \a n is contained in domain
1209
+ bool in(double n) const;
1210
+ //@}
1211
+
1212
+ /// \name Domain update by value
1213
+ //@{
1214
+ /// Restrict domain values to be less or equal than \a n
1215
+ ModEvent lq(Space* home, int n);
1216
+ /// Restrict domain values to be less or equal than \a n
1217
+ ModEvent lq(Space* home, double n);
1218
+ /// Restrict domain values to be less than \a n
1219
+ ModEvent le(Space* home, int n);
1220
+ /// Restrict domain values to be less than \a n
1221
+ ModEvent le(Space* home, double n);
1222
+ /// Restrict domain values to be greater or equal than \a n
1223
+ ModEvent gq(Space* home, int n);
1224
+ /// Restrict domain values to be greater or equal than \a n
1225
+ ModEvent gq(Space* home, double n);
1226
+ /// Restrict domain values to be greater than \a n
1227
+ ModEvent gr(Space* home, int n);
1228
+ /// Restrict domain values to be greater than \a n
1229
+ ModEvent gr(Space* home, double n);
1230
+ /// Restrict domain values to be different from \a n
1231
+ ModEvent nq(Space* home, int n);
1232
+ /// Restrict domain values to be different from \a n
1233
+ ModEvent nq(Space* home, double n);
1234
+ /// Restrict domain values to be equal to \a n
1235
+ ModEvent eq(Space* home, int n);
1236
+ /// Restrict domain values to be equal to \a n
1237
+ ModEvent eq(Space* home, double n);
1238
+ //@}
1239
+
1240
+ /**
1241
+ * \name Domain update by iterator
1242
+ *
1243
+ * Views can be both updated by range and value iterators.
1244
+ * Value iterators do not need to be strict in that the same value
1245
+ * is allowed to occur more than once in the iterated sequence.
1246
+ *
1247
+ * The argument \a depends must be true, if the iterator
1248
+ * passed as argument depends on the view on which the operation
1249
+ * is invoked. In this case, the view is only updated after the
1250
+ * iterator has been consumed. Otherwise, the domain might be updated
1251
+ * concurrently while following the iterator.
1252
+ *
1253
+ */
1254
+ //@{
1255
+ /// Replace domain by ranges described by \a i
1256
+ template <class I>
1257
+ ModEvent narrow_r(Space* home, I& i, bool depends=true);
1258
+ /// Intersect domain with ranges described by \a i
1259
+ template <class I>
1260
+ ModEvent inter_r(Space* home, I& i, bool depends=true);
1261
+ /// Remove from domain the ranges described by \a i
1262
+ template <class I>
1263
+ ModEvent minus_r(Space* home, I& i, bool depends=true);
1264
+ /// Replace domain by values described by \a i
1265
+ template <class I>
1266
+ ModEvent narrow_v(Space* home, I& i, bool depends=true);
1267
+ /// Intersect domain with values described by \a i
1268
+ template <class I>
1269
+ ModEvent inter_v(Space* home, I& i, bool depends=true);
1270
+ /// Remove from domain the values described by \a i
1271
+ template <class I>
1272
+ ModEvent minus_v(Space* home, I& i, bool depends=true);
1273
+ //@}
1274
+
1275
+ /// \name View-dependent propagator support
1276
+ //@{
1277
+ /// Schedule propagator \a p with modification event \a me
1278
+ static void schedule(Space* home, Propagator* p, ModEvent me);
1279
+ /// Return modification event for view type in \a med
1280
+ static ModEvent me(ModEventDelta med);
1281
+ /// Translate modification event \a me to modification event delta for view
1282
+ static ModEventDelta med(ModEvent me);
1283
+ //@}
1284
+
1285
+ /// \name Dependencies
1286
+ //@{
1287
+ /**
1288
+ * \brief Subscribe propagator \a p with propagation condition \a pc to view
1289
+ *
1290
+ * In case \a process is false, the propagator is just subscribed but
1291
+ * not processed for execution (this must be used when creating
1292
+ * subscriptions during propagation).
1293
+ */
1294
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
1295
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
1296
+ void cancel(Space* home, Propagator* p, PropCond pc);
1297
+ /// Subscribe advisor \a a to view
1298
+ void subscribe(Space* home, Advisor* a);
1299
+ /// Cancel subscription of advisor \a a
1300
+ void cancel(Space* home, Advisor* a);
1301
+ //@}
1302
+
1303
+ /// \name Delta information for advisors
1304
+ //@{
1305
+ /// Return modification event
1306
+ static ModEvent modevent(const Delta* d);
1307
+ /// Return minimum value just pruned
1308
+ int min(const Delta* d) const;
1309
+ /// Return maximum value just pruned
1310
+ int max(const Delta* d) const;
1311
+ /// Test whether arbitrary values got pruned
1312
+ bool any(const Delta* d) const;
1313
+ //@}
1314
+
1315
+ /// \name Cloning
1316
+ //@{
1317
+ /// Update this view to be a clone of view \a x
1318
+ void update(Space* home, bool share, ZeroIntView& x);
1319
+ //@}
1320
+
1321
+ /// \name Reflection
1322
+ //@{
1323
+ /// Return specification for this view, using variable map \a m
1324
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
1325
+ static Support::Symbol type(void);
1326
+ //@}
1327
+ };
1328
+
1329
+ }
1330
+
1331
+ /**
1332
+ * \name View comparison
1333
+ * \relates Gecode::Int::ZeroIntView
1334
+ */
1335
+ //@{
1336
+ /// Test whether views \a x and \a y are the same
1337
+ bool same(const Int::ZeroIntView& x, const Int::ZeroIntView& y);
1338
+ /// Test whether view \a x is before \a y (arbitrary order)
1339
+ bool before(const Int::ZeroIntView& x, const Int::ZeroIntView& y);
1340
+ //@}
1341
+
1342
+ /**
1343
+ * \brief Traits class for views and variable implementations
1344
+ *
1345
+ * This class specializes the ViewVarImpTraits for ZeroIntView.
1346
+ * \ingroup TaskActorIntView
1347
+ */
1348
+ template<>
1349
+ class ViewVarImpTraits<Int::ZeroIntView> {
1350
+ public:
1351
+ /// The variable type of a ZeroIntView
1352
+ typedef VarImpBase VarImp;
1353
+ };
1354
+
1355
+ namespace Int {
1356
+
1357
+ /**
1358
+ * \brief Boolean view for Boolean variables
1359
+ *
1360
+ * Provides convenient and efficient operations for Boolean views.
1361
+ * \ingroup TaskActorIntView
1362
+ */
1363
+ class BoolView : public VarViewBase<BoolVarImp> {
1364
+ protected:
1365
+ using VarViewBase<BoolVarImp>::varimp;
1366
+ public:
1367
+ /// \name Constructors and initialization
1368
+ //@{
1369
+ /// Default constructor
1370
+ BoolView(void);
1371
+ /// Initialize from Boolean variable \a x
1372
+ BoolView(const BoolVar& x);
1373
+ /// Initialize from Boolean variable \a x
1374
+ BoolView(BoolVarImp* x);
1375
+ /// Initialize from specification
1376
+ BoolView(Space* home, const Reflection::VarMap& vars,
1377
+ Reflection::Arg* arg);
1378
+ //@}
1379
+
1380
+ /// \name Domain status access
1381
+ //@{
1382
+ /// How many bits does the status have
1383
+ static const int BITS = BoolVarImp::BITS;
1384
+ /// Status of domain assigned to zero
1385
+ static const BoolStatus ZERO = BoolVarImp::ZERO;
1386
+ /// Status of domain assigned to one
1387
+ static const BoolStatus ONE = BoolVarImp::ONE;
1388
+ /// Status of domain not yet assigned
1389
+ static const BoolStatus NONE = BoolVarImp::NONE;
1390
+ /// Return current domain status
1391
+ BoolStatus status(void) const;
1392
+ //@}
1393
+
1394
+ /// \name Value access
1395
+ //@{
1396
+ /// Return minimum of domain
1397
+ int min(void) const;
1398
+ /// Return maximum of domain
1399
+ int max(void) const;
1400
+ /// Return median of domain
1401
+ int med(void) const;
1402
+ /// Return assigned value (only if assigned)
1403
+ int val(void) const;
1404
+
1405
+ /// Return size (cardinality) of domain
1406
+ unsigned int size(void) const;
1407
+ /// Return width of domain (distance between maximum and minimum)
1408
+ unsigned int width(void) const;
1409
+ /// Return regret of domain minimum (distance to next larger value)
1410
+ unsigned int regret_min(void) const;
1411
+ /// Return regret of domain maximum (distance to next smaller value)
1412
+ unsigned int regret_max(void) const;
1413
+ //@}
1414
+
1415
+ /// \name Domain tests
1416
+ //@{
1417
+ /// Test whether domain is a range
1418
+ bool range(void) const;
1419
+ /// Test whether view is assigned
1420
+ bool assigned(void) const;
1421
+
1422
+ /// Test whether \a n is contained in domain
1423
+ bool in(int n) const;
1424
+ /// Test whether \a n is contained in domain
1425
+ bool in(double n) const;
1426
+ //@}
1427
+
1428
+ /// \name Boolean domain tests
1429
+ //@{
1430
+ /// Test whether view is assigned to be zero
1431
+ bool zero(void) const;
1432
+ /// Test whether view is assigned to be one
1433
+ bool one(void) const;
1434
+ /// Test whether view is not yet assigned
1435
+ bool none(void) const;
1436
+ //@}
1437
+
1438
+ /// \name Boolean assignment operations
1439
+ //@{
1440
+ /// Try to assign view to one
1441
+ ModEvent one(Space* home);
1442
+ /// Try to assign view to zero
1443
+ ModEvent zero(Space* home);
1444
+ /// Assign not yet assigned view to one
1445
+ ModEvent one_none(Space* home);
1446
+ /// Assign not yet assigned view to zero
1447
+ ModEvent zero_none(Space* home);
1448
+ //@}
1449
+
1450
+ /// \name Domain update by value
1451
+ //@{
1452
+ /// Restrict domain values to be less or equal than \a n
1453
+ ModEvent lq(Space* home, int n);
1454
+ /// Restrict domain values to be less or equal than \a n
1455
+ ModEvent lq(Space* home, double n);
1456
+
1457
+ /// Restrict domain values to be less than \a n
1458
+ ModEvent le(Space* home, int n);
1459
+ /// Restrict domain values to be less than \a n
1460
+ ModEvent le(Space* home, double n);
1461
+
1462
+ /// Restrict domain values to be greater or equal than \a n
1463
+ ModEvent gq(Space* home, int n);
1464
+ /// Restrict domain values to be greater or equal than \a n
1465
+ ModEvent gq(Space* home, double n);
1466
+
1467
+ /// Restrict domain values to be greater than \a n
1468
+ ModEvent gr(Space* home, int n);
1469
+ /// Restrict domain values to be greater than \a n
1470
+ ModEvent gr(Space* home, double n);
1471
+
1472
+ /// Restrict domain values to be different from \a n
1473
+ ModEvent nq(Space* home, int n);
1474
+ /// Restrict domain values to be different from \a n
1475
+ ModEvent nq(Space* home, double n);
1476
+
1477
+ /// Restrict domain values to be equal to \a n
1478
+ ModEvent eq(Space* home, int n);
1479
+ /// Restrict domain values to be equal to \a n
1480
+ ModEvent eq(Space* home, double n);
1481
+ //@}
1482
+
1483
+ /**
1484
+ * \name Domain update by iterator
1485
+ *
1486
+ * Views can be both updated by range and value iterators.
1487
+ * Value iterators do not need to be strict in that the same value
1488
+ * is allowed to occur more than once in the iterated sequence.
1489
+ *
1490
+ * The argument \a depends must be true, if the iterator
1491
+ * passed as argument depends on the view on which the operation
1492
+ * is invoked. In this case, the view is only updated after the
1493
+ * iterator has been consumed. Otherwise, the domain might be updated
1494
+ * concurrently while following the iterator.
1495
+ *
1496
+ */
1497
+ //@{
1498
+ /// Replace domain by ranges described by \a i
1499
+ template <class I>
1500
+ ModEvent narrow_r(Space* home, I& i, bool depends=true);
1501
+ /// Intersect domain with ranges described by \a i
1502
+ template <class I>
1503
+ ModEvent inter_r(Space* home, I& i, bool depends=true);
1504
+ /// Remove from domain the ranges described by \a i
1505
+ template <class I>
1506
+ ModEvent minus_r(Space* home, I& i, bool depends=true);
1507
+ /// Replace domain by values described by \a i
1508
+ template <class I>
1509
+ ModEvent narrow_v(Space* home, I& i, bool depends=true);
1510
+ /// Intersect domain with values described by \a i
1511
+ template <class I>
1512
+ ModEvent inter_v(Space* home, I& i, bool depends=true);
1513
+ /// Remove from domain the values described by \a i
1514
+ template <class I>
1515
+ ModEvent minus_v(Space* home, I& i, bool depends=true);
1516
+ //@}
1517
+
1518
+ /// \name Delta information for advisors
1519
+ //@{
1520
+ /// Return modification event
1521
+ static ModEvent modevent(const Delta* d);
1522
+ /// Return minimum value just pruned
1523
+ int min(const Delta* d) const;
1524
+ /// Return maximum value just pruned
1525
+ int max(const Delta* d) const;
1526
+ /// Test whether arbitrary values got pruned
1527
+ bool any(const Delta* d) const;
1528
+ //@}
1529
+
1530
+ /// \name View-dependent propagator support
1531
+ //@{
1532
+ /// Translate modification event \a me to modification event delta for view
1533
+ static ModEventDelta med(ModEvent me);
1534
+ //@}
1535
+
1536
+ /// \name Cloning
1537
+ //@{
1538
+ /// Update this view to be a clone of view \a x
1539
+ void update(Space* home, bool share, BoolView& x);
1540
+ //@}
1541
+
1542
+ /// \name Reflection
1543
+ //@{
1544
+ /// Return specification for this view, using variable map \a m
1545
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
1546
+ static Support::Symbol type(void);
1547
+ //@}
1548
+ };
1549
+
1550
+ }
1551
+
1552
+ /**
1553
+ * \brief Traits class for views and variable implementations
1554
+ *
1555
+ * This class specializes the ViewVarImpTraits for BoolView
1556
+ * \ingroup TaskActorIntView
1557
+ */
1558
+ template<>
1559
+ class ViewVarImpTraits<Int::BoolView> {
1560
+ public:
1561
+ /// The variable type of a BoolView
1562
+ typedef Int::BoolVarImp VarImp;
1563
+ };
1564
+
1565
+ /**
1566
+ * \brief Traits class mapping variables to views
1567
+ *
1568
+ * This class specializes the VarViewTraits for Boolean variables.
1569
+ */
1570
+ template<>
1571
+ class VarViewTraits<BoolVar> {
1572
+ public:
1573
+ /// The variable type of an IntView
1574
+ typedef Int::BoolView View;
1575
+ };
1576
+
1577
+ /**
1578
+ * \brief Class providing domain size info
1579
+ *
1580
+ * This class specializes the DomainSize class for Boolean views.
1581
+ */
1582
+ template<>
1583
+ class DomainSize<Int::BoolView> {
1584
+ public:
1585
+ /// The size of an integer domain
1586
+ static int size(const Int::BoolView& iv) { return iv.size(); }
1587
+ };
1588
+
1589
+ namespace Int {
1590
+
1591
+ /**
1592
+ * \brief Negated Boolean view
1593
+ *
1594
+ * A negated Boolean view \f$n\f$ for a Boolean view \f$b\f$
1595
+ * provides operations such that \f$n\f$
1596
+ * behaves as \f$\neg b\f$.
1597
+ * \ingroup TaskActorIntView
1598
+ */
1599
+ class NegBoolView : public DerivedViewBase<BoolView> {
1600
+ protected:
1601
+ using DerivedViewBase<BoolView>::view;
1602
+ public:
1603
+ /// \name Constructors and initialization
1604
+ //@{
1605
+ /// Default constructor
1606
+ NegBoolView(void);
1607
+ /// Initialize with Boolean view \a b
1608
+ NegBoolView(const BoolView& b);
1609
+ /// Initialize with Boolean view \a b
1610
+ void init(const BoolView& b);
1611
+ /// Initialize from specification
1612
+ NegBoolView(Space* home, const Reflection::VarMap& vars,
1613
+ Reflection::Arg* arg);
1614
+ //@}
1615
+
1616
+ /// \name Domain status access
1617
+ //@{
1618
+ /// How many bits does the status have
1619
+ static const int BITS = BoolView::BITS;
1620
+ /// Status of domain assigned to zero
1621
+ static const BoolStatus ZERO = BoolView::ONE;
1622
+ /// Status of domain assigned to one
1623
+ static const BoolStatus ONE = BoolView::ZERO;
1624
+ /// Status of domain not yet assigned
1625
+ static const BoolStatus NONE = BoolView::NONE;
1626
+ /// Return current domain status
1627
+ BoolStatus status(void) const;
1628
+ //@}
1629
+
1630
+ /// \name Boolean domain tests
1631
+ //@{
1632
+ /// Test whether view is assigned to be zero
1633
+ bool zero(void) const;
1634
+ /// Test whether view is assigned to be one
1635
+ bool one(void) const;
1636
+ /// Test whether view is not yet assigned
1637
+ bool none(void) const;
1638
+ //@}
1639
+
1640
+ /// \name Boolean assignment operations
1641
+ //@{
1642
+ /// Try to assign view to one
1643
+ ModEvent one(Space* home);
1644
+ /// Try to assign view to zero
1645
+ ModEvent zero(Space* home);
1646
+ /// Assign not yet assigned view to one
1647
+ ModEvent one_none(Space* home);
1648
+ /// Assign not yet assigned view to zero
1649
+ ModEvent zero_none(Space* home);
1650
+ //@}
1651
+
1652
+ /// \name Value access
1653
+ //@{
1654
+ /// Return minimum of domain
1655
+ int min(void) const;
1656
+ /// Return maximum of domain
1657
+ int max(void) const;
1658
+ /// Return assigned value (only if assigned)
1659
+ int val(void) const;
1660
+ //@}
1661
+
1662
+ /// \name Domain tests
1663
+ //@{
1664
+ /// Test whether view is assigned
1665
+ bool assigned(void) const;
1666
+ //@}
1667
+
1668
+ /// \name View-dependent propagator support
1669
+ //@{
1670
+ /// Schedule propagator \a p with modification event \a me
1671
+ static void schedule(Space* home, Propagator* p, ModEvent me);
1672
+ /// Return modification event for view type in \a med
1673
+ static ModEvent me(ModEventDelta med);
1674
+ /// Translate modification event \a me to modification event delta for view
1675
+ static ModEventDelta med(ModEvent me);
1676
+ //@}
1677
+
1678
+ /// \name Dependencies
1679
+ //@{
1680
+ /**
1681
+ * \brief Subscribe propagator \a p with propagation condition \a pc to view
1682
+ *
1683
+ * In case \a process is false, the propagator is just subscribed but
1684
+ * not processed for execution (this must be used when creating
1685
+ * subscriptions during propagation).
1686
+ */
1687
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
1688
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
1689
+ void cancel(Space* home, Propagator* p, PropCond pc);
1690
+ /// Subscribe advisor \a a to view
1691
+ void subscribe(Space* home, Advisor* a);
1692
+ /// Cancel subscription of advisor \a a
1693
+ void cancel(Space* home, Advisor* a);
1694
+ //@}
1695
+
1696
+ /// \name Delta information for advisors
1697
+ //@{
1698
+ /// Return modification event
1699
+ static ModEvent modevent(const Delta* d);
1700
+ /// Return minimum value just pruned
1701
+ int min(const Delta* d) const;
1702
+ /// Return maximum value just pruned
1703
+ int max(const Delta* d) const;
1704
+ /// Test whether arbitrary values got pruned
1705
+ bool any(const Delta* d) const;
1706
+ //@}
1707
+
1708
+ /// \name Cloning
1709
+ //@{
1710
+ /// Update this view to be a clone of view \a x
1711
+ void update(Space* home, bool share, NegBoolView& x);
1712
+ //@}
1713
+
1714
+ /// \name Reflection
1715
+ //@{
1716
+ /// Return specification for this view, using variable map \a m
1717
+ Reflection::Arg* spec(const Space* home, Reflection::VarMap& m) const;
1718
+ static Support::Symbol type(void);
1719
+ //@}
1720
+ };
1721
+
1722
+ /**
1723
+ * \brief Boolean tests
1724
+ *
1725
+ */
1726
+ enum BoolTest {
1727
+ BT_NONE, ///< No sharing
1728
+ BT_SAME, ///< Same variable
1729
+ BT_COMP ///< Same variable but complement
1730
+ };
1731
+
1732
+ /**
1733
+ * \name Test sharing between Boolean and negated Boolean views
1734
+ * \relates BoolView NegBoolView
1735
+ */
1736
+ //@{
1737
+ /// Test whether views \a b0 and \a b1 are the same
1738
+ BoolTest bool_test(const BoolView& b0, const BoolView& b1);
1739
+ /// Test whether views \a b0 and \a b1 are complementary
1740
+ BoolTest bool_test(const BoolView& b0, const NegBoolView& b1);
1741
+ /// Test whether views \a b0 and \a b1 are complementary
1742
+ BoolTest bool_test(const NegBoolView& b0, const BoolView& b1);
1743
+ /// Test whether views \a b0 and \a b1 are the same
1744
+ BoolTest bool_test(const NegBoolView& b0, const NegBoolView& b1);
1745
+ //@}
1746
+
1747
+ }
1748
+
1749
+ /** \name View comparison
1750
+ * \relates Gecode::Int::NegBoolView
1751
+ */
1752
+ //@{
1753
+ /// Test whether views \a x and \a y are the same
1754
+ bool same(const Int::NegBoolView& x, const Int::NegBoolView& y);
1755
+ /// Test whether view \a x comes before \a y (arbitrary order)
1756
+ bool before(const Int::NegBoolView& x, const Int::NegBoolView& y);
1757
+ //@}
1758
+
1759
+ /**
1760
+ * \brief Traits class for views and variable implementations
1761
+ *
1762
+ * This class specializes the ViewVarImpTraits for NegBoolView.
1763
+ * \ingroup TaskActorIntView
1764
+ */
1765
+ template<>
1766
+ class ViewVarImpTraits<Int::NegBoolView> {
1767
+ public:
1768
+ /// The variable type of a NegBoolView
1769
+ typedef Int::BoolVarImp VarImp;
1770
+ };
1771
+
1772
+ }
1773
+
1774
+ #include "gecode/int/var/int.icc"
1775
+ #include "gecode/int/var/bool.icc"
1776
+
1777
+ #include "gecode/int/view/int.icc"
1778
+ #include "gecode/int/view/bool.icc"
1779
+
1780
+ #include "gecode/int/view/constint.icc"
1781
+ #include "gecode/int/view/zero.icc"
1782
+
1783
+ #include "gecode/int/view/minus.icc"
1784
+ #include "gecode/int/view/offset.icc"
1785
+ #include "gecode/int/view/scale.icc"
1786
+
1787
+ /**
1788
+ * \brief Print integer variable view
1789
+ * \relates Gecode::Int::IntView
1790
+ */
1791
+ GECODE_INT_EXPORT std::ostream&
1792
+ operator<<(std::ostream&, const Gecode::Int::IntView&);
1793
+ /**
1794
+ * \brief Print minus integer view
1795
+ * \relates Gecode::Int::MinusView
1796
+ */
1797
+ GECODE_INT_EXPORT std::ostream&
1798
+ operator<<(std::ostream&, const Gecode::Int::MinusView&);
1799
+ /**
1800
+ * \brief Print offset integer view
1801
+ * \relates Gecode::Int::OffsetView
1802
+ */
1803
+ GECODE_INT_EXPORT std::ostream&
1804
+ operator<<(std::ostream&, const Gecode::Int::OffsetView&);
1805
+ /**
1806
+ * \brief Print constant integer view
1807
+ * \relates Gecode::Int::ConstIntView
1808
+ */
1809
+ GECODE_INT_EXPORT std::ostream&
1810
+ operator<<(std::ostream&, const Gecode::Int::ConstIntView&);
1811
+ /**
1812
+ * \brief Print zero integer view
1813
+ * \relates Gecode::Int::ZeroIntView
1814
+ */
1815
+ GECODE_INT_EXPORT std::ostream&
1816
+ operator<<(std::ostream&, const Gecode::Int::ZeroIntView&);
1817
+ /**
1818
+ * \brief Print integer-precision scale integer view
1819
+ * \relates Gecode::Int::ScaleView
1820
+ */
1821
+ GECODE_INT_EXPORT std::ostream&
1822
+ operator<<(std::ostream&, const Gecode::Int::IntScaleView&);
1823
+ /**
1824
+ * \brief Print double-precision scale integer view
1825
+ * \relates Gecode::Int::ScaleView
1826
+ */
1827
+ GECODE_INT_EXPORT std::ostream&
1828
+ operator<<(std::ostream&, const Gecode::Int::DoubleScaleView&);
1829
+
1830
+ /**
1831
+ * \brief Print Boolean variable view
1832
+ * \relates Gecode::Int::BoolView
1833
+ */
1834
+ GECODE_INT_EXPORT std::ostream&
1835
+ operator<<(std::ostream&, const Gecode::Int::BoolView&);
1836
+ /**
1837
+ * \brief Print negated Boolean view
1838
+ * \relates Gecode::Int::NegBoolView
1839
+ */
1840
+ GECODE_INT_EXPORT std::ostream&
1841
+ operator<<(std::ostream&, const Gecode::Int::NegBoolView&);
1842
+
1843
+
1844
+ inline std::ostream&
1845
+ operator<<(std::ostream& os, const Gecode::IntVar& x) {
1846
+ Gecode::Int::IntView vx(x);
1847
+ return os << vx;
1848
+ }
1849
+
1850
+ inline std::ostream&
1851
+ operator<<(std::ostream& os, const Gecode::BoolVar& x) {
1852
+ Gecode::Int::BoolView vx(x);
1853
+ return os << vx;
1854
+ }
1855
+
1856
+ namespace Gecode {
1857
+
1858
+ namespace Int {
1859
+
1860
+ /**
1861
+ * \defgroup TaskActorIntTest Testing relations between integer views
1862
+ * \ingroup TaskActorInt
1863
+ */
1864
+
1865
+ //@{
1866
+ /// Result of testing relation
1867
+ enum RelTest {
1868
+ RT_FALSE = 0, ///< Relation does not hold
1869
+ RT_MAYBE = 1, ///< Relation may hold or not
1870
+ RT_TRUE = 2 ///< Relation does hold
1871
+ };
1872
+
1873
+ /// Test whether views \a x and \a y are equal (use bounds information)
1874
+ template <class View> RelTest rtest_eq_bnd(View x, View y);
1875
+ /// Test whether views \a x and \a y are equal (use full domain information)
1876
+ template <class View> RelTest rtest_eq_dom(View x, View y);
1877
+ /// Test whether view \a x and integer \a n are equal (use bounds information)
1878
+ template <class View> RelTest rtest_eq_bnd(View x, int n);
1879
+ /// Test whether view \a x and integer \a n are equal (use full domain information)
1880
+ template <class View> RelTest rtest_eq_dom(View x, int n);
1881
+
1882
+ /// Test whether views \a x and \a y are different (use bounds information)
1883
+ template <class View> RelTest rtest_nq_bnd(View x, View y);
1884
+ /// Test whether views \a x and \a y are different (use full domain information)
1885
+ template <class View> RelTest rtest_nq_dom(View x, View y);
1886
+ /// Test whether view \a x and integer \a n are different (use bounds information)
1887
+ template <class View> RelTest rtest_nq_bnd(View x, int n);
1888
+ /// Test whether view \a x and integer \a n are different (use full domain information)
1889
+ template <class View> RelTest rtest_nq_dom(View x, int n);
1890
+
1891
+ /// Test whether view \a x is less or equal than view \a y
1892
+ template <class View> RelTest rtest_lq(View x, View y);
1893
+ /// Test whether view \a x is less or equal than integer \a n
1894
+ template <class View> RelTest rtest_lq(View x, int n);
1895
+
1896
+ /// Test whether view \a x is less than view \a y
1897
+ template <class View> RelTest rtest_le(View x, View y);
1898
+ /// Test whether view \a x is less than integer \a n
1899
+ template <class View> RelTest rtest_le(View x, int n);
1900
+
1901
+ /// Test whether view \a x is greater or equal than view \a y
1902
+ template <class View> RelTest rtest_gq(View x, View y);
1903
+ /// Test whether view \a x is greater or equal than integer \a n
1904
+ template <class View> RelTest rtest_gq(View x, int n);
1905
+
1906
+ /// Test whether view \a x is greater than view \a y
1907
+ template <class View> RelTest rtest_gr(View x, View y);
1908
+ /// Test whether view \a x is greater than integer \a n
1909
+ template <class View> RelTest rtest_gr(View x, int n);
1910
+ //@}
1911
+
1912
+ }
1913
+
1914
+ }
1915
+
1916
+ #include "gecode/int/view/rtest.icc"
1917
+
1918
+ // STATISTICS: int-var