gecoder-with-gecode 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (919) hide show
  1. data/CHANGES +6 -0
  2. data/README +1 -1
  3. data/THANKS +18 -0
  4. data/example/equation_system.rb +3 -1
  5. data/example/magic_sequence.rb +3 -1
  6. data/example/queens.rb +3 -1
  7. data/example/send_more_money.rb +24 -30
  8. data/example/send_most_money.rb +15 -26
  9. data/example/square_tiling.rb +3 -1
  10. data/example/sudoku-set.rb +3 -1
  11. data/ext/{gecode-2.1.1 → gecode-2.2.0}/LICENSE +0 -0
  12. data/ext/{gecode-2.1.1 → gecode-2.2.0}/Makefile.contribs +0 -0
  13. data/ext/gecode-2.2.0/Makefile.dep +8056 -0
  14. data/ext/gecode-2.2.0/Makefile.in +1590 -0
  15. data/ext/gecode-2.2.0/changelog.in +2698 -0
  16. data/ext/gecode-2.2.0/configure +13112 -0
  17. data/ext/gecode-2.2.0/configure.ac +273 -0
  18. data/ext/gecode-2.2.0/configure.ac.in +269 -0
  19. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/README +0 -0
  20. data/ext/gecode-2.2.0/contribs/qecode/Doxyfile +263 -0
  21. data/ext/gecode-2.2.0/contribs/qecode/Implicative.cc +267 -0
  22. data/ext/gecode-2.2.0/contribs/qecode/Implicative.hh +164 -0
  23. data/ext/gecode-2.2.0/contribs/qecode/Makefile.in.in +163 -0
  24. data/ext/gecode-2.2.0/contribs/qecode/OptVar.cc +82 -0
  25. data/ext/gecode-2.2.0/contribs/qecode/OptVar.hh +123 -0
  26. data/ext/gecode-2.2.0/contribs/qecode/Strategy.cc +131 -0
  27. data/ext/gecode-2.2.0/contribs/qecode/Strategy.hh +91 -0
  28. data/ext/gecode-2.2.0/contribs/qecode/StrategyNode.cc +62 -0
  29. data/ext/gecode-2.2.0/contribs/qecode/StrategyNode.hh +47 -0
  30. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/output.0 +2264 -0
  31. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/requests +115 -0
  32. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/traces.0 +57 -0
  33. data/ext/gecode-2.2.0/contribs/qecode/config.log +147 -0
  34. data/ext/gecode-2.2.0/contribs/qecode/config.status +817 -0
  35. data/ext/gecode-2.2.0/contribs/qecode/configure +2264 -0
  36. data/ext/gecode-2.2.0/contribs/qecode/configure.ac +23 -0
  37. data/ext/gecode-2.2.0/contribs/qecode/examples/COMPILING +13 -0
  38. data/ext/gecode-2.2.0/contribs/qecode/examples/MatrixGame.cpp +140 -0
  39. data/ext/gecode-2.2.0/contribs/qecode/examples/NimFibo.cpp +73 -0
  40. data/ext/gecode-2.2.0/contribs/qecode/examples/connect-5-3-3-3.cpp +842 -0
  41. data/ext/gecode-2.2.0/contribs/qecode/examples/network-pricing.cc +146 -0
  42. data/ext/gecode-2.2.0/contribs/qecode/examples/optim2.cc +149 -0
  43. data/ext/gecode-2.2.0/contribs/qecode/examples/stress_test.cpp +240 -0
  44. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/heap.cc +0 -0
  45. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/myDom.cc +0 -0
  46. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/myspace.cc +0 -0
  47. data/ext/gecode-2.2.0/contribs/qecode/myspace.hh +68 -0
  48. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/qecode.hh +0 -0
  49. data/ext/gecode-2.2.0/contribs/qecode/qsolver.cc +268 -0
  50. data/ext/gecode-2.2.0/contribs/qecode/qsolver.hh +46 -0
  51. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/shortdesc.ac +0 -0
  52. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/vartype.hh +0 -0
  53. data/ext/{gecode-2.1.1 → gecode-2.2.0}/doxygen/doxygen.conf.in +0 -0
  54. data/ext/gecode-2.2.0/doxygen/doxygen.hh.in +1112 -0
  55. data/ext/gecode-2.2.0/doxygen/reflection.hh +417 -0
  56. data/ext/gecode-2.2.0/examples/all-interval.cc +133 -0
  57. data/ext/gecode-2.2.0/examples/alpha.cc +137 -0
  58. data/ext/gecode-2.2.0/examples/bacp.cc +521 -0
  59. data/ext/gecode-2.2.0/examples/baseline.cc +87 -0
  60. data/ext/gecode-2.2.0/examples/bibd.cc +203 -0
  61. data/ext/gecode-2.2.0/examples/black-hole.cc +389 -0
  62. data/ext/gecode-2.2.0/examples/crew.cc +286 -0
  63. data/ext/gecode-2.2.0/examples/crowded-chess.cc +424 -0
  64. data/ext/gecode-2.2.0/examples/domino.cc +297 -0
  65. data/ext/gecode-2.2.0/examples/donald.cc +107 -0
  66. data/ext/gecode-2.2.0/examples/eq20.cc +125 -0
  67. data/ext/gecode-2.2.0/examples/golf.cc +297 -0
  68. data/ext/gecode-2.2.0/examples/golomb-ruler.cc +199 -0
  69. data/ext/gecode-2.2.0/examples/graph-color.cc +407 -0
  70. data/ext/gecode-2.2.0/examples/grocery.cc +113 -0
  71. data/ext/gecode-2.2.0/examples/hamming.cc +129 -0
  72. data/ext/gecode-2.2.0/examples/ind-set.cc +143 -0
  73. data/ext/gecode-2.2.0/examples/javascript.cc +163 -0
  74. data/ext/gecode-2.2.0/examples/kakuro.cc +686 -0
  75. data/ext/gecode-2.2.0/examples/knights.cc +220 -0
  76. data/ext/gecode-2.2.0/examples/langford-number.cc +225 -0
  77. data/ext/gecode-2.2.0/examples/magic-sequence.cc +146 -0
  78. data/ext/gecode-2.2.0/examples/magic-square.cc +138 -0
  79. data/ext/gecode-2.2.0/examples/minesweeper.cc +304 -0
  80. data/ext/gecode-2.2.0/examples/money.cc +105 -0
  81. data/ext/gecode-2.2.0/examples/nonogram.cc +492 -0
  82. data/ext/gecode-2.2.0/examples/ortho-latin.cc +172 -0
  83. data/ext/gecode-2.2.0/examples/partition.cc +141 -0
  84. data/ext/gecode-2.2.0/examples/pentominoes.cc +949 -0
  85. data/ext/gecode-2.2.0/examples/perfect-square.cc +311 -0
  86. data/ext/gecode-2.2.0/examples/photo.cc +170 -0
  87. data/ext/gecode-2.2.0/examples/queen-armies.cc +284 -0
  88. data/ext/gecode-2.2.0/examples/queens.cc +147 -0
  89. data/ext/gecode-2.2.0/examples/queens.js +57 -0
  90. data/ext/gecode-2.2.0/examples/sports-league.cc +342 -0
  91. data/ext/gecode-2.2.0/examples/steiner.cc +192 -0
  92. data/ext/gecode-2.2.0/examples/stress-distinct.cc +90 -0
  93. data/ext/gecode-2.2.0/examples/stress-domain.cc +99 -0
  94. data/ext/gecode-2.2.0/examples/stress-element.cc +112 -0
  95. data/ext/gecode-2.2.0/examples/stress-exec.cc +97 -0
  96. data/ext/gecode-2.2.0/examples/stress-extensional.cc +134 -0
  97. data/ext/gecode-2.2.0/examples/stress-linear-bool.cc +97 -0
  98. data/ext/gecode-2.2.0/examples/stress-min.cc +98 -0
  99. data/ext/gecode-2.2.0/examples/stress-search.cc +88 -0
  100. data/ext/gecode-2.2.0/examples/sudoku.cc +2341 -0
  101. data/ext/gecode-2.2.0/examples/support.hh +338 -0
  102. data/ext/gecode-2.2.0/examples/support/example.cc +64 -0
  103. data/ext/gecode-2.2.0/examples/support/example.icc +321 -0
  104. data/ext/gecode-2.2.0/examples/support/options.cc +226 -0
  105. data/ext/gecode-2.2.0/examples/support/options.icc +276 -0
  106. data/ext/gecode-2.2.0/examples/tsp.cc +317 -0
  107. data/ext/gecode-2.2.0/examples/warehouses.cc +191 -0
  108. data/ext/gecode-2.2.0/gecode.m4 +1046 -0
  109. data/ext/gecode-2.2.0/gecode/cpltset.hh +797 -0
  110. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/array.cc +0 -0
  111. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/array.icc +0 -0
  112. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/bddmanager.cc +0 -0
  113. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/bddmanager.icc +0 -0
  114. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch.cc +0 -0
  115. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch.hh +0 -0
  116. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch/select-val.icc +0 -0
  117. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch/select-view.icc +0 -0
  118. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/atmost.cc +0 -0
  119. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/cardinality.cc +0 -0
  120. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/distinct.cc +0 -0
  121. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/dom.cc +0 -0
  122. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/partition.cc +0 -0
  123. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/rangeroots.cc +0 -0
  124. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/rel.cc +0 -0
  125. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/select.cc +0 -0
  126. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/singleton.cc +0 -0
  127. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/exception.icc +0 -0
  128. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators.hh +0 -0
  129. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/binary.icc +0 -0
  130. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/nary.icc +0 -0
  131. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/naryone.icc +0 -0
  132. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/narytwo.icc +0 -0
  133. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/singleton.icc +0 -0
  134. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/unary.icc +0 -0
  135. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/support.cc +0 -0
  136. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/support.icc +0 -0
  137. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp.icc +0 -0
  138. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.cc +0 -0
  139. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.icc +0 -0
  140. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.vis +0 -0
  141. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var/cpltset.cc +0 -0
  142. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var/cpltset.icc +0 -0
  143. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view.icc +0 -0
  144. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view/cpltset.icc +0 -0
  145. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view/print.cc +0 -0
  146. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist.hh +0 -0
  147. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addchild.cc +0 -0
  148. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addchild.hh +0 -0
  149. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addvisualisationdialog.cc +0 -0
  150. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addvisualisationdialog.hh +0 -0
  151. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/better.hh +0 -0
  152. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/config.cc +0 -0
  153. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/config.hh +0 -0
  154. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.cc +281 -0
  155. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.hh +103 -0
  156. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.icc +70 -0
  157. data/ext/gecode-2.2.0/gecode/gist/gecodelogo.cc +672 -0
  158. data/ext/gecode-2.2.0/gecode/gist/gecodelogo.hh +64 -0
  159. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/gist.cc +0 -0
  160. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/gist.icc +0 -0
  161. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.cc +115 -0
  162. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.hh +75 -0
  163. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.icc +48 -0
  164. data/ext/gecode-2.2.0/gecode/gist/mainwindow.cc +274 -0
  165. data/ext/gecode-2.2.0/gecode/gist/mainwindow.hh +86 -0
  166. data/ext/gecode-2.2.0/gecode/gist/node.cc +148 -0
  167. data/ext/gecode-2.2.0/gecode/gist/node.hh +117 -0
  168. data/ext/gecode-2.2.0/gecode/gist/node.icc +99 -0
  169. data/ext/gecode-2.2.0/gecode/gist/nodecursor.cc +123 -0
  170. data/ext/gecode-2.2.0/gecode/gist/nodecursor.hh +147 -0
  171. data/ext/gecode-2.2.0/gecode/gist/nodecursor.icc +122 -0
  172. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/nodevisitor.hh +0 -0
  173. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/nodevisitor.icc +0 -0
  174. data/ext/gecode-2.2.0/gecode/gist/preferences.cc +120 -0
  175. data/ext/gecode-2.2.0/gecode/gist/preferences.hh +79 -0
  176. data/ext/gecode-2.2.0/gecode/gist/spacenode.cc +468 -0
  177. data/ext/gecode-2.2.0/gecode/gist/spacenode.hh +227 -0
  178. data/ext/gecode-2.2.0/gecode/gist/spacenode.icc +170 -0
  179. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/test.cc +0 -0
  180. data/ext/gecode-2.2.0/gecode/gist/textoutput.cc +134 -0
  181. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/textoutput.hh +0 -0
  182. data/ext/gecode-2.2.0/gecode/gist/treecanvas.cc +1343 -0
  183. data/ext/gecode-2.2.0/gecode/gist/treecanvas.hh +361 -0
  184. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/ui_addchild.hh +0 -0
  185. data/ext/gecode-2.2.0/gecode/gist/ui_addvisualisationdialog.hh +165 -0
  186. data/ext/gecode-2.2.0/gecode/gist/visualisation/intvaritem.cc +192 -0
  187. data/ext/gecode-2.2.0/gecode/gist/visualisation/intvaritem.hh +75 -0
  188. data/ext/gecode-2.2.0/gecode/gist/visualisation/setvaritem.cc +235 -0
  189. data/ext/gecode-2.2.0/gecode/gist/visualisation/setvaritem.hh +77 -0
  190. data/ext/gecode-2.2.0/gecode/gist/visualisation/vararrayitem.hh +125 -0
  191. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayview.cc +0 -0
  192. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayview.hh +0 -0
  193. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayviewt.hh +0 -0
  194. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/varitem.cc +0 -0
  195. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/varitem.hh +0 -0
  196. data/ext/gecode-2.2.0/gecode/gist/visualnode.cc +474 -0
  197. data/ext/gecode-2.2.0/gecode/gist/visualnode.hh +226 -0
  198. data/ext/gecode-2.2.0/gecode/gist/visualnode.icc +198 -0
  199. data/ext/gecode-2.2.0/gecode/gist/zoomToFitIcon.icc +113 -0
  200. data/ext/gecode-2.2.0/gecode/int.hh +2116 -0
  201. data/ext/gecode-2.2.0/gecode/int/arithmetic.cc +237 -0
  202. data/ext/gecode-2.2.0/gecode/int/arithmetic.hh +827 -0
  203. data/ext/gecode-2.2.0/gecode/int/arithmetic/abs.icc +278 -0
  204. data/ext/gecode-2.2.0/gecode/int/arithmetic/divmod.icc +496 -0
  205. data/ext/gecode-2.2.0/gecode/int/arithmetic/max.icc +474 -0
  206. data/ext/gecode-2.2.0/gecode/int/arithmetic/mult.icc +858 -0
  207. data/ext/gecode-2.2.0/gecode/int/arithmetic/sqr.icc +464 -0
  208. data/ext/gecode-2.2.0/gecode/int/arithmetic/sqrt.icc +260 -0
  209. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/array.cc +0 -0
  210. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/array.icc +0 -0
  211. data/ext/gecode-2.2.0/gecode/int/bool.cc +734 -0
  212. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool.hh +0 -0
  213. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/base.icc +0 -0
  214. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/eq.icc +0 -0
  215. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/eqv.icc +0 -0
  216. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/lq.icc +0 -0
  217. data/ext/gecode-2.2.0/gecode/int/bool/or.icc +1000 -0
  218. data/ext/gecode-2.2.0/gecode/int/branch.cc +167 -0
  219. data/ext/gecode-2.2.0/gecode/int/branch.hh +587 -0
  220. data/ext/gecode-2.2.0/gecode/int/branch/create-branch.icc +190 -0
  221. data/ext/gecode-2.2.0/gecode/int/branch/select-val.icc +340 -0
  222. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/branch/select-view.icc +0 -0
  223. data/ext/gecode-2.2.0/gecode/int/channel.cc +165 -0
  224. data/ext/gecode-2.2.0/gecode/int/channel.hh +259 -0
  225. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/base.icc +0 -0
  226. data/ext/gecode-2.2.0/gecode/int/channel/dom.icc +348 -0
  227. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-multi.cc +0 -0
  228. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-multi.icc +0 -0
  229. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-single.cc +0 -0
  230. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-single.icc +0 -0
  231. data/ext/gecode-2.2.0/gecode/int/channel/val.icc +278 -0
  232. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/circuit.cc +0 -0
  233. data/ext/gecode-2.2.0/gecode/int/circuit.hh +175 -0
  234. data/ext/gecode-2.2.0/gecode/int/circuit/base.icc +266 -0
  235. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/circuit/dom.icc +0 -0
  236. data/ext/gecode-2.2.0/gecode/int/circuit/val.icc +126 -0
  237. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/count.cc +0 -0
  238. data/ext/gecode-2.2.0/gecode/int/count.hh +487 -0
  239. data/ext/gecode-2.2.0/gecode/int/count/int.icc +620 -0
  240. data/ext/gecode-2.2.0/gecode/int/count/rel.icc +144 -0
  241. data/ext/gecode-2.2.0/gecode/int/count/view.icc +449 -0
  242. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/cumulatives.cc +0 -0
  243. data/ext/gecode-2.2.0/gecode/int/cumulatives.hh +138 -0
  244. data/ext/gecode-2.2.0/gecode/int/cumulatives/val.icc +455 -0
  245. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct.cc +0 -0
  246. data/ext/gecode-2.2.0/gecode/int/distinct.hh +341 -0
  247. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/bilink.icc +0 -0
  248. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/bnd.icc +0 -0
  249. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/combptr.icc +0 -0
  250. data/ext/gecode-2.2.0/gecode/int/distinct/dom.icc +752 -0
  251. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/edge.icc +0 -0
  252. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/node.icc +0 -0
  253. data/ext/gecode-2.2.0/gecode/int/distinct/ter-dom.icc +136 -0
  254. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/val.icc +0 -0
  255. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom.cc +0 -0
  256. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom.hh +0 -0
  257. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom/range.icc +0 -0
  258. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom/spec.icc +0 -0
  259. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/element.cc +0 -0
  260. data/ext/gecode-2.2.0/gecode/int/element.hh +239 -0
  261. data/ext/gecode-2.2.0/gecode/int/element/int.icc +444 -0
  262. data/ext/gecode-2.2.0/gecode/int/element/view.icc +584 -0
  263. data/ext/gecode-2.2.0/gecode/int/exception.icc +174 -0
  264. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional.cc +0 -0
  265. data/ext/gecode-2.2.0/gecode/int/extensional.hh +415 -0
  266. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/base.icc +0 -0
  267. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/basic.icc +0 -0
  268. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/bitset.icc +0 -0
  269. data/ext/gecode-2.2.0/gecode/int/extensional/dfa.cc +565 -0
  270. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/dfa.icc +0 -0
  271. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/incremental.icc +0 -0
  272. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/layered-graph.icc +0 -0
  273. data/ext/gecode-2.2.0/gecode/int/extensional/tuple-set.cc +285 -0
  274. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/tuple-set.icc +0 -0
  275. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc.cc +0 -0
  276. data/ext/gecode-2.2.0/gecode/int/gcc.hh +329 -0
  277. data/ext/gecode-2.2.0/gecode/int/gcc/bnd.icc +660 -0
  278. data/ext/gecode-2.2.0/gecode/int/gcc/dom.icc +531 -0
  279. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/gccbndsup.icc +0 -0
  280. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/graphsup.icc +0 -0
  281. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/lbc.icc +0 -0
  282. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/occur.icc +0 -0
  283. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/ubc.icc +0 -0
  284. data/ext/gecode-2.2.0/gecode/int/gcc/val.icc +400 -0
  285. data/ext/gecode-2.2.0/gecode/int/int-set.cc +157 -0
  286. data/ext/gecode-2.2.0/gecode/int/int-set.icc +195 -0
  287. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/limits.icc +0 -0
  288. data/ext/gecode-2.2.0/gecode/int/linear-bool.cc +235 -0
  289. data/ext/gecode-2.2.0/gecode/int/linear-int.cc +272 -0
  290. data/ext/gecode-2.2.0/gecode/int/linear.hh +1849 -0
  291. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-int.icc +0 -0
  292. data/ext/gecode-2.2.0/gecode/int/linear/bool-post.cc +433 -0
  293. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-scale.icc +0 -0
  294. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-view.icc +0 -0
  295. data/ext/gecode-2.2.0/gecode/int/linear/int-bin.icc +605 -0
  296. data/ext/gecode-2.2.0/gecode/int/linear/int-dom.icc +539 -0
  297. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-nary.icc +0 -0
  298. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-noview.icc +0 -0
  299. data/ext/gecode-2.2.0/gecode/int/linear/int-post.cc +493 -0
  300. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-ter.icc +0 -0
  301. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/post.icc +0 -0
  302. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/propagator.icc +0 -0
  303. data/ext/gecode-2.2.0/gecode/int/rel.cc +420 -0
  304. data/ext/gecode-2.2.0/gecode/int/rel.hh +627 -0
  305. data/ext/gecode-2.2.0/gecode/int/rel/eq.icc +885 -0
  306. data/ext/gecode-2.2.0/gecode/int/rel/lex.icc +275 -0
  307. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/rel/lq-le.icc +0 -0
  308. data/ext/gecode-2.2.0/gecode/int/rel/nq.icc +118 -0
  309. data/ext/gecode-2.2.0/gecode/int/sorted.cc +81 -0
  310. data/ext/gecode-2.2.0/gecode/int/sorted.hh +118 -0
  311. data/ext/gecode-2.2.0/gecode/int/sorted/matching.icc +173 -0
  312. data/ext/gecode-2.2.0/gecode/int/sorted/narrowing.icc +249 -0
  313. data/ext/gecode-2.2.0/gecode/int/sorted/order.icc +212 -0
  314. data/ext/gecode-2.2.0/gecode/int/sorted/propagate.icc +702 -0
  315. data/ext/gecode-2.2.0/gecode/int/sorted/sortsup.icc +563 -0
  316. data/ext/gecode-2.2.0/gecode/int/support-values.hh +158 -0
  317. data/ext/gecode-2.2.0/gecode/int/support-values.icc +203 -0
  318. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/unshare.cc +0 -0
  319. data/ext/gecode-2.2.0/gecode/int/var-imp.icc +745 -0
  320. data/ext/gecode-2.2.0/gecode/int/var-imp/bool.cc +105 -0
  321. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/bool.icc +0 -0
  322. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/bool.vis +0 -0
  323. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/delta.icc +0 -0
  324. data/ext/gecode-2.2.0/gecode/int/var-imp/int.cc +408 -0
  325. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/int.icc +0 -0
  326. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/int.vis +0 -0
  327. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var/bool.cc +0 -0
  328. data/ext/gecode-2.2.0/gecode/int/var/bool.icc +128 -0
  329. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var/int.cc +0 -0
  330. data/ext/gecode-2.2.0/gecode/int/var/int.icc +153 -0
  331. data/ext/gecode-2.2.0/gecode/int/view.icc +1918 -0
  332. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/bool.icc +0 -0
  333. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/constint.icc +0 -0
  334. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/int.icc +0 -0
  335. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/iter.icc +0 -0
  336. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/minus.icc +0 -0
  337. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/offset.icc +0 -0
  338. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/print.cc +0 -0
  339. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/rtest.icc +0 -0
  340. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/scale.icc +0 -0
  341. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/zero.icc +0 -0
  342. data/ext/gecode-2.2.0/gecode/iter.hh +98 -0
  343. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-add.icc +0 -0
  344. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-append.icc +0 -0
  345. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-array.icc +0 -0
  346. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-cache.icc +0 -0
  347. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-compl.icc +0 -0
  348. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-diff.icc +0 -0
  349. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-empty.icc +0 -0
  350. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-inter.icc +0 -0
  351. data/ext/gecode-2.2.0/gecode/iter/ranges-map.icc +260 -0
  352. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-minmax.icc +0 -0
  353. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-minus.icc +0 -0
  354. data/ext/gecode-2.2.0/gecode/iter/ranges-negative.icc +137 -0
  355. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-offset.icc +0 -0
  356. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-operations.icc +0 -0
  357. data/ext/gecode-2.2.0/gecode/iter/ranges-positive.icc +139 -0
  358. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-scale.icc +0 -0
  359. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-singleton-append.icc +0 -0
  360. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-singleton.icc +0 -0
  361. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-size.icc +0 -0
  362. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-union.icc +0 -0
  363. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-values.icc +0 -0
  364. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-array.icc +0 -0
  365. data/ext/gecode-2.2.0/gecode/iter/values-inter.icc +130 -0
  366. data/ext/gecode-2.2.0/gecode/iter/values-map.icc +136 -0
  367. data/ext/gecode-2.2.0/gecode/iter/values-minus.icc +130 -0
  368. data/ext/gecode-2.2.0/gecode/iter/values-negative.icc +116 -0
  369. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-offset.icc +0 -0
  370. data/ext/gecode-2.2.0/gecode/iter/values-positive.icc +123 -0
  371. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-ranges.icc +0 -0
  372. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-singleton.icc +0 -0
  373. data/ext/gecode-2.2.0/gecode/iter/values-union.icc +137 -0
  374. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-unique.icc +0 -0
  375. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-compl.icc +0 -0
  376. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-inter.icc +0 -0
  377. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-union.icc +0 -0
  378. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges.icc +0 -0
  379. data/ext/gecode-2.2.0/gecode/kernel.hh +188 -0
  380. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/advisor.icc +0 -0
  381. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/array.icc +0 -0
  382. data/ext/gecode-2.2.0/gecode/kernel/branching.icc +433 -0
  383. data/ext/gecode-2.2.0/gecode/kernel/core.cc +474 -0
  384. data/ext/gecode-2.2.0/gecode/kernel/core.icc +2311 -0
  385. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/exception.icc +0 -0
  386. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/macros.icc +0 -0
  387. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/memory-manager.cc +0 -0
  388. data/ext/gecode-2.2.0/gecode/kernel/memory-manager.icc +454 -0
  389. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/modevent.icc +0 -0
  390. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/propagator.icc +0 -0
  391. data/ext/gecode-2.2.0/gecode/kernel/reflection.cc +951 -0
  392. data/ext/gecode-2.2.0/gecode/kernel/reflection.icc +1213 -0
  393. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/shared-array.icc +0 -0
  394. data/ext/gecode-2.2.0/gecode/kernel/var-imp.icc +433 -0
  395. data/ext/gecode-2.2.0/gecode/kernel/var-map.cc +269 -0
  396. data/ext/gecode-2.2.0/gecode/kernel/var-map.icc +230 -0
  397. data/ext/gecode-2.2.0/gecode/kernel/var-traits.icc +79 -0
  398. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/var-type.cc +0 -0
  399. data/ext/gecode-2.2.0/gecode/kernel/var-type.icc +915 -0
  400. data/ext/gecode-2.2.0/gecode/kernel/var.icc +114 -0
  401. data/ext/gecode-2.2.0/gecode/kernel/view.icc +413 -0
  402. data/ext/gecode-2.2.0/gecode/minimodel.hh +1206 -0
  403. data/ext/gecode-2.2.0/gecode/minimodel/arithmetic.icc +118 -0
  404. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-expr.cc +0 -0
  405. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-expr.icc +0 -0
  406. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-rel.icc +0 -0
  407. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/exception.icc +0 -0
  408. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/lin-expr.icc +0 -0
  409. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/lin-rel.icc +0 -0
  410. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/matrix.icc +0 -0
  411. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/reg.cc +0 -0
  412. data/ext/gecode-2.2.0/gecode/search.hh +759 -0
  413. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/bab.cc +0 -0
  414. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/bab.icc +0 -0
  415. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/dfs.cc +0 -0
  416. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/dfs.icc +0 -0
  417. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/engine-ctrl.icc +0 -0
  418. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/lds.cc +0 -0
  419. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/lds.icc +0 -0
  420. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/options.cc +0 -0
  421. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/options.icc +0 -0
  422. data/ext/gecode-2.2.0/gecode/search/reco-stack.icc +277 -0
  423. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/restart.icc +0 -0
  424. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/statistics.icc +0 -0
  425. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/stop.cc +0 -0
  426. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/stop.icc +0 -0
  427. data/ext/gecode-2.2.0/gecode/serialization.hh +149 -0
  428. data/ext/gecode-2.2.0/gecode/serialization/boost.cc +78 -0
  429. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/boost.icc +0 -0
  430. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/flatzinc.cc +0 -0
  431. data/ext/gecode-2.2.0/gecode/serialization/javascript.cc +343 -0
  432. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/javascript.hh +0 -0
  433. data/ext/gecode-2.2.0/gecode/serialization/register.cc +8498 -0
  434. data/ext/gecode-2.2.0/gecode/set.hh +970 -0
  435. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/array.cc +0 -0
  436. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/array.icc +0 -0
  437. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch.cc +0 -0
  438. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch.hh +0 -0
  439. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch/select-val.icc +0 -0
  440. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch/select-view.icc +0 -0
  441. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/cardinality.cc +0 -0
  442. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex.cc +0 -0
  443. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex.hh +0 -0
  444. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/conv.cc +0 -0
  445. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/conv.icc +0 -0
  446. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/hull.cc +0 -0
  447. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/hull.icc +0 -0
  448. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct.cc +0 -0
  449. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct.hh +0 -0
  450. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct/atmostOne.cc +0 -0
  451. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct/atmostOne.icc +0 -0
  452. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/dom.cc +0 -0
  453. data/ext/gecode-2.2.0/gecode/set/element.cc +135 -0
  454. data/ext/gecode-2.2.0/gecode/set/element.hh +233 -0
  455. data/ext/gecode-2.2.0/gecode/set/element/disjoint.cc +308 -0
  456. data/ext/gecode-2.2.0/gecode/set/element/disjoint.icc +75 -0
  457. data/ext/gecode-2.2.0/gecode/set/element/idxarray.hh +113 -0
  458. data/ext/gecode-2.2.0/gecode/set/element/idxarray.icc +155 -0
  459. data/ext/gecode-2.2.0/gecode/set/element/inter.icc +348 -0
  460. data/ext/gecode-2.2.0/gecode/set/element/union.icc +371 -0
  461. data/ext/gecode-2.2.0/gecode/set/element/unionConst.icc +334 -0
  462. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/exception.icc +0 -0
  463. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int.cc +0 -0
  464. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int.hh +0 -0
  465. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/card.icc +0 -0
  466. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/channel-bool.icc +0 -0
  467. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/channel-int.icc +0 -0
  468. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/match.icc +0 -0
  469. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/minmax.icc +0 -0
  470. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/weights.icc +0 -0
  471. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/limits.icc +0 -0
  472. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors-compiler.hh +0 -0
  473. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors.cc +0 -0
  474. data/ext/gecode-2.2.0/gecode/set/projectors.hh +438 -0
  475. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/compiler.cc +0 -0
  476. data/ext/gecode-2.2.0/gecode/set/projectors/formula.cc +312 -0
  477. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/formula.icc +0 -0
  478. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector-set.cc +0 -0
  479. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector-set.icc +0 -0
  480. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector.cc +0 -0
  481. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector.icc +0 -0
  482. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator.hh +0 -0
  483. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/card.icc +0 -0
  484. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/nary.icc +0 -0
  485. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/re-nary.cc +0 -0
  486. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/re-nary.icc +0 -0
  487. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/set-expr.cc +0 -0
  488. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/set-expr.icc +0 -0
  489. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/propagator.icc +0 -0
  490. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op-const.cc +0 -0
  491. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op.cc +0 -0
  492. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op.hh +0 -0
  493. data/ext/gecode-2.2.0/gecode/set/rel-op/common.icc +613 -0
  494. data/ext/gecode-2.2.0/gecode/set/rel-op/inter.icc +452 -0
  495. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/partition.icc +0 -0
  496. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/post.icc +0 -0
  497. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/subofunion.icc +0 -0
  498. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/superofinter.icc +0 -0
  499. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/union.icc +0 -0
  500. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel.cc +0 -0
  501. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel.hh +0 -0
  502. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/common.icc +0 -0
  503. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/eq.icc +0 -0
  504. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/nosubset.icc +0 -0
  505. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/nq.icc +0 -0
  506. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/re-eq.icc +0 -0
  507. data/ext/gecode-2.2.0/gecode/set/rel/re-subset.icc +174 -0
  508. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/subset.icc +0 -0
  509. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence.cc +0 -0
  510. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence.hh +0 -0
  511. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/common.icc +0 -0
  512. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq-u.cc +0 -0
  513. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq-u.icc +0 -0
  514. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq.cc +0 -0
  515. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq.icc +0 -0
  516. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp.icc +0 -0
  517. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/delta.icc +0 -0
  518. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/integerset.cc +0 -0
  519. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/integerset.icc +0 -0
  520. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/iter.icc +0 -0
  521. data/ext/gecode-2.2.0/gecode/set/var-imp/set.cc +215 -0
  522. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/set.icc +0 -0
  523. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/set.vis +0 -0
  524. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var/set.cc +0 -0
  525. data/ext/gecode-2.2.0/gecode/set/var/set.icc +303 -0
  526. data/ext/gecode-2.2.0/gecode/set/view.icc +1451 -0
  527. data/ext/gecode-2.2.0/gecode/set/view/complement.icc +614 -0
  528. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/const.icc +0 -0
  529. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/offset.icc +0 -0
  530. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/print.cc +0 -0
  531. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/set.icc +0 -0
  532. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/singleton.icc +0 -0
  533. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support.hh +0 -0
  534. data/ext/gecode-2.2.0/gecode/support/block-allocator.icc +159 -0
  535. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/AUTHORS +0 -0
  536. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/ChangeLog +0 -0
  537. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/NEWS +0 -0
  538. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/README +0 -0
  539. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bdd.h +0 -0
  540. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddio.c +0 -0
  541. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddop.c +0 -0
  542. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddtree.h +0 -0
  543. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bvec.c +0 -0
  544. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bvec.h +0 -0
  545. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cache.c +0 -0
  546. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cache.h +0 -0
  547. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/config.h +0 -0
  548. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cppext.cc +0 -0
  549. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/fdd.c +0 -0
  550. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/fdd.h +0 -0
  551. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/imatrix.c +0 -0
  552. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/imatrix.h +0 -0
  553. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/kernel.c +0 -0
  554. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/kernel.h +0 -0
  555. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/pairs.c +0 -0
  556. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/prime.c +0 -0
  557. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/prime.h +0 -0
  558. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/reorder.c +0 -0
  559. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/tree.c +0 -0
  560. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/cast.icc +0 -0
  561. data/ext/gecode-2.2.0/gecode/support/config.icc.in +83 -0
  562. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/dynamic-array.icc +0 -0
  563. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/dynamic-stack.icc +0 -0
  564. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/exception.cc +0 -0
  565. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/exception.icc +0 -0
  566. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/macros.icc +0 -0
  567. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/map.icc +0 -0
  568. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/marked-pointer.icc +0 -0
  569. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/memory.icc +0 -0
  570. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/random.icc +0 -0
  571. data/ext/gecode-2.2.0/gecode/support/sentinel-stack.icc +138 -0
  572. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/sort.icc +0 -0
  573. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/static-pqueue.icc +0 -0
  574. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/static-stack.icc +0 -0
  575. data/ext/gecode-2.2.0/gecode/support/symbol.cc +241 -0
  576. data/ext/gecode-2.2.0/gecode/support/symbol.icc +134 -0
  577. data/ext/{gecode-2.1.1 → gecode-2.2.0}/install-sh +0 -0
  578. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/AppleHelpbookInfo.plist +0 -0
  579. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/allexamples.perl +0 -0
  580. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/Makefile.am +0 -0
  581. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/changelog +0 -0
  582. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/control +0 -0
  583. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/copyright +0 -0
  584. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.info +0 -0
  585. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.install +0 -0
  586. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.spec +0 -0
  587. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/rules +0 -0
  588. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/back.png +0 -0
  589. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/footer.html +0 -0
  590. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/gecode-logo-100.png +0 -0
  591. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/header.html +0 -0
  592. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/stylesheet.css +0 -0
  593. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/fixproperties.sh +0 -0
  594. data/ext/gecode-2.2.0/misc/gecode-gist.pc.in +45 -0
  595. data/ext/gecode-2.2.0/misc/gecode-minimodel.pc.in +45 -0
  596. data/ext/gecode-2.2.0/misc/gecode-search.pc.in +45 -0
  597. data/ext/gecode-2.2.0/misc/gecode-serialization.pc.in +45 -0
  598. data/ext/gecode-2.2.0/misc/gecode.pc.in +45 -0
  599. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genchangelog.perl +0 -0
  600. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genlcovmakefile.perl +0 -0
  601. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genlicense.perl +0 -0
  602. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genregistry.perl +0 -0
  603. data/ext/gecode-2.2.0/misc/genstatistics.perl +179 -0
  604. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/gentxtchangelog.perl +0 -0
  605. data/ext/gecode-2.2.0/misc/genvariables.perl +905 -0
  606. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/getrevision.perl +0 -0
  607. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/makedepend.perl +0 -0
  608. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/svn-ignore.txt +0 -0
  609. data/ext/gecode-2.2.0/test/assign.cc +181 -0
  610. data/ext/gecode-2.2.0/test/assign.hh +93 -0
  611. data/ext/gecode-2.2.0/test/assign/bool.cc +61 -0
  612. data/ext/gecode-2.2.0/test/assign/int.cc +70 -0
  613. data/ext/gecode-2.2.0/test/branch.cc +563 -0
  614. data/ext/gecode-2.2.0/test/branch.hh +144 -0
  615. data/ext/gecode-2.2.0/test/branch/bool.cc +61 -0
  616. data/ext/gecode-2.2.0/test/branch/cpltset.cc +71 -0
  617. data/ext/gecode-2.2.0/test/branch/int.cc +70 -0
  618. data/ext/gecode-2.2.0/test/branch/set.cc +74 -0
  619. data/ext/gecode-2.2.0/test/cpltset.cc +568 -0
  620. data/ext/gecode-2.2.0/test/cpltset.hh +125 -0
  621. data/ext/gecode-2.2.0/test/cpltset/atmost.cc +155 -0
  622. data/ext/gecode-2.2.0/test/cpltset/cardinality.cc +138 -0
  623. data/ext/gecode-2.2.0/test/cpltset/dom.cc +137 -0
  624. data/ext/gecode-2.2.0/test/cpltset/partition.cc +210 -0
  625. data/ext/gecode-2.2.0/test/cpltset/rel.cc +158 -0
  626. data/ext/gecode-2.2.0/test/cpltset/select.cc +216 -0
  627. data/ext/gecode-2.2.0/test/int.cc +688 -0
  628. data/ext/gecode-2.2.0/test/int.hh +267 -0
  629. data/ext/gecode-2.2.0/test/int.icc +266 -0
  630. data/ext/gecode-2.2.0/test/int/arithmetic.cc +766 -0
  631. data/ext/gecode-2.2.0/test/int/basic.cc +77 -0
  632. data/ext/gecode-2.2.0/test/int/bool.cc +340 -0
  633. data/ext/gecode-2.2.0/test/int/channel.cc +238 -0
  634. data/ext/gecode-2.2.0/test/int/circuit.cc +100 -0
  635. data/ext/gecode-2.2.0/test/int/count.cc +357 -0
  636. data/ext/gecode-2.2.0/test/int/distinct.cc +248 -0
  637. data/ext/gecode-2.2.0/test/int/dom.cc +123 -0
  638. data/ext/gecode-2.2.0/test/int/element.cc +333 -0
  639. data/ext/gecode-2.2.0/test/int/extensional.cc +475 -0
  640. data/ext/gecode-2.2.0/test/int/gcc.cc +293 -0
  641. data/ext/gecode-2.2.0/test/int/linear.cc +383 -0
  642. data/ext/gecode-2.2.0/test/int/mm-arithmetic.cc +302 -0
  643. data/ext/gecode-2.2.0/test/int/mm-bool.cc +4342 -0
  644. data/ext/gecode-2.2.0/test/int/mm-count.cc +295 -0
  645. data/ext/gecode-2.2.0/test/int/mm-lin.cc +2035 -0
  646. data/ext/gecode-2.2.0/test/int/mm-rel.cc +136 -0
  647. data/ext/gecode-2.2.0/test/int/rel.cc +416 -0
  648. data/ext/gecode-2.2.0/test/int/scheduling.cc +276 -0
  649. data/ext/gecode-2.2.0/test/int/sorted.cc +165 -0
  650. data/ext/gecode-2.2.0/test/int/unshare.cc +109 -0
  651. data/ext/gecode-2.2.0/test/search.cc +618 -0
  652. data/ext/gecode-2.2.0/test/set.cc +753 -0
  653. data/ext/gecode-2.2.0/test/set.hh +286 -0
  654. data/ext/gecode-2.2.0/test/set.icc +108 -0
  655. data/ext/gecode-2.2.0/test/set/convex.cc +139 -0
  656. data/ext/gecode-2.2.0/test/set/distinct.cc +116 -0
  657. data/ext/gecode-2.2.0/test/set/dom.cc +292 -0
  658. data/ext/gecode-2.2.0/test/set/int.cc +473 -0
  659. data/ext/gecode-2.2.0/test/set/projection.cc +436 -0
  660. data/ext/gecode-2.2.0/test/set/rel-op-const.cc +368 -0
  661. data/ext/gecode-2.2.0/test/set/rel-op.cc +465 -0
  662. data/ext/gecode-2.2.0/test/set/rel.cc +125 -0
  663. data/ext/gecode-2.2.0/test/set/select.cc +299 -0
  664. data/ext/gecode-2.2.0/test/set/sequence.cc +125 -0
  665. data/ext/gecode-2.2.0/test/test.cc +287 -0
  666. data/ext/gecode-2.2.0/test/test.hh +175 -0
  667. data/ext/gecode-2.2.0/test/test.icc +93 -0
  668. data/ext/{gecode-2.1.1 → gecode-2.2.0}/variables.vsl +0 -0
  669. data/lib/gecoder/bindings.rb +7 -5
  670. data/lib/gecoder/bindings/bindings.rb +8 -8
  671. data/lib/gecoder/interface.rb +4 -2
  672. data/lib/gecoder/interface/binding_changes.rb +1 -1
  673. data/lib/gecoder/interface/branch.rb +1 -1
  674. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +4 -4
  675. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +2 -2
  676. data/lib/gecoder/interface/constraints/extensional_regexp.rb +1 -1
  677. data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +2 -2
  678. data/lib/gecoder/interface/constraints/int_enum/extensional.rb +5 -5
  679. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +4 -4
  680. data/lib/gecoder/interface/constraints/int_var_constraints.rb +2 -2
  681. data/lib/gecoder/interface/constraints/selected_set/select.rb +8 -8
  682. data/lib/gecoder/interface/constraints/set_enum/element.rb +79 -0
  683. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +5 -5
  684. data/lib/gecoder/interface/constraints/set_var_constraints.rb +2 -2
  685. data/lib/gecoder/interface/convenience.rb +99 -0
  686. data/lib/gecoder/interface/enum_wrapper.rb +1 -1
  687. data/lib/gecoder/interface/mixin.rb +486 -0
  688. data/lib/gecoder/interface/search.rb +23 -22
  689. data/lib/gecoder/version.rb +1 -1
  690. data/specs/branch.rb +5 -3
  691. data/specs/constraints/bool/boolean.rb +3 -1
  692. data/specs/constraints/bool/linear.rb +3 -1
  693. data/specs/constraints/bool_enum/bool_enum_relation.rb +3 -1
  694. data/specs/constraints/bool_enum/channel.rb +3 -1
  695. data/specs/constraints/fixnum_enum/element.rb +3 -1
  696. data/specs/constraints/int/arithmetic.rb +3 -1
  697. data/specs/constraints/int/channel.rb +3 -1
  698. data/specs/constraints/int/linear.rb +3 -1
  699. data/specs/constraints/int/linear_properties.rb +3 -1
  700. data/specs/constraints/int_enum/arithmetic.rb +3 -1
  701. data/specs/constraints/int_enum/channel.rb +3 -1
  702. data/specs/constraints/int_enum/count.rb +3 -1
  703. data/specs/constraints/int_enum/distinct.rb +3 -1
  704. data/specs/constraints/int_enum/element.rb +3 -1
  705. data/specs/constraints/int_enum/sort.rb +3 -1
  706. data/specs/constraints/property_helper.rb +10 -10
  707. data/specs/constraints/reification_sugar.rb +3 -1
  708. data/specs/constraints/selected_set/select.rb +6 -5
  709. data/specs/constraints/selected_set/select_properties.rb +12 -10
  710. data/specs/constraints/set/channel.rb +3 -1
  711. data/specs/constraints/set/domain.rb +4 -4
  712. data/specs/constraints/set/relation.rb +4 -4
  713. data/specs/constraints/set_enum/channel.rb +3 -1
  714. data/specs/constraints/set_enum/distinct.rb +3 -1
  715. data/specs/constraints/set_enum/element.rb +77 -0
  716. data/specs/enum_wrapper.rb +1 -1
  717. data/specs/mixin.rb +78 -0
  718. data/specs/model.rb +5 -5
  719. data/specs/search.rb +20 -14
  720. data/specs/selected_set.rb +3 -3
  721. data/specs/set_elements.rb +2 -2
  722. data/tasks/distribution.rake +25 -4
  723. metadata +739 -602
  724. data/example/money.rb +0 -36
  725. data/ext/gecode-2.1.1/Makefile.dep +0 -7622
  726. data/ext/gecode-2.1.1/Makefile.in +0 -1568
  727. data/ext/gecode-2.1.1/changelog.in +0 -2459
  728. data/ext/gecode-2.1.1/configure +0 -11631
  729. data/ext/gecode-2.1.1/configure.ac +0 -249
  730. data/ext/gecode-2.1.1/configure.ac.in +0 -245
  731. data/ext/gecode-2.1.1/contribs/qecode/Doxyfile +0 -263
  732. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.cc +0 -82
  733. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.hh +0 -37
  734. data/ext/gecode-2.1.1/contribs/qecode/Makefile.in.in +0 -162
  735. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.cc +0 -172
  736. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.hh +0 -63
  737. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +0 -37
  738. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +0 -35
  739. data/ext/gecode-2.1.1/contribs/qecode/configure +0 -2264
  740. data/ext/gecode-2.1.1/contribs/qecode/configure.ac +0 -23
  741. data/ext/gecode-2.1.1/contribs/qecode/examples/COMPILING +0 -13
  742. data/ext/gecode-2.1.1/contribs/qecode/examples/MatrixGame.cpp +0 -144
  743. data/ext/gecode-2.1.1/contribs/qecode/examples/NimFibo.cpp +0 -73
  744. data/ext/gecode-2.1.1/contribs/qecode/examples/stress_test.cpp +0 -179
  745. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +0 -34
  746. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +0 -46
  747. data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +0 -595
  748. data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +0 -184
  749. data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +0 -69
  750. data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +0 -145
  751. data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +0 -247
  752. data/ext/gecode-2.1.1/contribs/qecode/qsolver.cc +0 -168
  753. data/ext/gecode-2.1.1/contribs/qecode/qsolver.hh +0 -73
  754. data/ext/gecode-2.1.1/contribs/qecode/valueHeuristic.hh +0 -91
  755. data/ext/gecode-2.1.1/contribs/qecode/warner.cc +0 -101
  756. data/ext/gecode-2.1.1/contribs/qecode/warner.hh +0 -83
  757. data/ext/gecode-2.1.1/doxygen/doxygen.hh.in +0 -1111
  758. data/ext/gecode-2.1.1/doxygen/reflection.hh +0 -417
  759. data/ext/gecode-2.1.1/gecode.m4 +0 -956
  760. data/ext/gecode-2.1.1/gecode/cpltset.hh +0 -797
  761. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.cc +0 -115
  762. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.hh +0 -77
  763. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.cc +0 -245
  764. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.hh +0 -101
  765. data/ext/gecode-2.1.1/gecode/gist/gecodelogo.icc +0 -522
  766. data/ext/gecode-2.1.1/gecode/gist/mainwindow.cc +0 -254
  767. data/ext/gecode-2.1.1/gecode/gist/mainwindow.hh +0 -86
  768. data/ext/gecode-2.1.1/gecode/gist/node.cc +0 -100
  769. data/ext/gecode-2.1.1/gecode/gist/node.hh +0 -89
  770. data/ext/gecode-2.1.1/gecode/gist/nodecursor.cc +0 -124
  771. data/ext/gecode-2.1.1/gecode/gist/nodecursor.hh +0 -122
  772. data/ext/gecode-2.1.1/gecode/gist/nodecursor.icc +0 -79
  773. data/ext/gecode-2.1.1/gecode/gist/postscript.cc +0 -543
  774. data/ext/gecode-2.1.1/gecode/gist/postscript.hh +0 -56
  775. data/ext/gecode-2.1.1/gecode/gist/preferences.cc +0 -110
  776. data/ext/gecode-2.1.1/gecode/gist/preferences.hh +0 -76
  777. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.cc +0 -55
  778. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.hh +0 -58
  779. data/ext/gecode-2.1.1/gecode/gist/shapelist.cc +0 -331
  780. data/ext/gecode-2.1.1/gecode/gist/shapelist.hh +0 -140
  781. data/ext/gecode-2.1.1/gecode/gist/spacenode.cc +0 -531
  782. data/ext/gecode-2.1.1/gecode/gist/spacenode.hh +0 -224
  783. data/ext/gecode-2.1.1/gecode/gist/textoutput.cc +0 -114
  784. data/ext/gecode-2.1.1/gecode/gist/treecanvas.cc +0 -1140
  785. data/ext/gecode-2.1.1/gecode/gist/treecanvas.hh +0 -324
  786. data/ext/gecode-2.1.1/gecode/gist/ui_addvisualisationdialog.hh +0 -163
  787. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.cc +0 -175
  788. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.hh +0 -71
  789. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.cc +0 -219
  790. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.hh +0 -73
  791. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayitem.hh +0 -123
  792. data/ext/gecode-2.1.1/gecode/gist/visualnode.cc +0 -303
  793. data/ext/gecode-2.1.1/gecode/gist/visualnode.hh +0 -166
  794. data/ext/gecode-2.1.1/gecode/int.hh +0 -2035
  795. data/ext/gecode-2.1.1/gecode/int/arithmetic.cc +0 -136
  796. data/ext/gecode-2.1.1/gecode/int/arithmetic.hh +0 -440
  797. data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +0 -279
  798. data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +0 -253
  799. data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +0 -522
  800. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +0 -218
  801. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +0 -138
  802. data/ext/gecode-2.1.1/gecode/int/bool.cc +0 -642
  803. data/ext/gecode-2.1.1/gecode/int/bool/or.icc +0 -1000
  804. data/ext/gecode-2.1.1/gecode/int/branch.cc +0 -301
  805. data/ext/gecode-2.1.1/gecode/int/branch.hh +0 -576
  806. data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +0 -338
  807. data/ext/gecode-2.1.1/gecode/int/channel.cc +0 -114
  808. data/ext/gecode-2.1.1/gecode/int/channel.hh +0 -259
  809. data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +0 -347
  810. data/ext/gecode-2.1.1/gecode/int/channel/val.icc +0 -276
  811. data/ext/gecode-2.1.1/gecode/int/circuit.hh +0 -175
  812. data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +0 -271
  813. data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +0 -122
  814. data/ext/gecode-2.1.1/gecode/int/count.hh +0 -487
  815. data/ext/gecode-2.1.1/gecode/int/count/int.icc +0 -619
  816. data/ext/gecode-2.1.1/gecode/int/count/rel.icc +0 -144
  817. data/ext/gecode-2.1.1/gecode/int/count/view.icc +0 -449
  818. data/ext/gecode-2.1.1/gecode/int/cumulatives.hh +0 -141
  819. data/ext/gecode-2.1.1/gecode/int/cumulatives/val.icc +0 -429
  820. data/ext/gecode-2.1.1/gecode/int/distinct.hh +0 -341
  821. data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +0 -750
  822. data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +0 -136
  823. data/ext/gecode-2.1.1/gecode/int/element.hh +0 -239
  824. data/ext/gecode-2.1.1/gecode/int/element/int.icc +0 -441
  825. data/ext/gecode-2.1.1/gecode/int/element/view.icc +0 -584
  826. data/ext/gecode-2.1.1/gecode/int/exception.icc +0 -163
  827. data/ext/gecode-2.1.1/gecode/int/extensional.hh +0 -415
  828. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +0 -565
  829. data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.cc +0 -311
  830. data/ext/gecode-2.1.1/gecode/int/gcc.hh +0 -329
  831. data/ext/gecode-2.1.1/gecode/int/gcc/bnd.icc +0 -660
  832. data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +0 -531
  833. data/ext/gecode-2.1.1/gecode/int/gcc/val.icc +0 -400
  834. data/ext/gecode-2.1.1/gecode/int/int-set.cc +0 -153
  835. data/ext/gecode-2.1.1/gecode/int/int-set.icc +0 -191
  836. data/ext/gecode-2.1.1/gecode/int/linear-bool.cc +0 -220
  837. data/ext/gecode-2.1.1/gecode/int/linear-int.cc +0 -240
  838. data/ext/gecode-2.1.1/gecode/int/linear.hh +0 -1849
  839. data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +0 -433
  840. data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +0 -605
  841. data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +0 -539
  842. data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +0 -493
  843. data/ext/gecode-2.1.1/gecode/int/rel.cc +0 -431
  844. data/ext/gecode-2.1.1/gecode/int/rel.hh +0 -657
  845. data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +0 -848
  846. data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +0 -248
  847. data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +0 -269
  848. data/ext/gecode-2.1.1/gecode/int/sorted.cc +0 -91
  849. data/ext/gecode-2.1.1/gecode/int/sorted.hh +0 -117
  850. data/ext/gecode-2.1.1/gecode/int/sorted/matching.icc +0 -182
  851. data/ext/gecode-2.1.1/gecode/int/sorted/narrowing.icc +0 -257
  852. data/ext/gecode-2.1.1/gecode/int/sorted/order.icc +0 -208
  853. data/ext/gecode-2.1.1/gecode/int/sorted/propagate.icc +0 -669
  854. data/ext/gecode-2.1.1/gecode/int/sorted/sortsup.icc +0 -596
  855. data/ext/gecode-2.1.1/gecode/int/var-imp.icc +0 -745
  856. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +0 -104
  857. data/ext/gecode-2.1.1/gecode/int/var-imp/int.cc +0 -407
  858. data/ext/gecode-2.1.1/gecode/int/var/bool.icc +0 -126
  859. data/ext/gecode-2.1.1/gecode/int/var/int.icc +0 -151
  860. data/ext/gecode-2.1.1/gecode/int/view.icc +0 -1894
  861. data/ext/gecode-2.1.1/gecode/iter.hh +0 -90
  862. data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +0 -130
  863. data/ext/gecode-2.1.1/gecode/kernel.hh +0 -182
  864. data/ext/gecode-2.1.1/gecode/kernel/branching.icc +0 -447
  865. data/ext/gecode-2.1.1/gecode/kernel/core.cc +0 -473
  866. data/ext/gecode-2.1.1/gecode/kernel/core.icc +0 -2295
  867. data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +0 -458
  868. data/ext/gecode-2.1.1/gecode/kernel/reflection.cc +0 -921
  869. data/ext/gecode-2.1.1/gecode/kernel/reflection.icc +0 -1012
  870. data/ext/gecode-2.1.1/gecode/kernel/var-imp.icc +0 -433
  871. data/ext/gecode-2.1.1/gecode/kernel/var-map.cc +0 -269
  872. data/ext/gecode-2.1.1/gecode/kernel/var-map.icc +0 -227
  873. data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +0 -72
  874. data/ext/gecode-2.1.1/gecode/kernel/var-type.icc +0 -915
  875. data/ext/gecode-2.1.1/gecode/kernel/var.icc +0 -120
  876. data/ext/gecode-2.1.1/gecode/kernel/view.icc +0 -611
  877. data/ext/gecode-2.1.1/gecode/minimodel.hh +0 -1165
  878. data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +0 -179
  879. data/ext/gecode-2.1.1/gecode/search.hh +0 -752
  880. data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +0 -237
  881. data/ext/gecode-2.1.1/gecode/serialization.hh +0 -149
  882. data/ext/gecode-2.1.1/gecode/serialization/boost.cc +0 -78
  883. data/ext/gecode-2.1.1/gecode/serialization/javascript.cc +0 -340
  884. data/ext/gecode-2.1.1/gecode/serialization/register.cc +0 -8142
  885. data/ext/gecode-2.1.1/gecode/set.hh +0 -970
  886. data/ext/gecode-2.1.1/gecode/set/projectors.hh +0 -438
  887. data/ext/gecode-2.1.1/gecode/set/projectors/formula.cc +0 -312
  888. data/ext/gecode-2.1.1/gecode/set/rel-op/common.icc +0 -557
  889. data/ext/gecode-2.1.1/gecode/set/rel-op/inter.icc +0 -409
  890. data/ext/gecode-2.1.1/gecode/set/rel/re-subset.icc +0 -172
  891. data/ext/gecode-2.1.1/gecode/set/select.cc +0 -135
  892. data/ext/gecode-2.1.1/gecode/set/select.hh +0 -233
  893. data/ext/gecode-2.1.1/gecode/set/select/disjoint.cc +0 -308
  894. data/ext/gecode-2.1.1/gecode/set/select/disjoint.icc +0 -75
  895. data/ext/gecode-2.1.1/gecode/set/select/idxarray.hh +0 -113
  896. data/ext/gecode-2.1.1/gecode/set/select/idxarray.icc +0 -155
  897. data/ext/gecode-2.1.1/gecode/set/select/inter.icc +0 -349
  898. data/ext/gecode-2.1.1/gecode/set/select/union.icc +0 -371
  899. data/ext/gecode-2.1.1/gecode/set/select/unionConst.icc +0 -334
  900. data/ext/gecode-2.1.1/gecode/set/var-imp/set.cc +0 -214
  901. data/ext/gecode-2.1.1/gecode/set/var/set.icc +0 -303
  902. data/ext/gecode-2.1.1/gecode/set/view.icc +0 -1503
  903. data/ext/gecode-2.1.1/gecode/set/view/complement.icc +0 -629
  904. data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +0 -158
  905. data/ext/gecode-2.1.1/gecode/support/config.icc.in +0 -80
  906. data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +0 -122
  907. data/ext/gecode-2.1.1/gecode/support/symbol.cc +0 -226
  908. data/ext/gecode-2.1.1/gecode/support/symbol.icc +0 -130
  909. data/ext/gecode-2.1.1/misc/gecode-gist.pc.in +0 -45
  910. data/ext/gecode-2.1.1/misc/gecode-minimodel.pc.in +0 -45
  911. data/ext/gecode-2.1.1/misc/gecode-search.pc.in +0 -45
  912. data/ext/gecode-2.1.1/misc/gecode-serialization.pc.in +0 -45
  913. data/ext/gecode-2.1.1/misc/gecode.pc.in +0 -45
  914. data/ext/gecode-2.1.1/misc/genstatistics.perl +0 -178
  915. data/ext/gecode-2.1.1/misc/genvariables.perl +0 -905
  916. data/lib/gecoder/interface/constraints/set_enum/select.rb +0 -79
  917. data/lib/gecoder/interface/model.rb +0 -453
  918. data/lib/gecoder/interface/model_sugar.rb +0 -84
  919. data/specs/constraints/set_enum/select.rb +0 -73
@@ -1,2295 +0,0 @@
1
- /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
- /*
3
- * Main authors:
4
- * Christian Schulte <schulte@gecode.org>
5
- * Guido Tack <tack@gecode.org>
6
- * Mikael Lagerkvist <lagerkvist@gecode.org>
7
- *
8
- * Copyright:
9
- * Christian Schulte, 2002
10
- * Guido Tack, 2003
11
- * Mikael Lagerkvist, 2006
12
- *
13
- * Bugfixes provided by:
14
- * Alexander Samoilov <alexander_samoilov@yahoo.com>
15
- *
16
- * Last modified:
17
- * $Date: 2008-02-28 09:12:58 +0100 (Thu, 28 Feb 2008) $ by $Author: tack $
18
- * $Revision: 6338 $
19
- *
20
- * This file is part of Gecode, the generic constraint
21
- * development environment:
22
- * http://www.gecode.org
23
- *
24
- * Permission is hereby granted, free of charge, to any person obtaining
25
- * a copy of this software and associated documentation files (the
26
- * "Software"), to deal in the Software without restriction, including
27
- * without limitation the rights to use, copy, modify, merge, publish,
28
- * distribute, sublicense, and/or sell copies of the Software, and to
29
- * permit persons to whom the Software is furnished to do so, subject to
30
- * the following conditions:
31
- *
32
- * The above copyright notice and this permission notice shall be
33
- * included in all copies or substantial portions of the Software.
34
- *
35
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
36
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
37
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
38
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
39
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
40
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
41
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
42
- *
43
- */
44
-
45
- namespace Gecode {
46
-
47
- class Space;
48
-
49
- /**
50
- * \defgroup FuncSupportShared Support for shared objects and handles
51
- *
52
- * Shared handles provide access to reference-counted objects
53
- * used by entities inside spaces. In particular, they support
54
- * updates with and without sharing. An update with sharing
55
- * just updates the handle. An update without sharing creates
56
- * a single copy per space during updating.
57
- *
58
- * \ingroup FuncSupport
59
- */
60
-
61
- /**
62
- * \brief The shared handle
63
- *
64
- * Shared handles must inherit from this base class where
65
- * \a Object must be a subclass of SharedObject. Shared
66
- * handles support that the handle has no object it currently
67
- * refers to.
68
- *
69
- * \ingroup FuncSupportShared
70
- */
71
- class SharedHandle {
72
- public:
73
- /**
74
- * \brief The shared object
75
- *
76
- * Shared objects must inherit from this base class.
77
- *
78
- * \ingroup FuncSupportShared
79
- */
80
- class Object {
81
- friend class Space;
82
- friend class SharedHandle;
83
- private:
84
- /// The counter used for reference counting
85
- unsigned int use_cnt;
86
- /// The next shared object collected during copying
87
- Object* next;
88
- /// The forwarding pointer used for forwarding
89
- Object* fwd;
90
- public:
91
- /// Initialize
92
- Object(void);
93
- /// Return fresh copy for unshared update
94
- virtual Object* copy(void) const = 0;
95
- /// Delete shared object
96
- virtual ~Object(void);
97
- /// Allocate memory from heap
98
- static void* operator new(size_t s);
99
- /// Free memory allocated from heap
100
- static void operator delete(void* p);
101
- };
102
- private:
103
- /// The shared object
104
- Object* o;
105
- /// Subscribe handle to object
106
- void subscribe(void);
107
- /// Cancel subscription of handle to object
108
- void cancel(void);
109
- public:
110
- /// Create shared handle with no object pointing to
111
- SharedHandle(void);
112
- /// Create shared handle that points to shared object \a so
113
- SharedHandle(Object* so);
114
- /// Copy constructor maintaining reference count
115
- SharedHandle(const SharedHandle& sh);
116
- /// Assignment operator mainitaining reference count
117
- SharedHandle& operator=(const SharedHandle& sh);
118
- /// Updating during cloning
119
- void update(Space* home, bool share, SharedHandle& sh);
120
- /// Destructor that maintains reference count
121
- ~SharedHandle(void);
122
- protected:
123
- /// Access to the shared object
124
- Object* object(void) const;
125
- /// Modify shared object
126
- void object(Object* n);
127
- };
128
-
129
-
130
- /**
131
- * \defgroup TaskVarMEPC Generic modification events and propagation conditions
132
- *
133
- * Predefined modification events must be taken into account
134
- * by variable types.
135
- * \ingroup TaskVar
136
- */
137
- //@{
138
- /// Type for modification events
139
- typedef int ModEvent;
140
-
141
- /// Generic modification event: failed variable
142
- const ModEvent ME_GEN_FAILED = -1;
143
- /// Generic modification event: no modification
144
- const ModEvent ME_GEN_NONE = 0;
145
- /// Generic modification event: variable is assigned a value
146
- const ModEvent ME_GEN_ASSIGNED = 1;
147
-
148
- /// Type for propagation conditions
149
- typedef int PropCond;
150
- /// Propagation condition to be ignored (convenience)
151
- const PropCond PC_GEN_NONE = -1;
152
- /// Propagation condition for an assigned variable
153
- const PropCond PC_GEN_ASSIGNED = 0;
154
- //@}
155
-
156
- /**
157
- * \brief Modification event deltas
158
- *
159
- * Modification event deltas are used by propagators. A
160
- * propagator stores a modification event for each variable type.
161
- * They can be accessed through a variable or a view from a given
162
- * propagator. They can be constructed from a given modevent by
163
- * a variable or view.
164
- * \ingroup TaskActor
165
- */
166
- typedef int ModEventDelta;
167
-
168
- }
169
-
170
- #include "gecode/kernel/var-type.icc"
171
-
172
- namespace Gecode {
173
-
174
- /// Configuration class for variable implementations without index structure
175
- class NoIdxVarImpConf {
176
- public:
177
- /// Index for update
178
- static const int idx_c = -1;
179
- /// Index for disposal
180
- static const int idx_d = -1;
181
- /// Maximal propagation condition
182
- static const PropCond pc_max = PC_GEN_ASSIGNED;
183
- /// Freely available bits
184
- static const int free_bits = 0;
185
- /// Start of bits for modification event delta
186
- static const int med_fst = 0;
187
- /// End of bits for modification event delta
188
- static const int med_lst = 0;
189
- /// Bitmask for modification event delta
190
- static const int med_mask = 0;
191
- /// Combine modification events \a me1 and \a me2
192
- static Gecode::ModEvent me_combine(ModEvent me1, ModEvent me2);
193
- /// Update modification even delta \a med by \a me, return true on change
194
- static bool med_update(ModEventDelta& med, ModEvent me);
195
- /// Variable type identifier for reflection
196
- static GECODE_KERNEL_EXPORT const Support::Symbol vti;
197
- };
198
-
199
- forceinline ModEvent
200
- NoIdxVarImpConf::me_combine(ModEvent, ModEvent) {
201
- GECODE_NEVER; return 0;
202
- }
203
- forceinline bool
204
- NoIdxVarImpConf::med_update(ModEventDelta&, ModEvent) {
205
- GECODE_NEVER; return false;
206
- }
207
-
208
-
209
- /*
210
- * These are the classes of interest
211
- *
212
- */
213
- class ActorLink;
214
- class Actor;
215
- class Propagator;
216
- class Advisor;
217
- template <class A> class Council;
218
- template <class A> class Advisors;
219
- template <class VIC> class VarImp;
220
-
221
-
222
- /*
223
- * Variable implementations
224
- *
225
- */
226
-
227
- /**
228
- * \brief Base-class for variable implementations
229
- *
230
- * Serves as base-class that can be used without having to know any
231
- * template arguments.
232
- * \ingroup TaskVar
233
- */
234
- class VarImpBase {};
235
-
236
- /**
237
- * \brief Base class for %Variable type disposer
238
- *
239
- * Controls disposal of variable implementations.
240
- * \ingroup TaskVar
241
- */
242
- class GECODE_VTABLE_EXPORT VarDisposerBase {
243
- public:
244
- /// Dispose list of variable implementations starting at \a x
245
- GECODE_KERNEL_EXPORT virtual void dispose(Space* home, VarImpBase* x);
246
- /// Destructor (not used)
247
- GECODE_KERNEL_EXPORT virtual ~VarDisposerBase(void);
248
- };
249
-
250
- /**
251
- * \brief %Variable type disposer
252
- *
253
- * Controls disposal of variables.
254
- * \ingroup TaskVar
255
- */
256
- template <class VarType>
257
- class VarDisposer : public VarDisposerBase {
258
- public:
259
- /// Constructor (registers disposer with kernel)
260
- VarDisposer(void);
261
- /// Dispose list of variable implementations starting at \a x
262
- virtual void dispose(Space* home, VarImpBase* x);
263
- };
264
-
265
- /// Generic domain change information to be supplied to advisors
266
- class Delta {
267
- template <class VIC> friend class VarImp;
268
- private:
269
- /// Modification event
270
- ModEvent me;
271
- public:
272
- /// Return modification event
273
- ModEvent modevent(void) const;
274
- };
275
-
276
- /**
277
- * \brief Base-class for variable implementations
278
- *
279
- * Implements variable implementation for variable implementation
280
- * configuration of type \a VIC.
281
- * \ingroup TaskVar
282
- */
283
- template <class VIC>
284
- class VarImp : public VarImpBase {
285
- friend class Space;
286
- friend class Propagator;
287
- template <class VarType> friend class VarDisposer;
288
- private:
289
- /// Index for update
290
- static const int idx_c = VIC::idx_c;
291
- /// Index for disposal
292
- static const int idx_d = VIC::idx_d;
293
- /// Number of freely available bits
294
- static const int free_bits = VIC::free_bits;
295
- /// Number of free subscription entries
296
- unsigned int free_and_bits;
297
- /// Maximal propagation condition
298
- static const Gecode::PropCond pc_max = VIC::pc_max;
299
- /**
300
- * \brief Subscribed actors (idx[pc])
301
- *
302
- * The entries from idx[0] to idx[pc_max+1] are propagators,
303
- * where the entries between idx[pc] and idx[pc+1] are
304
- * the propagators that have subscribed with propagation condition pc.
305
- *
306
- * The entries between idx[pc_max+1] and idx[pc_max+2] are the
307
- * advisors subscribed to the variable implementation.
308
- *
309
- * During cloning, the first two entries in the original are used
310
- * as follows (the original values are stored in the copy).
311
- * - idx[0] is used as forwarding pointer (a marked pointer)
312
- * - idx[1] points to the next copied variable
313
- */
314
- ActorLink** idx[pc_max+3];
315
-
316
- /**
317
- * \brief Update copied variable \a x
318
- *
319
- * The argument \a sub gives the memory area where subscriptions are
320
- * to be stored.
321
- */
322
- void update(VarImp* x, ActorLink**& sub);
323
- /**
324
- * \brief Update all copied variables of this type
325
- *
326
- * The argument \a sub gives the memory area where subscriptions are
327
- * to be stored.
328
- */
329
- static void update(Space* home, ActorLink**& sub);
330
-
331
- /// Enter propagator or advisor to subscription array
332
- void enter(Space* home, ActorLink* a, PropCond pc);
333
- /// Resize subscription array
334
- void resize(Space* home);
335
- /// Remove propagator or advisor from subscription array
336
- void remove(Space* home, ActorLink* a, PropCond pc);
337
-
338
- protected:
339
- #ifdef GECODE_HAS_VAR_DISPOSE
340
- /// Return reference to variables (dispose)
341
- static VarImp<VIC>* vars_d(Space* home);
342
- /// Set reference to variables (dispose)
343
- static void vars_d(Space* home, VarImp<VIC>* x);
344
- #endif
345
-
346
- public:
347
- /// Creation
348
- VarImp(Space* home);
349
- /// Creation of static instances
350
- VarImp(void);
351
-
352
- /// \name Dependencies
353
- //@{
354
- /** \brief Subscribe propagator \a p with propagation condition \a pc
355
- *
356
- * In case \a schedule is false, the propagator is just subscribed but
357
- * not scheduled for execution (this must be used when creating
358
- * subscriptions during propagation).
359
- *
360
- * In case the variable is assigned (that is, \a assigned is
361
- * true), the subscribing propagator is scheduled for execution.
362
- * Otherwise, the propagator subscribes and is scheduled for execution
363
- * with modification event \a me provided that \a pc is different
364
- * from \a PC_GEN_ASSIGNED.
365
- */
366
- void subscribe(Space* home, Propagator* p, PropCond pc,
367
- bool assigned, ModEvent me, bool schedule);
368
- /** \brief Cancel subscription of propagator \a p with propagation condition \a pc
369
- *
370
- * If the variable is assigned, \a assigned must be true.
371
- *
372
- */
373
- void cancel(Space* home, Propagator* p, PropCond pc,
374
- bool assigned);
375
- /** \brief Subscribe advisor \a a to variable
376
- *
377
- * The advisor \a a is only subscribed if \a assigned is false.
378
- *
379
- */
380
- void subscribe(Space* home, Advisor* a, bool assigned);
381
- /** \brief Cancel subscription of advisor \a a
382
- *
383
- * If the variable is assigned, \a assigned must be true.
384
- *
385
- */
386
- void cancel(Space* home, Advisor* p, bool assigned);
387
- /// Cancel all subscriptions when variable implementation is assigned
388
- void cancel(Space* home);
389
- /**
390
- * \brief Return degree (number of subscribed propagators and advisors)
391
- *
392
- * Note that the degree of a variable implementation is not available
393
- * during copying.
394
- */
395
- unsigned int degree(void) const;
396
- /**
397
- * \brief Run advisors when variable implementation has been modified with modification event \a me and domain change \a d
398
- *
399
- * Returns false if an advisor has failed.
400
- */
401
- bool advise(Space* home, ModEvent me, Delta* d);
402
- //@}
403
-
404
- /// \name Cloning variables
405
- //@{
406
- /// Constructor for cloning
407
- VarImp(Space* home, bool share, VarImp& x);
408
- /// Is variable already copied
409
- bool copied(void) const;
410
- /// Use forward pointer if variable already copied
411
- VarImp* forward(void) const;
412
- /// Return next copied variable
413
- VarImp* next(void) const;
414
- //@}
415
-
416
- /// \name Variable implementation-dependent propagator support
417
- //@{
418
- /// Schedule propagator \a p with modification event \a me
419
- static void schedule(Space* home, Propagator* p, ModEvent me);
420
- /// Project modification event for this variable type from \a med
421
- static ModEvent me(ModEventDelta med);
422
- /// Translate modification event \a me into modification event delta
423
- static ModEventDelta med(ModEvent me);
424
- /// Combine modifications events \a me1 and \a me2
425
- static ModEvent me_combine(ModEvent me1, ModEvent me2);
426
- //@}
427
-
428
- /// Provide access to free bits
429
- unsigned int bits(void) const;
430
- /// Provide access to free bits
431
- unsigned int& bits(void);
432
-
433
- protected:
434
- /// Schedule subscribed propagators
435
- void schedule(Space* home, PropCond pc1, PropCond pc2, ModEvent me);
436
-
437
- public:
438
- /// \name Memory management
439
- //@{
440
- /// Allocate memory from space
441
- static void* operator new(size_t,Space*);
442
- /// Return memory to space
443
- static void operator delete(void*,Space*);
444
- /// Needed for exceptions
445
- static void operator delete(void*);
446
- //@}
447
-
448
- /// \name Reflection
449
- //@{
450
- /// Variable type identifier
451
- static const Support::Symbol vti;
452
- //@}
453
-
454
- };
455
-
456
- template <class VIC>
457
- const Support::Symbol
458
- VarImp<VIC>::vti = VIC::vti;
459
-
460
-
461
- namespace Reflection {
462
- class ActorSpecIter;
463
- class ActorSpec;
464
- class BranchingSpec;
465
- class VarMap;
466
- }
467
-
468
- /**
469
- * \defgroup TaskActorStatus Status of constraint propagation and branching commit
470
- * Note that the enum values starting with a double underscore should not
471
- * be used directly. Instead, use the provided functions with the same
472
- * name without leading underscores.
473
- *
474
- * \ingroup TaskActor
475
- */
476
- enum ExecStatus {
477
- __ES_SUBSUMED = -2, ///< Internal: propagator is subsumed, do not use
478
- ES_FAILED = -1, ///< Execution has resulted in failure
479
- ES_NOFIX = 0, ///< Propagation has not computed fixpoint
480
- ES_OK = 0, ///< Execution is okay
481
- ES_FIX = 1, ///< Propagation has computed fixpoint
482
- __ES_PARTIAL = 2, ///< Internal: propagator has computed partial fixpoint, do not use
483
- };
484
-
485
- /**
486
- * \brief Classification of propagation cost
487
- * \ingroup TaskActor
488
- */
489
- enum PropCost {
490
- PC_CRAZY_LO = 0, ///< Exponential complexity, cheap
491
- PC_CRAZY_HI = 0, ///< Exponential complexity, expensive
492
- PC_CUBIC_LO = 1, ///< Cubic complexity, cheap
493
- PC_CUBIC_HI = 1, ///< Cubic complexity, expensive
494
- PC_QUADRATIC_LO = 2, ///< Quadratic complexity, cheap
495
- PC_QUADRATIC_HI = 2, ///< Quadratic complexity, expensive
496
- PC_LINEAR_HI = 3, ///< Linear complexity, expensive
497
- PC_LINEAR_LO = 4, ///< Linear complexity, cheap
498
- PC_TERNARY_HI = 5, ///< Three variables, expensive
499
- PC_BINARY_HI = 6, ///< Two variables, expensive
500
- PC_TERNARY_LO = 6, ///< Three variables, cheap
501
- PC_BINARY_LO = 7, ///< Two variables, cheap
502
- PC_UNARY_LO = 7, ///< Only single variable, cheap
503
- PC_UNARY_HI = 7, ///< Only single variable, expensive
504
- PC_MAX = 7 ///< Maximal cost value
505
- };
506
-
507
- /**
508
- * \brief Double-linked list for actors
509
- *
510
- * Used to maintain which actors belong to a space and also
511
- * (for propagators) to organize actors in the queue of
512
- * waiting propagators.
513
- */
514
- class ActorLink {
515
- friend class Actor;
516
- friend class Propagator;
517
- friend class Advisor;
518
- friend class Branching;
519
- friend class Space;
520
- template <class VIC> friend class VarImp;
521
- private:
522
- ActorLink* _next; ActorLink* _prev;
523
- public:
524
- //@{
525
- /// Routines for double-linked list
526
- ActorLink* prev(void) const; void prev(ActorLink*);
527
- ActorLink* next(void) const; void next(ActorLink*);
528
- ActorLink** next_ref(void);
529
- //@}
530
-
531
- /// Initialize links (self-linked)
532
- void init(void);
533
- /// Remove from predecessor and successor
534
- void unlink(void);
535
- /// Insert \a al directly after this
536
- void head(ActorLink* al);
537
- /// Insert \a al directly before this
538
- void tail(ActorLink* al);
539
- /// Static cast for a non-null pointer (to give a hint to optimizer)
540
- template <class T> static ActorLink* cast(T* a);
541
- /// Static cast for a non-null pointer (to give a hint to optimizer)
542
- template <class T> static const ActorLink* cast(const T* a);
543
- };
544
-
545
-
546
- /**
547
- * \brief Base-class for both propagators and branchings
548
- * \ingroup TaskActor
549
- */
550
- class GECODE_VTABLE_EXPORT Actor : private ActorLink {
551
- friend class ActorLink;
552
- friend class Space;
553
- friend class Propagator;
554
- friend class Advisor;
555
- friend class Branching;
556
- friend class Reflection::ActorSpecIter;
557
- template <class VIC> friend class VarImp;
558
- template <class A> friend class Council;
559
- private:
560
- /// Static cast for a non-null pointer (to give a hint to optimizer)
561
- static Actor* cast(ActorLink* al);
562
- /// Static cast for a non-null pointer (to give a hint to optimizer)
563
- static const Actor* cast(const ActorLink* al);
564
- public:
565
- /// Create copy
566
- virtual Actor* copy(Space*,bool) = 0;
567
-
568
- /// \name Memory management
569
- //@{
570
- /// Report size occupied by additionally datastructures
571
- GECODE_KERNEL_EXPORT
572
- virtual size_t allocated(void) const;
573
- /// Delete actor and return its size
574
- GECODE_KERNEL_EXPORT
575
- virtual size_t dispose(Space* home);
576
- /// Register actor for forced dispose when \a home is deleted
577
- void force(Space* home);
578
- /// Deregister actor for forced dispose
579
- void unforce(Space* home);
580
- /// Allocate memory from space
581
- static void* operator new(size_t s, Space* home);
582
- /// No-op for exceptions
583
- static void operator delete(void* p, Space* home);
584
- /// Return specification for this actor given a variable map \a m
585
- GECODE_KERNEL_EXPORT
586
- virtual Reflection::ActorSpec spec(const Space* home,
587
- Reflection::VarMap& m) const;
588
- private:
589
- #ifndef __GNUC__
590
- /// Not used (uses dispose instead)
591
- static void operator delete(void* p);
592
- #endif
593
- /// Not used
594
- static void* operator new(size_t s);
595
- //@}
596
- #ifdef __GNUC__
597
- public:
598
- /// To avoid warnings from GCC
599
- GECODE_KERNEL_EXPORT virtual ~Actor(void);
600
- /// Not used (uses dispose instead)
601
- static void operator delete(void* p);
602
- #endif
603
- };
604
-
605
-
606
- /**
607
- * \brief %Propagator \a p is subsumed
608
- *
609
- * The size of the propagator is \a s.
610
- *
611
- * Note that the propagator must be subsumed and also disposed. So
612
- * in general, there should be code such as
613
- * \code return ES_SUBSUMED(this,dispose(home)) \endcode.
614
- *
615
- * However, in case the propagator has nothing to dispose (all its
616
- * views are assigned and no external resources) it is sufficient
617
- * to do
618
- * \code return ES_SUBSUMED(this,sizeof(*this)) \endcode.
619
- *
620
- * \warning Has a side-effect on the propagator. Overwrites
621
- * the modification event delta of a propagator.
622
- * Use only directly with returning from propagation.
623
- * \ingroup TaskActorStatus
624
- */
625
- ExecStatus ES_SUBSUMED(Propagator* p, size_t s);
626
- /**
627
- * \brief %Propagator \a p is subsumed
628
- *
629
- * First disposes the propagator and then returns subsumption.
630
- *
631
- * \warning Has a side-effect on the propagator. Overwrites
632
- * the modification event delta of a propagator.
633
- * Use only directly with returning from propagation.
634
- * \ingroup TaskActorStatus
635
- */
636
- ExecStatus ES_SUBSUMED(Propagator* p, Space* home);
637
- /**
638
- * \brief %Propagator \a p has computed partial fixpoint
639
- *
640
- * %Set modification event delta to \a med and schedule propagator
641
- * accordingly.
642
- *
643
- * \warning Has a side-effect on the propagator.
644
- * Use only directly with returning from propagation.
645
- * \ingroup TaskActorStatus
646
- */
647
- ExecStatus ES_FIX_PARTIAL(Propagator* p, ModEventDelta med);
648
- /**
649
- * \brief %Propagator \a p has not computed partial fixpoint
650
- *
651
- * Combine current modification event delta with \a and schedule
652
- * propagator accordingly.
653
- *
654
- * \warning Has a side-effect on the propagator.
655
- * Use only directly with returning from propagation.
656
- * \ingroup TaskActorStatus
657
- */
658
- ExecStatus ES_NOFIX_PARTIAL(Propagator* p, ModEventDelta med);
659
-
660
- /**
661
- * \brief Base-class for propagators
662
- * \ingroup TaskActor
663
- */
664
- class GECODE_VTABLE_EXPORT Propagator : public Actor {
665
- friend class ActorLink;
666
- friend class Space;
667
- template <class VIC> friend class VarImp;
668
- friend ExecStatus ES_SUBSUMED(Propagator*, size_t);
669
- friend ExecStatus ES_SUBSUMED(Propagator*, Space*);
670
- friend ExecStatus ES_FIX_PARTIAL(Propagator*, ModEventDelta);
671
- friend ExecStatus ES_NOFIX_PARTIAL(Propagator*, ModEventDelta);
672
- friend class Advisor;
673
- template <class A> friend class Council;
674
- private:
675
- union {
676
- /// A set of modification events (used during propagation)
677
- ModEventDelta med;
678
- /// The size of the propagator (used during subsumption)
679
- size_t size;
680
- /// A list of advisors (used during cloning)
681
- Gecode::ActorLink* advisors;
682
- } u;
683
- /// Static cast for a non-null pointer (to give a hint to optimizer)
684
- static Propagator* cast(ActorLink* al);
685
- /// Static cast for a non-null pointer (to give a hint to optimizer)
686
- static const Propagator* cast(const ActorLink* al);
687
- protected:
688
- /// Constructor for creation
689
- Propagator(Space* home);
690
- /// Constructor for cloning \a p
691
- Propagator(Space* home, bool share, Propagator& p);
692
-
693
- public:
694
- /// \name Propagation
695
- //@{
696
- /**
697
- * \brief Propagation function
698
- *
699
- * The propagation function must return an execution status as
700
- * follows:
701
- * - ES_FAILED: the propagator has detected failure
702
- * - ES_NOFIX: the propagator has done propagation
703
- * - ES_FIX: the propagator has done propagation and has computed
704
- * a fixpoint. That is, running the propagator immediately
705
- * again will do nothing.
706
- *
707
- * Apart from the above values, a propagator can return
708
- * the result from calling one of the functions
709
- * - ES_SUBSUMED: the propagator is subsumed and has been already
710
- * deleted.
711
- * - ES_NOFIX_PARTIAL: the propagator has consumed some of its
712
- * propagation events.
713
- * - ES_FIX_PARTIAL: the propagator has consumed some of its
714
- * propagation events and with respect to these events is
715
- * at fixpoint
716
- * For more details, see the individual functions.
717
- *
718
- */
719
- virtual ExecStatus propagate(Space* home, ModEventDelta med) = 0;
720
- /// Cost function
721
- virtual PropCost cost(ModEventDelta med) const = 0;
722
- /**
723
- * \brief Advise function
724
- *
725
- * The advisor is passed as argument \a a.
726
- *
727
- * A propagator must specialize this advise function, if it
728
- * uses advisors. The advise function must return an execution
729
- * status as follows:
730
- * - ES_FAILED: the advisor has detected failure
731
- * - ES_NOFIX: the advisor's propagator (that is, this propagator)
732
- * does not need to be run
733
- * - ES_FIX: the advisor's propagator (that is, this propagator)
734
- * must be run
735
- *
736
- * Apart from the above values, an advisor can return
737
- * the result from calling the function
738
- * - ES_SUBSUMED_NOFIX: the advisor is subsumed, the advisor's
739
- * propagator does not need to be run
740
- * - ES_SUBSUMED_FIX: the advisor is subsumed, the advisor's
741
- * propagator does not need to be run
742
- * For more details, see the function documentation.
743
- *
744
- * The delta \a d describes how the variable has been changed
745
- * by an operation on the advisor's variable. Typically,
746
- * the delta information can only be utilized by either
747
- * static or member functions of views as the actual delta
748
- * information is both domain and view dependent.
749
- *
750
- */
751
- GECODE_KERNEL_EXPORT
752
- virtual ExecStatus advise(Space* home, Advisor* a, const Delta* d);
753
- //@}
754
- };
755
-
756
-
757
- /**
758
- * \brief Council of advisors
759
- *
760
- * If a propagator uses advisors, it must maintain its advisors
761
- * through a council.
762
- * \ingroup TaskActor
763
- */
764
- template <class A>
765
- class Council {
766
- friend class Advisor;
767
- friend class Advisors<A>;
768
- private:
769
- /// Starting point for a linked list of advisors
770
- mutable ActorLink* advisors;
771
- public:
772
- /// Default constructor
773
- Council(void);
774
- /// Construct advisor council
775
- Council(Space* home);
776
- /// Test whether council has advisor left
777
- bool empty(void) const;
778
- /// Update during cloning (copies all advisors)
779
- void update(Space* home, bool share, Council<A>& c);
780
- /// Dispose council
781
- void dispose(Space* home);
782
- };
783
-
784
-
785
- /**
786
- * \brief Class to iterate over advisors of a council
787
- * \ingroup TaskActor
788
- */
789
- template <class A>
790
- class Advisors {
791
- private:
792
- /// The current advisor
793
- ActorLink* a;
794
- public:
795
- /// Initialize
796
- Advisors(const Council<A>& c);
797
- /// Test whether there advisors left
798
- bool operator()(void) const;
799
- /// Move iterator to next advisor
800
- void operator++(void);
801
- /// Return advisor
802
- A* advisor(void) const;
803
- };
804
-
805
-
806
- /**
807
- * \brief %Advisor \a a is subsumed
808
- *
809
- * Disposes the advisor and:
810
- * - returns subsumption.
811
- * - returns that the propagator of \a a need not be run.
812
- *
813
- * \warning Has a side-effect on the advisor. Use only directly when
814
- * returning from advise.
815
- * \ingroup TaskActorStatus
816
- */
817
- template <class A>
818
- ExecStatus ES_SUBSUMED_FIX(A* a, Space* home, Council<A>& c);
819
- /**
820
- * \brief %Advisor \a a is subsumed
821
- *
822
- * Disposes the advisor and:
823
- * - returns subsumption.
824
- * - returns that the propagator of \a a must be run.
825
- *
826
- * \warning Has a side-effect on the advisor. Use only directly when
827
- * returning from advise.
828
- * \ingroup TaskActorStatus
829
- */
830
- template <class A>
831
- ExecStatus ES_SUBSUMED_NOFIX(A* a, Space* home, Council<A>& c);
832
-
833
- /**
834
- * \brief Base-class for advisors
835
- *
836
- * Advisors are typically subclassed for each propagator that
837
- * wants to use advisors. The actual member function that
838
- * is executed when a variable is changed, must be implemented
839
- * by the advisor's propagator.
840
- *
841
- * \ingroup TaskActor
842
- */
843
- class Advisor : private ActorLink {
844
- template <class VIC> friend class VarImp;
845
- template <class A> friend class Council;
846
- template <class A> friend class Advisors;
847
- private:
848
- /// Is the advisor disposed?
849
- bool disposed(void) const;
850
- protected:
851
- /// Return the advisor's propagator
852
- Propagator* propagator(void) const;
853
- public:
854
- /// Constructor for creation
855
- template <class A>
856
- Advisor(Space* home, Propagator* p, Council<A>& c);
857
- /// Copying constructor
858
- Advisor(Space* home, bool share, Advisor& a);
859
-
860
- /// \name Memory management
861
- //@{
862
- /// Dispose the advisor
863
- template <class A>
864
- void dispose(Space* home, Council<A>& c);
865
- /// Allocate memory from space
866
- static void* operator new(size_t s, Space* home);
867
- /// No-op for exceptions
868
- static void operator delete(void* p, Space* home);
869
- //@}
870
- private:
871
- #ifndef __GNUC__
872
- /// Not used (uses dispose instead)
873
- static void operator delete(void* p);
874
- #endif
875
- /// Not used
876
- static void* operator new(size_t s);
877
- };
878
-
879
-
880
- class Branching;
881
-
882
- /**
883
- * \brief Branch description for batch recomputation
884
- *
885
- * Must be refined by inheritance such that the information stored
886
- * inside a branching description is sufficient to redo a tell
887
- * performed by a particular branching.
888
- *
889
- * \ingroup TaskActor
890
- */
891
- class BranchingDesc {
892
- friend class Space;
893
- friend class Reflection::BranchingSpec;
894
- private:
895
- unsigned int _id; ///< Identity to match creating branching
896
- unsigned int _alt; ///< Number of alternatives
897
-
898
- /// Return id of the creating branching
899
- unsigned int id(void) const;
900
- protected:
901
- /// Initialize for particular branching \a b and alternatives \a a
902
- BranchingDesc(const Branching* b, const unsigned int a);
903
- public:
904
- /// Return number of alternatives
905
- unsigned int alternatives(void) const;
906
- /// Destructor
907
- GECODE_KERNEL_EXPORT virtual ~BranchingDesc(void);
908
- /// Report size occupied by branching description
909
- virtual size_t size(void) const = 0;
910
- /// Allocate memory from heap
911
- static void* operator new(size_t);
912
- /// Return memory to heap
913
- static void operator delete(void*);
914
- };
915
-
916
- /**
917
- * \brief Base-class for branchings
918
- *
919
- * Note that branchings cannot be created inside a propagator
920
- * (no idea why one would like to do that anyway). If you do that
921
- * the system will explode in a truly interesting way.
922
- *
923
- * \ingroup TaskActor
924
- */
925
- class GECODE_VTABLE_EXPORT Branching : public Actor {
926
- friend class ActorLink;
927
- friend class Space;
928
- friend class BranchingDesc;
929
- friend class Reflection::ActorSpecIter;
930
- private:
931
- /// Unique identity (to match to branching descriptions)
932
- unsigned int id;
933
- /// Static cast for a non-null pointer (to give a hint to optimizer)
934
- static Branching* cast(ActorLink* al);
935
- /// Static cast for a non-null pointer (to give a hint to optimizer)
936
- static const Branching* cast(const ActorLink* al);
937
- protected:
938
- /// Constructor for creation
939
- Branching(Space* home);
940
- /// Constructor for cloning \a b
941
- Branching(Space* home, bool share, Branching& b);
942
-
943
- public:
944
- /// \name Branching
945
- //@{
946
- /**
947
- * \brief Check status of branching, return true if alternatives left
948
- *
949
- * This method is called when Space::status is called, it determines
950
- * whether to continue branching with this branching or move on to
951
- * the (possibly) next branching.
952
- *
953
- */
954
- virtual bool status(const Space* home) const = 0;
955
- /**
956
- * \brief Return branching description
957
- *
958
- * Note that this method can rely on the fact that it is called
959
- * immediately after a previous call to status. Hence, it is safe
960
- * to remember computation from status in order to speed up
961
- * description.
962
- *
963
- */
964
- virtual const BranchingDesc* description(const Space* home) const = 0;
965
- /**
966
- * \brief Commit for branching description \a d and alternative \a a
967
- *
968
- * The current branching in the space \a home performs a commit from
969
- * the information provided by the branching description \a d
970
- * and the alternative \a a.
971
- */
972
- virtual ExecStatus commit(Space* home, const BranchingDesc* d,
973
- unsigned int a) = 0;
974
- //@}
975
-
976
- /// \name Reflection
977
- //@{
978
- /// Specification for BranchingDesc \a d
979
- virtual GECODE_KERNEL_EXPORT Reflection::BranchingSpec
980
- branchingSpec(const Space* home,
981
- Reflection::VarMap& m, const BranchingDesc* d) const;
982
- //@}
983
- };
984
-
985
-
986
-
987
- /**
988
- * \brief %Space status
989
- * \ingroup TaskSearch
990
- */
991
- enum SpaceStatus {
992
- SS_FAILED, ///< %Space is failed
993
- SS_SOLVED, ///< %Space is solved (no branching left)
994
- SS_BRANCH ///< %Space must be branched (at least one branching left)
995
- };
996
-
997
- /**
998
- * \brief Computation spaces
999
- */
1000
- class GECODE_VTABLE_EXPORT Space {
1001
- friend class Actor;
1002
- friend class Propagator;
1003
- friend class Branching;
1004
- friend class Advisor;
1005
- friend class Reflection::ActorSpecIter;
1006
- template <class VIC> friend class VarImp;
1007
- template <class VarType> friend class VarDisposer;
1008
- friend class SharedHandle;
1009
- private:
1010
- /// Performs memory management for space
1011
- MemoryManager mm;
1012
- /**
1013
- * \brief Doubly linked list of all actors
1014
- *
1015
- * Propagators are stored at the beginning, branchings (if any) at
1016
- * the end.
1017
- */
1018
- ActorLink a_actors;
1019
- /**
1020
- * \brief Points to the first branching to be used for status
1021
- *
1022
- * If equal to &a_actors, no branching does exist.
1023
- */
1024
- Branching* b_status;
1025
- /**
1026
- * \brief Points to the first branching to be used for commit
1027
- *
1028
- * Note that \a b_commit can point to an earlier branching
1029
- * than \a b_status. This reflects the fact that the earlier
1030
- * branching is already done (that is, status on that branching
1031
- * returns false) but there might be still branching descriptions
1032
- * referring to the earlier branching.
1033
- *
1034
- * If equal to &a_actors, no branching does exist.
1035
- */
1036
- Branching* b_commit;
1037
- union {
1038
- /// Data only available during propagation
1039
- struct {
1040
- /**
1041
- * \brief Cost level with next propagator to be executed
1042
- *
1043
- * This maintains the following invariant (but only if the
1044
- * space does not perform propagation):
1045
- * - If active points to a queue, this queue might contain
1046
- * a propagator. However, there will be at least on queue
1047
- * containing a propagator.
1048
- * - Otherwise, active is smaller than the beginning of
1049
- * the queues. Then, the space is stable.
1050
- * - If active is NULL, the space is failed.
1051
- */
1052
- ActorLink* active;
1053
- /// Scheduled propagators according to cost
1054
- ActorLink queue[PC_MAX+1];
1055
- /// Id of next branching to be created
1056
- unsigned int branch_id;
1057
- /// Number of subscriptions
1058
- unsigned int n_sub;
1059
- } p;
1060
- /// Data available only during copying
1061
- struct {
1062
- /// Entries for updating variables
1063
- VarImpBase* vars_u[AllVarConf::idx_c];
1064
- /// Keep variables during copying without index structure
1065
- VarImpBase* vars_noidx;
1066
- /// Linked list of shared objects
1067
- SharedHandle::Object* shared;
1068
- } c;
1069
- } pc;
1070
- /// Put propagator \a p into right queue
1071
- void enqueue(Propagator* p);
1072
- /**
1073
- * \name update, and dispose variables
1074
- */
1075
- //@{
1076
- #ifdef GECODE_HAS_VAR_DISPOSE
1077
- /// Registered variable type disposers
1078
- GECODE_KERNEL_EXPORT static VarDisposerBase* vd[AllVarConf::idx_d];
1079
- /// Entries for disposing variables
1080
- VarImpBase* _vars_d[AllVarConf::idx_d];
1081
- /// Return reference to variables (dispose)
1082
- template <class VIC> VarImpBase* vars_d(void) const;
1083
- /// Set reference to variables (dispose)
1084
- template <class VIC> void vars_d(VarImpBase* x);
1085
- #endif
1086
- /// Update all cloned variables
1087
- void update(ActorLink** sub);
1088
- //@}
1089
-
1090
- /// First actor for forced disposal
1091
- Actor** d_fst;
1092
- /// Current actor for forced disposal
1093
- Actor** d_cur;
1094
- /// Last actor for forced disposal
1095
- Actor** d_lst;
1096
- /// Resize disposal array
1097
- GECODE_KERNEL_EXPORT void d_resize(void);
1098
-
1099
- /// Used for default arguments
1100
- GECODE_KERNEL_EXPORT static unsigned long int unused_uli;
1101
- public:
1102
- /**
1103
- * \brief Default constructor
1104
- * \ingroup TaskModelScript
1105
- */
1106
- GECODE_KERNEL_EXPORT Space(void);
1107
- /**
1108
- * \brief Destructor
1109
- * \ingroup TaskModelScript
1110
- */
1111
- GECODE_KERNEL_EXPORT virtual ~Space(void);
1112
- /**
1113
- * \brief Constructor for cloning
1114
- *
1115
- * Must copy and update all data structures (such as variables
1116
- * and variable arrays) required by the subclass of Space.
1117
- *
1118
- * If \a share is true, share all data structures among copies.
1119
- * Otherwise, make independent copies.
1120
- * \ingroup TaskModelScript
1121
- */
1122
- GECODE_KERNEL_EXPORT Space(bool share, Space& s);
1123
- /**
1124
- * \brief Copying member function
1125
- *
1126
- * Must create a new object using the constructor for cloning.
1127
- * \ingroup TaskModelScript
1128
- */
1129
- virtual Space* copy(bool share) = 0;
1130
- /**
1131
- * \brief Allocate memory from heap for new space
1132
- * \ingroup TaskModelScript
1133
- */
1134
- static void* operator new(size_t);
1135
- /**
1136
- * \brief Free memory allocated from heap
1137
- * \ingroup TaskModelScript
1138
- */
1139
- static void operator delete(void*);
1140
-
1141
-
1142
- /*
1143
- * Member functions for search engines
1144
- *
1145
- */
1146
-
1147
- /**
1148
- * \brief Query space status
1149
- *
1150
- * Propagates the space until fixpoint or failure and
1151
- * increments \a pn by the number of propagator executions.
1152
- * - if the space is failed, SpaceStatus::SS_FAILED is returned.
1153
- * - if the space is not failed but the space has no branching left,
1154
- * SpaceStatus::SS_SOLVED is returned.
1155
- * - otherwise, SpaceStatus::SS_BRANCH is returned.
1156
- * \ingroup TaskSearch
1157
- */
1158
- GECODE_KERNEL_EXPORT SpaceStatus status(unsigned long int& pn=unused_uli);
1159
-
1160
- /**
1161
- * \brief Create new branching description for current branching
1162
- *
1163
- * This member function can only be called after the member function
1164
- * Space::status on the same space has been called and in between
1165
- * no non-const member function has been called on this space.
1166
- *
1167
- * Note that the above invariant only pertains to calls of member
1168
- * functions of the same space. If the invariant is violated, the
1169
- * system is likely to crash (hopefully it does). In particular, if
1170
- * applied to a space with no current branching, the system will
1171
- * crash.
1172
- *
1173
- * \ingroup TaskSearch
1174
- */
1175
- const BranchingDesc* description(void) const;
1176
-
1177
- /**
1178
- * \brief Clone space
1179
- *
1180
- * Assumes that the space is stable and not failed. If the space is
1181
- * failed, an exception of type SpaceFailed is thrown. If the space
1182
- * is not stable, an exception of SpaceNotStable is thrown.
1183
- *
1184
- * Otherwise, a clone of the space is returned. If \a share is true,
1185
- * sharable datastructures are shared among the clone and the original
1186
- * space. If \a share is false, independent copies of the shared
1187
- * datastructures must be created. This means that a clone with no
1188
- * sharing can be used in a different thread without any interaction
1189
- * with the original space.
1190
- *
1191
- * \ingroup TaskSearch
1192
- */
1193
- GECODE_KERNEL_EXPORT Space* clone(bool share=true);
1194
-
1195
- /**
1196
- * \brief Commit branching description \a d and for alternative \a a
1197
- *
1198
- * The current branching in the space performs a commit from
1199
- * the information provided by the branching description \a d
1200
- * and the alternative \a a.
1201
- *
1202
- * Note that no propagation is perfomed (to support batch
1203
- * recomputation), in order to perform propagation the member
1204
- * function status must be used.
1205
- *
1206
- * Committing with branching descriptions must be carried
1207
- * out in the same order as the branch descriptions have been
1208
- * obtained by the member function Space::description().
1209
- *
1210
- * It is perfectly okay to add constraints interleaved with
1211
- * branching descriptions (provided they are in the right order).
1212
- * However, if propagation is performed by calling the member
1213
- * function status and then new branching descriptions are
1214
- * computed, these branching descriptions are different.
1215
- *
1216
- * Committing throws the following exceptions:
1217
- * - SpaceNoBranching, if the space has no current branching (it is
1218
- * already solved).
1219
- * - SpaceIllegalAlternative, if \a a is not smaller than the number
1220
- * of alternatives supported by the branching description \a d.
1221
- *
1222
- * \ingroup TaskSearch
1223
- */
1224
- GECODE_KERNEL_EXPORT void commit(const BranchingDesc* d, unsigned int a);
1225
-
1226
- /**
1227
- * \brief Fail space
1228
- *
1229
- * This is useful for failing outside of actors. Never use inside
1230
- * a propagate or commit member function. The system will crash!
1231
- * \ingroup TaskActor
1232
- */
1233
- void fail(void);
1234
- /**
1235
- * \brief Check whether space is failed
1236
- *
1237
- * Note that this does not perform propagation. This is useful
1238
- * for posting actors: only if a space is not yet failed, new
1239
- * actors are allowed to be created.
1240
- * \ingroup TaskActor
1241
- */
1242
- bool failed(void) const;
1243
- /**
1244
- * \brief Return if space is stable (at fixpoint or failed)
1245
- * \ingroup TaskActor
1246
- */
1247
- bool stable(void) const;
1248
- /**
1249
- * \brief Return number of propagators
1250
- *
1251
- * Note that this function takes linear time in the number of
1252
- * propagators.
1253
- */
1254
- GECODE_KERNEL_EXPORT unsigned int propagators(void) const;
1255
- /**
1256
- * \brief Return number of branchings
1257
- *
1258
- * Note that this function takes linear time in the number of
1259
- * branchings.
1260
- */
1261
- GECODE_KERNEL_EXPORT unsigned int branchings(void) const;
1262
-
1263
- /**
1264
- * \name Reflection
1265
- */
1266
- //@{
1267
- /// Enter variables into \a m
1268
- GECODE_KERNEL_EXPORT
1269
- virtual void getVars(Reflection::VarMap& m, bool registerOnly);
1270
- /// Get reflection for BranchingDesc \a d
1271
- GECODE_KERNEL_EXPORT
1272
- Reflection::BranchingSpec branchingSpec(Reflection::VarMap& m,
1273
- const BranchingDesc* d) const;
1274
- //@}
1275
-
1276
- /**
1277
- * \defgroup FuncMemSpace Space-memory management
1278
- * \ingroup FuncMem
1279
- */
1280
- //@{
1281
- /// Allocate memory on space heap
1282
- void* alloc(size_t);
1283
- /// Attempt to reuse memory previously allocated with alloc
1284
- void reuse(void*,size_t);
1285
- /// Allocate from freelist-managed memory
1286
- template <size_t> void* fl_alloc(void);
1287
- /**
1288
- * \brief Return freelist-managed memory to freelist
1289
- *
1290
- * The first list element to be retuned is \a f, the last is \a l.
1291
- */
1292
- template <size_t> void fl_dispose(FreeList* f, FreeList* l);
1293
- /**
1294
- * \brief Return how much heap memory is allocated
1295
- *
1296
- * Note that is includes both the memory allocated for the space heap
1297
- * as well as additional memory allocated by actors.
1298
- */
1299
- GECODE_KERNEL_EXPORT
1300
- size_t allocated(void) const;
1301
- //@}
1302
- };
1303
-
1304
-
1305
-
1306
-
1307
- /*
1308
- * Memory management
1309
- *
1310
- */
1311
-
1312
- // Heap allocated
1313
- forceinline void*
1314
- SharedHandle::Object::operator new(size_t s) {
1315
- return Memory::malloc(s);
1316
- }
1317
- forceinline void
1318
- SharedHandle::Object::operator delete(void* p) {
1319
- Memory::free(p);
1320
- }
1321
-
1322
- forceinline void*
1323
- Space::operator new(size_t s) {
1324
- return Memory::malloc(s);
1325
- }
1326
- forceinline void
1327
- Space::operator delete(void* p) {
1328
- Memory::free(p);
1329
- }
1330
-
1331
- forceinline void
1332
- BranchingDesc::operator delete(void* p) {
1333
- Memory::free(p);
1334
- }
1335
- forceinline void*
1336
- BranchingDesc::operator new(size_t s) {
1337
- return Memory::malloc(s);
1338
- }
1339
-
1340
- // Space allocation: general space heaps and free lists
1341
- forceinline void*
1342
- Space::alloc(size_t s) {
1343
- return mm.alloc(s);
1344
- }
1345
- forceinline void
1346
- Space::reuse(void* p, size_t s) {
1347
- return mm.reuse(p,s);
1348
- }
1349
- template <size_t s>
1350
- forceinline void*
1351
- Space::fl_alloc(void) {
1352
- return mm.template fl_alloc<s>();
1353
- }
1354
- template <size_t s>
1355
- forceinline void
1356
- Space::fl_dispose(FreeList* f, FreeList* l) {
1357
- mm.template fl_dispose<s>(f,l);
1358
- }
1359
-
1360
- #ifdef GECODE_HAS_VAR_DISPOSE
1361
- template <class VIC>
1362
- forceinline VarImpBase*
1363
- Space::vars_d(void) const {
1364
- return _vars_d[VIC::idx_d];
1365
- }
1366
- template <class VIC>
1367
- forceinline void
1368
- Space::vars_d(VarImpBase* x) {
1369
- _vars_d[VIC::idx_d] = x;
1370
- }
1371
- #endif
1372
-
1373
- // Space allocated entities: Actors, variable implementations, and advisors
1374
- forceinline void
1375
- Actor::operator delete(void*) {}
1376
- forceinline void
1377
- Actor::operator delete(void*, Space*) {}
1378
- forceinline void*
1379
- Actor::operator new(size_t s, Space* home) {
1380
- return home->alloc(s);
1381
- }
1382
-
1383
- template <class VIC>
1384
- forceinline void
1385
- VarImp<VIC>::operator delete(void*) {}
1386
- template <class VIC>
1387
- forceinline void
1388
- VarImp<VIC>::operator delete(void*, Space*) {}
1389
- template <class VIC>
1390
- forceinline void*
1391
- VarImp<VIC>::operator new(size_t s, Space* home) {
1392
- return home->alloc(s);
1393
- }
1394
-
1395
- #ifndef __GNUC__
1396
- forceinline void
1397
- Advisor::operator delete(void*) {}
1398
- #endif
1399
- forceinline void
1400
- Advisor::operator delete(void*, Space*) {}
1401
- forceinline void*
1402
- Advisor::operator new(size_t s, Space* home) {
1403
- return home->alloc(s);
1404
- }
1405
-
1406
-
1407
- /*
1408
- * Shared objects and handles
1409
- *
1410
- */
1411
- forceinline
1412
- SharedHandle::Object::Object(void)
1413
- : use_cnt(0), fwd(NULL) {}
1414
- forceinline
1415
- SharedHandle::Object::~Object(void) {
1416
- assert(use_cnt == 0);
1417
- }
1418
-
1419
- forceinline void
1420
- SharedHandle::subscribe(void) {
1421
- if (o != NULL) o->use_cnt++;
1422
- }
1423
- forceinline void
1424
- SharedHandle::cancel(void) {
1425
- if ((o != NULL) && (--o->use_cnt == 0))
1426
- delete o;
1427
- o = NULL;
1428
- }
1429
- forceinline
1430
- SharedHandle::SharedHandle(void) : o(NULL) {}
1431
- forceinline
1432
- SharedHandle::SharedHandle(SharedHandle::Object* so) : o(so) {
1433
- subscribe();
1434
- }
1435
- forceinline
1436
- SharedHandle::SharedHandle(const SharedHandle& sh) : o(sh.o) {
1437
- subscribe();
1438
- }
1439
- forceinline SharedHandle&
1440
- SharedHandle::operator=(const SharedHandle& sh) {
1441
- if (&sh != this) {
1442
- cancel(); o = sh.o; subscribe();
1443
- }
1444
- return *this;
1445
- }
1446
- forceinline void
1447
- SharedHandle::update(Space* home, bool share, SharedHandle& sh) {
1448
- if (sh.o == NULL) {
1449
- o = NULL;
1450
- } else if (share) {
1451
- o = sh.o; subscribe();
1452
- } else if (sh.o->fwd != NULL) {
1453
- o = sh.o->fwd; subscribe();
1454
- } else {
1455
- o = sh.o->copy();
1456
- sh.o->fwd = o;
1457
- sh.o->next = home->pc.c.shared;
1458
- home->pc.c.shared = sh.o;
1459
- subscribe();
1460
- }
1461
- }
1462
- forceinline
1463
- SharedHandle::~SharedHandle(void) {
1464
- cancel();
1465
- }
1466
- forceinline SharedHandle::Object*
1467
- SharedHandle::object(void) const {
1468
- return o;
1469
- }
1470
- forceinline void
1471
- SharedHandle::object(SharedHandle::Object* n) {
1472
- if (n != o) {
1473
- cancel(); o=n; subscribe();
1474
- }
1475
- }
1476
-
1477
-
1478
-
1479
- /*
1480
- * ActorLink
1481
- *
1482
- */
1483
- forceinline ActorLink*
1484
- ActorLink::prev(void) const {
1485
- return _prev;
1486
- }
1487
-
1488
- forceinline ActorLink*
1489
- ActorLink::next(void) const {
1490
- return _next;
1491
- }
1492
-
1493
- forceinline ActorLink**
1494
- ActorLink::next_ref(void) {
1495
- return &_next;
1496
- }
1497
-
1498
- forceinline void
1499
- ActorLink::prev(ActorLink* al) {
1500
- _prev = al;
1501
- }
1502
-
1503
- forceinline void
1504
- ActorLink::next(ActorLink* al) {
1505
- _next = al;
1506
- }
1507
-
1508
- forceinline void
1509
- ActorLink::unlink(void) {
1510
- ActorLink* p = _prev; ActorLink* n = _next;
1511
- p->_next = n; n->_prev = p;
1512
- }
1513
-
1514
- forceinline void
1515
- ActorLink::init(void) {
1516
- _next = this; _prev =this;
1517
- }
1518
-
1519
- forceinline void
1520
- ActorLink::head(ActorLink* a) {
1521
- // Inserts al at head of link-chain (that is, after this)
1522
- ActorLink* n = _next;
1523
- this->_next = a; a->_prev = this;
1524
- a->_next = n; n->_prev = a;
1525
- }
1526
-
1527
- forceinline void
1528
- ActorLink::tail(ActorLink* a) {
1529
- // Inserts al at tail of link-chain (that is, before this)
1530
- ActorLink* p = _prev;
1531
- a->_next = this; this->_prev = a;
1532
- p->_next = a; a->_prev = p;
1533
- }
1534
-
1535
- template <class T>
1536
- forceinline ActorLink*
1537
- ActorLink::cast(T* a) {
1538
- // Turning al into a reference is for gcc, assume is for MSVC
1539
- GECODE_NOT_NULL(a);
1540
- ActorLink& t = *a;
1541
- return static_cast<ActorLink*>(&t);
1542
- }
1543
-
1544
- template <class T>
1545
- forceinline const ActorLink*
1546
- ActorLink::cast(const T* a) {
1547
- // Turning al into a reference is for gcc, assume is for MSVC
1548
- GECODE_NOT_NULL(a);
1549
- const ActorLink& t = *a;
1550
- return static_cast<const ActorLink*>(&t);
1551
- }
1552
-
1553
-
1554
- /*
1555
- * Actor
1556
- *
1557
- */
1558
- forceinline Actor*
1559
- Actor::cast(ActorLink* al) {
1560
- // Turning al into a reference is for gcc, assume is for MSVC
1561
- GECODE_NOT_NULL(al);
1562
- ActorLink& t = *al;
1563
- return static_cast<Actor*>(&t);
1564
- }
1565
-
1566
- forceinline const Actor*
1567
- Actor::cast(const ActorLink* al) {
1568
- // Turning al into a reference is for gcc, assume is for MSVC
1569
- GECODE_NOT_NULL(al);
1570
- const ActorLink& t = *al;
1571
- return static_cast<const Actor*>(&t);
1572
- }
1573
-
1574
- forceinline void
1575
- Actor::force(Space* home) {
1576
- if (home->d_cur == home->d_lst)
1577
- home->d_resize();
1578
- *(home->d_cur++) = this;
1579
- }
1580
-
1581
- forceinline void
1582
- Actor::unforce(Space* home) {
1583
- // Check wether array has already been discarded as space
1584
- // deletion is already in progress
1585
- Actor** f = home->d_fst;
1586
- if (f != NULL) {
1587
- while (this != *f)
1588
- f++;
1589
- *f = *(--home->d_cur);
1590
- }
1591
- }
1592
-
1593
- forceinline size_t
1594
- Actor::dispose(Space*) {
1595
- return sizeof(*this);
1596
- }
1597
-
1598
-
1599
- /*
1600
- * Propagator
1601
- *
1602
- */
1603
- forceinline Propagator*
1604
- Propagator::cast(ActorLink* al) {
1605
- // Turning al into a reference is for gcc, assume is for MSVC
1606
- GECODE_NOT_NULL(al);
1607
- ActorLink& t = *al;
1608
- return static_cast<Propagator*>(&t);
1609
- }
1610
-
1611
- forceinline const Propagator*
1612
- Propagator::cast(const ActorLink* al) {
1613
- // Turning al into a reference is for gcc, assume is for MSVC
1614
- GECODE_NOT_NULL(al);
1615
- const ActorLink& t = *al;
1616
- return static_cast<const Propagator*>(&t);
1617
- }
1618
-
1619
- forceinline
1620
- Propagator::Propagator(Space* home) {
1621
- u.advisors = NULL;
1622
- assert(u.med == 0 && u.size == 0);
1623
- home->a_actors.head(this);
1624
- }
1625
-
1626
- forceinline
1627
- Propagator::Propagator(Space*, bool, Propagator& p) {
1628
- u.advisors = NULL;
1629
- assert(u.med == 0 && u.size == 0);
1630
- // Set forwarding pointer
1631
- p.prev(this);
1632
- }
1633
-
1634
- forceinline ExecStatus
1635
- ES_SUBSUMED(Propagator* p, size_t s) {
1636
- p->u.size = s;
1637
- return __ES_SUBSUMED;
1638
- }
1639
-
1640
- forceinline ExecStatus
1641
- ES_SUBSUMED(Propagator* p, Space* home) {
1642
- p->u.size = p->dispose(home);
1643
- return __ES_SUBSUMED;
1644
- }
1645
-
1646
- forceinline ExecStatus
1647
- ES_FIX_PARTIAL(Propagator* p, ModEventDelta med) {
1648
- p->u.med = med;
1649
- return __ES_PARTIAL;
1650
- }
1651
-
1652
- forceinline ExecStatus
1653
- ES_NOFIX_PARTIAL(Propagator* p, ModEventDelta med) {
1654
- p->u.med ^= AllVarConf::med_combine(p->u.med,med);
1655
- return __ES_PARTIAL;
1656
- }
1657
-
1658
-
1659
-
1660
- /*
1661
- * Branching
1662
- *
1663
- */
1664
- forceinline Branching*
1665
- Branching::cast(ActorLink* al) {
1666
- // Turning al into a reference is for gcc, assume is for MSVC
1667
- GECODE_NOT_NULL(al);
1668
- ActorLink& t = *al;
1669
- return static_cast<Branching*>(&t);
1670
- }
1671
-
1672
- forceinline const Branching*
1673
- Branching::cast(const ActorLink* al) {
1674
- // Turning al into a reference is for gcc, assume is for MSVC
1675
- GECODE_NOT_NULL(al);
1676
- const ActorLink& t = *al;
1677
- return static_cast<const Branching*>(&t);
1678
- }
1679
-
1680
- forceinline
1681
- Branching::Branching(Space* home) {
1682
- // Propagators are put at the tail of the link of actors
1683
- id = home->pc.p.branch_id++;
1684
- // If no branching available, make it the first one
1685
- if (home->b_status == &(home->a_actors)) {
1686
- home->b_status = this;
1687
- if (home->b_commit == &(home->a_actors))
1688
- home->b_commit = this;
1689
- }
1690
- home->a_actors.tail(this);
1691
- }
1692
-
1693
- forceinline
1694
- Branching::Branching(Space*, bool, Branching& b)
1695
- : id(b.id) {
1696
- // Set forwarding pointer
1697
- b.prev(this);
1698
- }
1699
-
1700
-
1701
-
1702
- /*
1703
- * Branching description
1704
- *
1705
- */
1706
- forceinline
1707
- BranchingDesc::BranchingDesc(const Branching* b, const unsigned int a)
1708
- : _id(b->id), _alt(a) {}
1709
-
1710
- forceinline unsigned int
1711
- BranchingDesc::alternatives(void) const {
1712
- return _alt;
1713
- }
1714
-
1715
- forceinline unsigned int
1716
- BranchingDesc::id(void) const {
1717
- return _id;
1718
- }
1719
-
1720
- forceinline
1721
- BranchingDesc::~BranchingDesc(void) {}
1722
-
1723
-
1724
-
1725
- /*
1726
- * Delta information for advisors
1727
- *
1728
- */
1729
- forceinline ModEvent
1730
- Delta::modevent(void) const {
1731
- return me;
1732
- }
1733
-
1734
-
1735
-
1736
- /*
1737
- * Advisor
1738
- *
1739
- */
1740
- template <class A>
1741
- forceinline
1742
- Advisor::Advisor(Space*, Propagator* p, Council<A>& c) {
1743
- assert(p != NULL);
1744
- // Store propagator and forwarding in prev()
1745
- ActorLink::prev(p);
1746
- // Link to next advisor in next()
1747
- ActorLink::next(c.advisors); c.advisors = static_cast<A*>(this);
1748
- }
1749
-
1750
- forceinline
1751
- Advisor::Advisor(Space*, bool, Advisor&) {}
1752
-
1753
- forceinline bool
1754
- Advisor::disposed(void) const {
1755
- return prev() == NULL;
1756
- }
1757
-
1758
- forceinline Propagator*
1759
- Advisor::propagator(void) const {
1760
- assert(!disposed());
1761
- return Propagator::cast(ActorLink::prev());
1762
- }
1763
-
1764
- template <class A>
1765
- forceinline void
1766
- Advisor::dispose(Space*,Council<A>&) {
1767
- assert(!disposed());
1768
- ActorLink::prev(NULL);
1769
- // Shorten chains of disposed advisors by one, if possible
1770
- Advisor* n = static_cast<Advisor*>(next());
1771
- if ((n != NULL) && n->disposed())
1772
- next(n->next());
1773
- }
1774
-
1775
- template <class A>
1776
- forceinline ExecStatus
1777
- ES_SUBSUMED_FIX(A* a, Space* home, Council<A>& c) {
1778
- a->dispose(home,c);
1779
- return ES_FIX;
1780
- }
1781
-
1782
- template <class A>
1783
- forceinline ExecStatus
1784
- ES_SUBSUMED_NOFIX(A* a, Space* home, Council<A>& c) {
1785
- a->dispose(home,c);
1786
- return ES_NOFIX;
1787
- }
1788
-
1789
-
1790
-
1791
- /*
1792
- * Advisor council
1793
- *
1794
- */
1795
- template <class A>
1796
- forceinline
1797
- Council<A>::Council(void) {}
1798
-
1799
- template <class A>
1800
- forceinline
1801
- Council<A>::Council(Space*)
1802
- : advisors(NULL) {}
1803
-
1804
- template <class A>
1805
- forceinline bool
1806
- Council<A>::empty(void) const {
1807
- ActorLink* a = advisors;
1808
- while ((a != NULL) && static_cast<A*>(a)->disposed())
1809
- a = a->next();
1810
- advisors = a;
1811
- return a == NULL;
1812
- }
1813
-
1814
- template <class A>
1815
- forceinline void
1816
- Council<A>::update(Space* home, bool share, Council<A>& c) {
1817
- // Skip all disposed advisors
1818
- {
1819
- ActorLink* a = c.advisors;
1820
- while ((a != NULL) && static_cast<A*>(a)->disposed())
1821
- a = a->next();
1822
- c.advisors = a;
1823
- }
1824
- // Are there any advisors to be cloned?
1825
- if (c.advisors != NULL) {
1826
- // The propagator in from-space
1827
- Propagator* p_f = static_cast<A*>(c.advisors)->propagator();
1828
- // The propagator in to-space
1829
- Propagator* p_t = static_cast<Propagator*>(p_f->prev());
1830
- // Advisors in from-space
1831
- ActorLink** a_f = &c.advisors;
1832
- // Advisors in to-space
1833
- A* a_t = NULL;
1834
- while (*a_f != NULL) {
1835
- if (static_cast<A*>(*a_f)->disposed()) {
1836
- *a_f = (*a_f)->next();
1837
- } else {
1838
- // Run specific copying part
1839
- A* a = new (home) A(home,share,*static_cast<A*>(*a_f));
1840
- // Set propagator pointer
1841
- a->prev(p_t);
1842
- // Set forwarding pointer
1843
- (*a_f)->prev(a);
1844
- // Link
1845
- a->next(a_t);
1846
- a_t = a;
1847
- a_f = (*a_f)->next_ref();
1848
- }
1849
- }
1850
- advisors = a_t;
1851
- // Enter advisor link for reset
1852
- assert(p_f->u.advisors == NULL);
1853
- p_f->u.advisors = c.advisors;
1854
- }
1855
- }
1856
-
1857
- template <class A>
1858
- forceinline void
1859
- Council<A>::dispose(Space* home) {
1860
- ActorLink* a = advisors;
1861
- while (a != NULL) {
1862
- if (!static_cast<A*>(a)->disposed())
1863
- static_cast<A*>(a)->dispose(home,*this);
1864
- a = a->next();
1865
- }
1866
- }
1867
-
1868
-
1869
-
1870
- /*
1871
- * Advisor iterator
1872
- *
1873
- */
1874
- template <class A>
1875
- forceinline
1876
- Advisors<A>::Advisors(const Council<A>& c)
1877
- : a(c.advisors) {
1878
- while ((a != NULL) && static_cast<A*>(a)->disposed())
1879
- a = a->next();
1880
- }
1881
-
1882
- template <class A>
1883
- forceinline bool
1884
- Advisors<A>::operator()(void) const {
1885
- return a != NULL;
1886
- }
1887
-
1888
- template <class A>
1889
- forceinline void
1890
- Advisors<A>::operator++(void) {
1891
- do {
1892
- a = a->next();
1893
- } while ((a != NULL) && static_cast<A*>(a)->disposed());
1894
- }
1895
-
1896
- template <class A>
1897
- forceinline A*
1898
- Advisors<A>::advisor(void) const {
1899
- return static_cast<A*>(a);
1900
- }
1901
-
1902
-
1903
-
1904
- /*
1905
- * Space
1906
- *
1907
- */
1908
- forceinline void
1909
- Space::enqueue(Propagator* p) {
1910
- ActorLink::cast(p)->unlink();
1911
- ActorLink* c = &pc.p.queue[p->cost(p->u.med)];
1912
- c->tail(ActorLink::cast(p));
1913
- if (c > pc.p.active)
1914
- pc.p.active = c;
1915
- }
1916
-
1917
- forceinline const BranchingDesc*
1918
- Space::description(void) const {
1919
- return b_status->description(this);
1920
- }
1921
-
1922
- forceinline void
1923
- Space::fail(void) {
1924
- pc.p.active = NULL;
1925
- }
1926
-
1927
- forceinline bool
1928
- Space::failed(void) const {
1929
- return pc.p.active == NULL;
1930
- }
1931
-
1932
- forceinline bool
1933
- Space::stable(void) const {
1934
- return pc.p.active < &pc.p.queue[0];
1935
- }
1936
-
1937
-
1938
-
1939
- /*
1940
- * Variable implementation
1941
- *
1942
- */
1943
- template <class VIC>
1944
- forceinline
1945
- VarImp<VIC>::VarImp(Space*) {
1946
- for (PropCond i=0; i<pc_max+3; i++)
1947
- idx[i] = NULL;
1948
- free_and_bits = 0;
1949
- }
1950
-
1951
- template <class VIC>
1952
- forceinline
1953
- VarImp<VIC>::VarImp(void) {
1954
- for (PropCond i=0; i<pc_max+3; i++)
1955
- idx[i] = NULL;
1956
- free_and_bits = 0;
1957
- }
1958
-
1959
- template <class VIC>
1960
- forceinline unsigned int
1961
- VarImp<VIC>::degree(void) const {
1962
- assert(!copied());
1963
- return static_cast<unsigned int>(idx[pc_max+2] - idx[0]);
1964
- }
1965
-
1966
- template <class VIC>
1967
- forceinline unsigned int
1968
- VarImp<VIC>::bits(void) const {
1969
- return free_and_bits;
1970
- }
1971
-
1972
- template <class VIC>
1973
- forceinline unsigned int&
1974
- VarImp<VIC>::bits(void) {
1975
- return free_and_bits;
1976
- }
1977
-
1978
- #ifdef GECODE_HAS_VAR_DISPOSE
1979
- template <class VIC>
1980
- forceinline VarImp<VIC>*
1981
- VarImp<VIC>::vars_d(Space* home) {
1982
- return static_cast<VarImp<VIC>*>(home->vars_d<VIC>());
1983
- }
1984
-
1985
- template <class VIC>
1986
- forceinline void
1987
- VarImp<VIC>::vars_d(Space* home, VarImp<VIC>* x) {
1988
- home->vars_d<VIC>(x);
1989
- }
1990
- #endif
1991
-
1992
- template <class VIC>
1993
- forceinline bool
1994
- VarImp<VIC>::copied(void) const {
1995
- return Support::marked(idx[0]);
1996
- }
1997
-
1998
- template <class VIC>
1999
- forceinline VarImp<VIC>*
2000
- VarImp<VIC>::forward(void) const {
2001
- assert(copied());
2002
- return reinterpret_cast<VarImp<VIC>*>(Support::unmark(idx[0]));
2003
- }
2004
-
2005
- template <class VIC>
2006
- forceinline VarImp<VIC>*
2007
- VarImp<VIC>::next(void) const {
2008
- assert(copied());
2009
- return reinterpret_cast<VarImp<VIC>*>(idx[1]);
2010
- }
2011
-
2012
- template <class VIC>
2013
- forceinline
2014
- VarImp<VIC>::VarImp(Space* home, bool, VarImp<VIC>& x) {
2015
- VarImpBase** reg;
2016
- free_and_bits = x.free_and_bits & ((1 << free_bits) - 1);
2017
- if (x.idx[0] == NULL) {
2018
- // Variable implementation needs no index structure
2019
- for (PropCond i=0; i<pc_max+3; i++)
2020
- idx[i] = NULL;
2021
- reg = &home->pc.c.vars_noidx;
2022
- } else {
2023
- // Save original values in copy
2024
- idx[0] = x.idx[0];
2025
- idx[1] = x.idx[1];
2026
- reg = &home->pc.c.vars_u[idx_c];
2027
- }
2028
- // Set forwarding pointer
2029
- x.idx[0] = reinterpret_cast<ActorLink**>(Support::mark(this));
2030
- // Register original
2031
- x.idx[1] = reinterpret_cast<ActorLink**>(*reg); *reg = &x;
2032
- }
2033
-
2034
- template <class VIC>
2035
- forceinline ModEvent
2036
- VarImp<VIC>::me(ModEventDelta med) {
2037
- return static_cast<ModEvent>((med & VIC::med_mask) >> VIC::med_fst);
2038
- }
2039
-
2040
- template <class VIC>
2041
- forceinline ModEventDelta
2042
- VarImp<VIC>::med(ModEvent me) {
2043
- return static_cast<ModEventDelta>(me << VIC::med_fst);
2044
- }
2045
-
2046
- template <class VIC>
2047
- forceinline ModEvent
2048
- VarImp<VIC>::me_combine(ModEvent me1, ModEvent me2) {
2049
- return VIC::me_combine(me1,me2);
2050
- }
2051
-
2052
- template <class VIC>
2053
- forceinline void
2054
- VarImp<VIC>::schedule(Space* home, Propagator* p, ModEvent me) {
2055
- if (VIC::med_update(p->u.med,me))
2056
- home->enqueue(p);
2057
- }
2058
-
2059
- template <class VIC>
2060
- forceinline void
2061
- VarImp<VIC>::schedule(Space* home, PropCond pc1, PropCond pc2, ModEvent me) {
2062
- ActorLink** b = idx[pc1];
2063
- ActorLink** p = idx[pc2+1];
2064
- while (p-- > b)
2065
- schedule(home,Propagator::cast(*p),me);
2066
- }
2067
-
2068
- template <class VIC>
2069
- forceinline void
2070
- VarImp<VIC>::enter(Space* home, ActorLink* a, PropCond pc) {
2071
- // Count one new subscription
2072
- home->pc.p.n_sub += 1;
2073
- if ((free_and_bits >> free_bits) == 0)
2074
- resize(home);
2075
- free_and_bits -= 1 << free_bits;
2076
- // Enter subscription
2077
- --idx[0];
2078
- for (PropCond i = 0; i < pc; i++)
2079
- *(idx[i]) = *(--idx[i+1]);
2080
- *idx[pc]=a;
2081
- }
2082
-
2083
- template <class VIC>
2084
- void
2085
- VarImp<VIC>::resize(Space* home) {
2086
- if (idx[0] == NULL) {
2087
- assert((free_and_bits >> free_bits) == 0);
2088
- // Create fresh dependency array with four entries
2089
- free_and_bits += 4 << free_bits;
2090
- ActorLink** prop = static_cast<ActorLink**>
2091
- (home->alloc(4*sizeof(ActorLink*))) + 4;
2092
- for (PropCond i=0; i<pc_max+3; i++)
2093
- idx[i] = prop;
2094
- } else {
2095
- // Resize dependency array
2096
- unsigned int n = static_cast<unsigned int>(idx[pc_max+2] - idx[0]);
2097
- // Find out whether the area is most likely in the special area
2098
- // reserved for subscriptions. If yes, just resize mildly otherwise
2099
- // more agressively
2100
- ActorLink** s = static_cast<ActorLink**>
2101
- (home->mm.subscriptions());
2102
- unsigned int m =
2103
- ((s <= idx[0]) && (idx[0] < s+home->pc.p.n_sub)) ?
2104
- (n+4) : ((n+1)*3>>1);
2105
- ActorLink** prop = static_cast<ActorLink**>
2106
- (home->alloc(m*sizeof(ActorLink*))) + m-n;
2107
- free_and_bits += (m-n) << free_bits;
2108
- // Copy entries
2109
- memcpy(prop, idx[0], n*sizeof(ActorLink*));
2110
- home->reuse(idx[0], n*sizeof(ActorLink*));
2111
- // Update index pointers
2112
- ptrdiff_t o = prop - idx[0];
2113
- idx[0] = prop;
2114
- for (PropCond i = pc_max+2; i > 0; i--)
2115
- idx[i] += o;
2116
- }
2117
- }
2118
-
2119
- template <class VIC>
2120
- void
2121
- VarImp<VIC>::subscribe(Space* home, Propagator* p, PropCond pc,
2122
- bool assigned, ModEvent me, bool schedule) {
2123
- if (assigned) {
2124
- // Do not subscribe, just schedule the propagator
2125
- if (schedule)
2126
- VarImp<VIC>::schedule(home,p,ME_GEN_ASSIGNED);
2127
- } else {
2128
- enter(home,ActorLink::cast(p),pc);
2129
- // Schedule propagator
2130
- if (schedule && (pc != PC_GEN_ASSIGNED))
2131
- VarImp<VIC>::schedule(home,p,me);
2132
- }
2133
- }
2134
-
2135
- template <class VIC>
2136
- forceinline void
2137
- VarImp<VIC>::subscribe(Space* home, Advisor* a, bool assigned) {
2138
- if (!assigned)
2139
- enter(home,a,pc_max+1);
2140
- }
2141
-
2142
- template <class VIC>
2143
- forceinline void
2144
- VarImp<VIC>::remove(Space* home, ActorLink* a, PropCond pc) {
2145
- /*
2146
- * The entries are removed from front to back, so when iterating
2147
- * over dependencies wile removing them it must be done in
2148
- * forward direction.
2149
- */
2150
- ActorLink** f = idx[pc];
2151
- #ifdef GECODE_AUDIT
2152
- while (f < idx[pc+1])
2153
- if (*f == a)
2154
- goto found;
2155
- else
2156
- f++;
2157
- GECODE_NEVER;
2158
- found: ;
2159
- #else
2160
- while (*f != a) f++;
2161
- #endif
2162
- *f=*idx[pc];
2163
- for (PropCond i=pc; i>0; i--)
2164
- *(idx[i]++)=*(idx[i-1]);
2165
- idx[0]++;
2166
- free_and_bits += 1 << free_bits;
2167
- home->pc.p.n_sub -= 1;
2168
- }
2169
-
2170
- template <class VIC>
2171
- forceinline void
2172
- VarImp<VIC>::cancel(Space* home, Propagator* p, PropCond pc, bool assigned) {
2173
- if (!assigned)
2174
- remove(home,ActorLink::cast(p),pc);
2175
- }
2176
-
2177
- template <class VIC>
2178
- forceinline void
2179
- VarImp<VIC>::cancel(Space* home, Advisor* a, bool assigned) {
2180
- if (!assigned)
2181
- remove(home,a,pc_max+1);
2182
- }
2183
-
2184
- template <class VIC>
2185
- forceinline void
2186
- VarImp<VIC>::cancel(Space* home) {
2187
- // Entries in index structure are disabled. However they
2188
- // must still work for cloning (idx[0]) and degree (idx[PC+2])
2189
- ActorLink** b = idx[0]; idx[0] = NULL;
2190
- ActorLink** p = idx[pc_max+2]; idx[pc_max+2] = NULL;
2191
- home->pc.p.n_sub -= (p-b);
2192
- unsigned int n = (free_and_bits >> VIC::free_bits) + (p-b);
2193
- home->reuse(p-n,n*sizeof(ActorLink*));
2194
- }
2195
-
2196
- template <class VIC>
2197
- forceinline bool
2198
- VarImp<VIC>::advise(Space* home, ModEvent me, Delta* d) {
2199
- /*
2200
- * An advisor that is executed might remove itself due to subsumption.
2201
- * As entries are removed from front to back, the advisors must
2202
- * be iterated in forward direction.
2203
- */
2204
- ActorLink** la = idx[pc_max+1];
2205
- ActorLink** le = idx[pc_max+2];
2206
- if (la == le)
2207
- return true;
2208
- d->me = me;
2209
- // An advisor that is run, might be removed during execution.
2210
- // As removal is done from the back the advisors have to be executed
2211
- // in inverse order.
2212
- do {
2213
- Advisor* a = static_cast<Advisor*>(*la);
2214
- Propagator* p = a->propagator();
2215
- switch (p->advise(home,a,d)) {
2216
- case ES_FIX:
2217
- break;
2218
- case ES_FAILED:
2219
- return false;
2220
- case ES_NOFIX:
2221
- schedule(home,p,me);
2222
- break;
2223
- default:
2224
- GECODE_NEVER;
2225
- }
2226
- } while (++la < le);
2227
- return true;
2228
- }
2229
-
2230
- template <class VIC>
2231
- forceinline void
2232
- VarImp<VIC>::update(VarImp<VIC>* x, ActorLink**& sub) {
2233
- // this refers to the variable to be updated (clone)
2234
- // x refers to the original
2235
- // Recover from copy
2236
- x->idx[0] = idx[0];
2237
- ActorLink** f = x->idx[0];
2238
- x->idx[1] = idx[1];
2239
- int n = static_cast<int>(x->idx[pc_max+2] - f);
2240
- ActorLink** t = sub;
2241
- sub += n;
2242
- idx[0] = t;
2243
- ptrdiff_t o = t - f;
2244
- for (PropCond i = 1; i<pc_max+3; i++)
2245
- idx[i] = x->idx[i]+o;
2246
- while ((n-4) >= 0) {
2247
- n -= 4;
2248
- t[0]=f[0]->prev(); t[1]=f[1]->prev();
2249
- t[2]=f[2]->prev(); t[3]=f[3]->prev();
2250
- t += 4; f += 4;
2251
- }
2252
- if ((n-2) >= 0) {
2253
- n -= 2;
2254
- t[0]=f[0]->prev(); t[1]=f[1]->prev();
2255
- t += 2; f += 2;
2256
- }
2257
- if (n > 0) {
2258
- t[0]=f[0]->prev();
2259
- }
2260
- }
2261
-
2262
- template <class VIC>
2263
- forceinline void
2264
- VarImp<VIC>::update(Space* home, ActorLink**& sub) {
2265
- VarImp<VIC>* x = static_cast<VarImp<VIC>*>(home->pc.c.vars_u[idx_c]);
2266
- while (x != NULL) {
2267
- VarImp<VIC>* n = x->next(); x->forward()->update(x,sub); x = n;
2268
- }
2269
- }
2270
-
2271
-
2272
-
2273
- /*
2274
- * Variable disposer
2275
- *
2276
- */
2277
- template <class VarType>
2278
- VarDisposer<VarType>::VarDisposer(void) {
2279
- #ifdef GECODE_HAS_VAR_DISPOSE
2280
- Space::vd[VarType::idx_d] = this;
2281
- #endif
2282
- }
2283
-
2284
- template <class VarType>
2285
- void
2286
- VarDisposer<VarType>::dispose(Space* home, VarImpBase* _x) {
2287
- VarType* x = static_cast<VarType*>(_x);
2288
- do {
2289
- x->dispose(home); x = static_cast<VarType*>(x->next_d());
2290
- } while (x != NULL);
2291
- }
2292
-
2293
- }
2294
-
2295
- // STATISTICS: kernel-core