gecoder-with-gecode 0.7.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1063) hide show
  1. data/CHANGES +7 -0
  2. data/README +10 -1
  3. data/ext/extconf.rb +24 -7
  4. data/ext/gecode-2.1.1/LICENSE +25 -0
  5. data/ext/gecode-2.1.1/Makefile.contribs +86 -0
  6. data/ext/gecode-2.1.1/Makefile.dep +7622 -0
  7. data/ext/gecode-2.1.1/Makefile.in +1568 -0
  8. data/ext/gecode-2.1.1/changelog.in +2459 -0
  9. data/ext/gecode-2.1.1/configure +11631 -0
  10. data/ext/gecode-2.1.1/configure.ac +249 -0
  11. data/ext/gecode-2.1.1/configure.ac.in +245 -0
  12. data/ext/{gecode-1.3.1 → gecode-2.1.1}/contribs/README +0 -0
  13. data/ext/gecode-2.1.1/contribs/qecode/Doxyfile +263 -0
  14. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.cc +82 -0
  15. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.hh +37 -0
  16. data/ext/gecode-2.1.1/contribs/qecode/Makefile.in.in +162 -0
  17. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.cc +172 -0
  18. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.hh +63 -0
  19. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +37 -0
  20. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +35 -0
  21. data/ext/gecode-2.1.1/contribs/qecode/configure +2264 -0
  22. data/ext/gecode-2.1.1/contribs/qecode/configure.ac +23 -0
  23. data/ext/gecode-2.1.1/contribs/qecode/examples/COMPILING +13 -0
  24. data/ext/gecode-2.1.1/contribs/qecode/examples/MatrixGame.cpp +144 -0
  25. data/ext/gecode-2.1.1/contribs/qecode/examples/NimFibo.cpp +73 -0
  26. data/ext/gecode-2.1.1/contribs/qecode/examples/stress_test.cpp +179 -0
  27. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +34 -0
  28. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +46 -0
  29. data/ext/gecode-2.1.1/contribs/qecode/heap.cc +151 -0
  30. data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +595 -0
  31. data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +184 -0
  32. data/ext/gecode-2.1.1/contribs/qecode/myDom.cc +39 -0
  33. data/ext/gecode-2.1.1/contribs/qecode/myspace.cc +69 -0
  34. data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +69 -0
  35. data/ext/gecode-2.1.1/contribs/qecode/qecode.hh +56 -0
  36. data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +145 -0
  37. data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +247 -0
  38. data/ext/gecode-2.1.1/contribs/qecode/qsolver.cc +168 -0
  39. data/ext/gecode-2.1.1/contribs/qecode/qsolver.hh +73 -0
  40. data/ext/gecode-2.1.1/contribs/qecode/shortdesc.ac +1 -0
  41. data/ext/gecode-2.1.1/contribs/qecode/valueHeuristic.hh +91 -0
  42. data/ext/gecode-2.1.1/contribs/qecode/vartype.hh +31 -0
  43. data/ext/gecode-2.1.1/contribs/qecode/warner.cc +101 -0
  44. data/ext/gecode-2.1.1/contribs/qecode/warner.hh +83 -0
  45. data/ext/gecode-2.1.1/doxygen/doxygen.conf.in +1270 -0
  46. data/ext/gecode-2.1.1/doxygen/doxygen.hh.in +1111 -0
  47. data/ext/gecode-2.1.1/doxygen/reflection.hh +417 -0
  48. data/ext/gecode-2.1.1/gecode.m4 +956 -0
  49. data/ext/gecode-2.1.1/gecode/cpltset.hh +797 -0
  50. data/ext/gecode-2.1.1/gecode/cpltset/array.cc +121 -0
  51. data/ext/gecode-2.1.1/gecode/cpltset/array.icc +81 -0
  52. data/ext/gecode-2.1.1/gecode/cpltset/bddmanager.cc +59 -0
  53. data/ext/gecode-2.1.1/gecode/cpltset/bddmanager.icc +448 -0
  54. data/ext/gecode-2.1.1/gecode/cpltset/branch.cc +68 -0
  55. data/ext/gecode-2.1.1/gecode/cpltset/branch.hh +208 -0
  56. data/ext/gecode-2.1.1/gecode/cpltset/branch/select-val.icc +167 -0
  57. data/ext/gecode-2.1.1/gecode/cpltset/branch/select-view.icc +143 -0
  58. data/ext/gecode-2.1.1/gecode/cpltset/constraints/atmost.cc +472 -0
  59. data/ext/gecode-2.1.1/gecode/cpltset/constraints/cardinality.cc +69 -0
  60. data/ext/gecode-2.1.1/gecode/cpltset/constraints/distinct.cc +83 -0
  61. data/ext/gecode-2.1.1/gecode/cpltset/constraints/dom.cc +147 -0
  62. data/ext/gecode-2.1.1/gecode/cpltset/constraints/partition.cc +383 -0
  63. data/ext/gecode-2.1.1/gecode/cpltset/constraints/rangeroots.cc +466 -0
  64. data/ext/gecode-2.1.1/gecode/cpltset/constraints/rel.cc +530 -0
  65. data/ext/gecode-2.1.1/gecode/cpltset/constraints/select.cc +126 -0
  66. data/ext/gecode-2.1.1/gecode/cpltset/constraints/singleton.cc +55 -0
  67. data/ext/gecode-2.1.1/gecode/cpltset/exception.icc +172 -0
  68. data/ext/gecode-2.1.1/gecode/cpltset/propagators.hh +335 -0
  69. data/ext/gecode-2.1.1/gecode/cpltset/propagators/binary.icc +260 -0
  70. data/ext/gecode-2.1.1/gecode/cpltset/propagators/nary.icc +210 -0
  71. data/ext/gecode-2.1.1/gecode/cpltset/propagators/naryone.icc +165 -0
  72. data/ext/gecode-2.1.1/gecode/cpltset/propagators/narytwo.icc +191 -0
  73. data/ext/gecode-2.1.1/gecode/cpltset/propagators/singleton.icc +130 -0
  74. data/ext/gecode-2.1.1/gecode/cpltset/propagators/unary.icc +132 -0
  75. data/ext/gecode-2.1.1/gecode/cpltset/support.cc +673 -0
  76. data/ext/gecode-2.1.1/gecode/cpltset/support.icc +696 -0
  77. data/ext/gecode-2.1.1/gecode/cpltset/var-imp.icc +487 -0
  78. data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.cc +926 -0
  79. data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.icc +687 -0
  80. data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.vis +86 -0
  81. data/ext/gecode-2.1.1/gecode/cpltset/var/cpltset.cc +101 -0
  82. data/ext/gecode-2.1.1/gecode/cpltset/var/cpltset.icc +219 -0
  83. data/ext/gecode-2.1.1/gecode/cpltset/view.icc +231 -0
  84. data/ext/gecode-2.1.1/gecode/cpltset/view/cpltset.icc +420 -0
  85. data/ext/gecode-2.1.1/gecode/cpltset/view/print.cc +166 -0
  86. data/ext/gecode-2.1.1/gecode/gist.hh +162 -0
  87. data/ext/gecode-2.1.1/gecode/gist/addchild.cc +191 -0
  88. data/ext/gecode-2.1.1/gecode/gist/addchild.hh +76 -0
  89. data/ext/gecode-2.1.1/gecode/gist/addvisualisationdialog.cc +139 -0
  90. data/ext/gecode-2.1.1/gecode/gist/addvisualisationdialog.hh +78 -0
  91. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.cc +115 -0
  92. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.hh +77 -0
  93. data/ext/gecode-2.1.1/gecode/gist/better.hh +59 -0
  94. data/ext/gecode-2.1.1/gecode/gist/config.cc +61 -0
  95. data/ext/gecode-2.1.1/gecode/gist/config.hh +62 -0
  96. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.cc +245 -0
  97. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.hh +101 -0
  98. data/ext/gecode-2.1.1/gecode/gist/gecodelogo.icc +522 -0
  99. data/ext/gecode-2.1.1/gecode/gist/gist.cc +129 -0
  100. data/ext/gecode-2.1.1/gecode/gist/gist.icc +76 -0
  101. data/ext/gecode-2.1.1/gecode/gist/mainwindow.cc +254 -0
  102. data/ext/gecode-2.1.1/gecode/gist/mainwindow.hh +86 -0
  103. data/ext/gecode-2.1.1/gecode/gist/node.cc +100 -0
  104. data/ext/gecode-2.1.1/gecode/gist/node.hh +89 -0
  105. data/ext/gecode-2.1.1/gecode/gist/nodecursor.cc +124 -0
  106. data/ext/gecode-2.1.1/gecode/gist/nodecursor.hh +122 -0
  107. data/ext/gecode-2.1.1/gecode/gist/nodecursor.icc +79 -0
  108. data/ext/gecode-2.1.1/gecode/gist/nodevisitor.hh +91 -0
  109. data/ext/gecode-2.1.1/gecode/gist/nodevisitor.icc +112 -0
  110. data/ext/gecode-2.1.1/gecode/gist/postscript.cc +543 -0
  111. data/ext/gecode-2.1.1/gecode/gist/postscript.hh +56 -0
  112. data/ext/gecode-2.1.1/gecode/gist/preferences.cc +110 -0
  113. data/ext/gecode-2.1.1/gecode/gist/preferences.hh +76 -0
  114. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.cc +55 -0
  115. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.hh +58 -0
  116. data/ext/gecode-2.1.1/gecode/gist/shapelist.cc +331 -0
  117. data/ext/gecode-2.1.1/gecode/gist/shapelist.hh +140 -0
  118. data/ext/gecode-2.1.1/gecode/gist/spacenode.cc +531 -0
  119. data/ext/gecode-2.1.1/gecode/gist/spacenode.hh +224 -0
  120. data/ext/gecode-2.1.1/gecode/gist/test.cc +78 -0
  121. data/ext/gecode-2.1.1/gecode/gist/textoutput.cc +114 -0
  122. data/ext/gecode-2.1.1/gecode/gist/textoutput.hh +67 -0
  123. data/ext/gecode-2.1.1/gecode/gist/treecanvas.cc +1140 -0
  124. data/ext/gecode-2.1.1/gecode/gist/treecanvas.hh +324 -0
  125. data/ext/gecode-2.1.1/gecode/gist/ui_addchild.hh +163 -0
  126. data/ext/gecode-2.1.1/gecode/gist/ui_addvisualisationdialog.hh +163 -0
  127. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.cc +175 -0
  128. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.hh +71 -0
  129. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.cc +219 -0
  130. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.hh +73 -0
  131. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayitem.hh +123 -0
  132. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayview.cc +146 -0
  133. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayview.hh +96 -0
  134. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayviewt.hh +105 -0
  135. data/ext/gecode-2.1.1/gecode/gist/visualisation/varitem.cc +68 -0
  136. data/ext/gecode-2.1.1/gecode/gist/visualisation/varitem.hh +67 -0
  137. data/ext/gecode-2.1.1/gecode/gist/visualnode.cc +303 -0
  138. data/ext/gecode-2.1.1/gecode/gist/visualnode.hh +166 -0
  139. data/ext/gecode-2.1.1/gecode/int.hh +2035 -0
  140. data/ext/gecode-2.1.1/gecode/int/arithmetic.cc +136 -0
  141. data/ext/gecode-2.1.1/gecode/int/arithmetic.hh +440 -0
  142. data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +279 -0
  143. data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +253 -0
  144. data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +522 -0
  145. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +218 -0
  146. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +138 -0
  147. data/ext/gecode-2.1.1/gecode/int/array.cc +74 -0
  148. data/ext/gecode-2.1.1/gecode/int/array.icc +115 -0
  149. data/ext/gecode-2.1.1/gecode/int/bool.cc +642 -0
  150. data/ext/gecode-2.1.1/gecode/int/bool.hh +487 -0
  151. data/ext/gecode-2.1.1/gecode/int/bool/base.icc +156 -0
  152. data/ext/gecode-2.1.1/gecode/int/bool/eq.icc +239 -0
  153. data/ext/gecode-2.1.1/gecode/int/bool/eqv.icc +179 -0
  154. data/ext/gecode-2.1.1/gecode/int/bool/lq.icc +147 -0
  155. data/ext/gecode-2.1.1/gecode/int/bool/or.icc +1000 -0
  156. data/ext/gecode-2.1.1/gecode/int/branch.cc +301 -0
  157. data/ext/gecode-2.1.1/gecode/int/branch.hh +576 -0
  158. data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +338 -0
  159. data/ext/gecode-2.1.1/gecode/int/branch/select-view.icc +421 -0
  160. data/ext/gecode-2.1.1/gecode/int/channel.cc +114 -0
  161. data/ext/gecode-2.1.1/gecode/int/channel.hh +259 -0
  162. data/ext/gecode-2.1.1/gecode/int/channel/base.icc +86 -0
  163. data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +347 -0
  164. data/ext/gecode-2.1.1/gecode/int/channel/link-multi.cc +231 -0
  165. data/ext/gecode-2.1.1/gecode/int/channel/link-multi.icc +70 -0
  166. data/ext/gecode-2.1.1/gecode/int/channel/link-single.cc +97 -0
  167. data/ext/gecode-2.1.1/gecode/int/channel/link-single.icc +71 -0
  168. data/ext/gecode-2.1.1/gecode/int/channel/val.icc +276 -0
  169. data/ext/gecode-2.1.1/gecode/int/circuit.cc +63 -0
  170. data/ext/gecode-2.1.1/gecode/int/circuit.hh +175 -0
  171. data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +271 -0
  172. data/ext/gecode-2.1.1/gecode/int/circuit/dom.icc +146 -0
  173. data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +122 -0
  174. data/ext/gecode-2.1.1/gecode/int/count.cc +310 -0
  175. data/ext/gecode-2.1.1/gecode/int/count.hh +487 -0
  176. data/ext/gecode-2.1.1/gecode/int/count/int.icc +619 -0
  177. data/ext/gecode-2.1.1/gecode/int/count/rel.icc +144 -0
  178. data/ext/gecode-2.1.1/gecode/int/count/view.icc +449 -0
  179. data/ext/gecode-2.1.1/gecode/int/cumulatives.cc +226 -0
  180. data/ext/gecode-2.1.1/gecode/int/cumulatives.hh +141 -0
  181. data/ext/gecode-2.1.1/gecode/int/cumulatives/val.icc +429 -0
  182. data/ext/gecode-2.1.1/gecode/int/distinct.cc +108 -0
  183. data/ext/gecode-2.1.1/gecode/int/distinct.hh +341 -0
  184. data/ext/gecode-2.1.1/gecode/int/distinct/bilink.icc +89 -0
  185. data/ext/gecode-2.1.1/gecode/int/distinct/bnd.icc +378 -0
  186. data/ext/gecode-2.1.1/gecode/int/distinct/combptr.icc +78 -0
  187. data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +750 -0
  188. data/ext/gecode-2.1.1/gecode/int/distinct/edge.icc +118 -0
  189. data/ext/gecode-2.1.1/gecode/int/distinct/node.icc +147 -0
  190. data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +136 -0
  191. data/ext/gecode-2.1.1/gecode/int/distinct/val.icc +209 -0
  192. data/ext/gecode-2.1.1/gecode/int/dom.cc +116 -0
  193. data/ext/gecode-2.1.1/gecode/int/dom.hh +134 -0
  194. data/ext/gecode-2.1.1/gecode/int/dom/range.icc +129 -0
  195. data/ext/gecode-2.1.1/gecode/int/dom/spec.icc +151 -0
  196. data/ext/gecode-2.1.1/gecode/int/element.cc +156 -0
  197. data/ext/gecode-2.1.1/gecode/int/element.hh +239 -0
  198. data/ext/gecode-2.1.1/gecode/int/element/int.icc +441 -0
  199. data/ext/gecode-2.1.1/gecode/int/element/view.icc +584 -0
  200. data/ext/gecode-2.1.1/gecode/int/exception.icc +163 -0
  201. data/ext/gecode-2.1.1/gecode/int/extensional.cc +138 -0
  202. data/ext/gecode-2.1.1/gecode/int/extensional.hh +415 -0
  203. data/ext/gecode-2.1.1/gecode/int/extensional/base.icc +160 -0
  204. data/ext/gecode-2.1.1/gecode/int/extensional/basic.icc +166 -0
  205. data/ext/gecode-2.1.1/gecode/int/extensional/bitset.icc +113 -0
  206. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +565 -0
  207. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.icc +241 -0
  208. data/ext/gecode-2.1.1/gecode/int/extensional/incremental.icc +393 -0
  209. data/ext/gecode-2.1.1/gecode/int/extensional/layered-graph.icc +604 -0
  210. data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.cc +311 -0
  211. data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.icc +207 -0
  212. data/ext/gecode-2.1.1/gecode/int/gcc.cc +374 -0
  213. data/ext/gecode-2.1.1/gecode/int/gcc.hh +329 -0
  214. data/ext/gecode-2.1.1/gecode/int/gcc/bnd.icc +660 -0
  215. data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +531 -0
  216. data/ext/gecode-2.1.1/gecode/int/gcc/gccbndsup.icc +780 -0
  217. data/ext/gecode-2.1.1/gecode/int/gcc/graphsup.icc +2422 -0
  218. data/ext/gecode-2.1.1/gecode/int/gcc/lbc.icc +391 -0
  219. data/ext/gecode-2.1.1/gecode/int/gcc/occur.icc +829 -0
  220. data/ext/gecode-2.1.1/gecode/int/gcc/ubc.icc +255 -0
  221. data/ext/gecode-2.1.1/gecode/int/gcc/val.icc +400 -0
  222. data/ext/gecode-2.1.1/gecode/int/int-set.cc +153 -0
  223. data/ext/gecode-2.1.1/gecode/int/int-set.icc +191 -0
  224. data/ext/gecode-2.1.1/gecode/int/limits.icc +54 -0
  225. data/ext/gecode-2.1.1/gecode/int/linear-bool.cc +220 -0
  226. data/ext/gecode-2.1.1/gecode/int/linear-int.cc +240 -0
  227. data/ext/gecode-2.1.1/gecode/int/linear.hh +1849 -0
  228. data/ext/gecode-2.1.1/gecode/int/linear/bool-int.icc +791 -0
  229. data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +433 -0
  230. data/ext/gecode-2.1.1/gecode/int/linear/bool-scale.icc +854 -0
  231. data/ext/gecode-2.1.1/gecode/int/linear/bool-view.icc +399 -0
  232. data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +605 -0
  233. data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +539 -0
  234. data/ext/gecode-2.1.1/gecode/int/linear/int-nary.icc +1004 -0
  235. data/ext/gecode-2.1.1/gecode/int/linear/int-noview.icc +385 -0
  236. data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +493 -0
  237. data/ext/gecode-2.1.1/gecode/int/linear/int-ter.icc +357 -0
  238. data/ext/gecode-2.1.1/gecode/int/linear/post.icc +146 -0
  239. data/ext/gecode-2.1.1/gecode/int/propagator.icc +240 -0
  240. data/ext/gecode-2.1.1/gecode/int/rel.cc +431 -0
  241. data/ext/gecode-2.1.1/gecode/int/rel.hh +657 -0
  242. data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +848 -0
  243. data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +248 -0
  244. data/ext/gecode-2.1.1/gecode/int/rel/lq-le.icc +352 -0
  245. data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +269 -0
  246. data/ext/gecode-2.1.1/gecode/int/sorted.cc +91 -0
  247. data/ext/gecode-2.1.1/gecode/int/sorted.hh +117 -0
  248. data/ext/gecode-2.1.1/gecode/int/sorted/matching.icc +182 -0
  249. data/ext/gecode-2.1.1/gecode/int/sorted/narrowing.icc +257 -0
  250. data/ext/gecode-2.1.1/gecode/int/sorted/order.icc +208 -0
  251. data/ext/gecode-2.1.1/gecode/int/sorted/propagate.icc +669 -0
  252. data/ext/gecode-2.1.1/gecode/int/sorted/sortsup.icc +596 -0
  253. data/ext/gecode-2.1.1/gecode/int/unshare.cc +148 -0
  254. data/ext/gecode-2.1.1/gecode/int/var-imp.icc +745 -0
  255. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +104 -0
  256. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.icc +423 -0
  257. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.vis +69 -0
  258. data/ext/gecode-2.1.1/gecode/int/var-imp/delta.icc +64 -0
  259. data/ext/gecode-2.1.1/gecode/int/var-imp/int.cc +407 -0
  260. data/ext/gecode-2.1.1/gecode/int/var-imp/int.icc +1004 -0
  261. data/ext/gecode-2.1.1/gecode/int/var-imp/int.vis +195 -0
  262. data/ext/gecode-2.1.1/gecode/int/var/bool.cc +72 -0
  263. data/ext/gecode-2.1.1/gecode/int/var/bool.icc +126 -0
  264. data/ext/gecode-2.1.1/gecode/int/var/int.cc +79 -0
  265. data/ext/gecode-2.1.1/gecode/int/var/int.icc +151 -0
  266. data/ext/gecode-2.1.1/gecode/int/view.icc +1894 -0
  267. data/ext/gecode-2.1.1/gecode/int/view/bool.icc +598 -0
  268. data/ext/gecode-2.1.1/gecode/int/view/constint.icc +392 -0
  269. data/ext/gecode-2.1.1/gecode/int/view/int.icc +301 -0
  270. data/ext/gecode-2.1.1/gecode/int/view/iter.icc +65 -0
  271. data/ext/gecode-2.1.1/gecode/int/view/minus.icc +372 -0
  272. data/ext/gecode-2.1.1/gecode/int/view/offset.icc +362 -0
  273. data/ext/gecode-2.1.1/gecode/int/view/print.cc +133 -0
  274. data/ext/gecode-2.1.1/gecode/int/view/rtest.icc +231 -0
  275. data/ext/gecode-2.1.1/gecode/int/view/scale.icc +456 -0
  276. data/ext/gecode-2.1.1/gecode/int/view/zero.icc +384 -0
  277. data/ext/gecode-2.1.1/gecode/iter.hh +90 -0
  278. data/ext/gecode-2.1.1/gecode/iter/ranges-add.icc +144 -0
  279. data/ext/gecode-2.1.1/gecode/iter/ranges-append.icc +222 -0
  280. data/ext/gecode-2.1.1/gecode/iter/ranges-array.icc +138 -0
  281. data/ext/gecode-2.1.1/gecode/iter/ranges-cache.icc +337 -0
  282. data/ext/gecode-2.1.1/gecode/iter/ranges-compl.icc +220 -0
  283. data/ext/gecode-2.1.1/gecode/iter/ranges-diff.icc +142 -0
  284. data/ext/gecode-2.1.1/gecode/iter/ranges-empty.icc +111 -0
  285. data/ext/gecode-2.1.1/gecode/iter/ranges-inter.icc +216 -0
  286. data/ext/gecode-2.1.1/gecode/iter/ranges-minmax.icc +118 -0
  287. data/ext/gecode-2.1.1/gecode/iter/ranges-minus.icc +150 -0
  288. data/ext/gecode-2.1.1/gecode/iter/ranges-offset.icc +127 -0
  289. data/ext/gecode-2.1.1/gecode/iter/ranges-operations.icc +157 -0
  290. data/ext/gecode-2.1.1/gecode/iter/ranges-scale.icc +238 -0
  291. data/ext/gecode-2.1.1/gecode/iter/ranges-singleton-append.icc +111 -0
  292. data/ext/gecode-2.1.1/gecode/iter/ranges-singleton.icc +86 -0
  293. data/ext/gecode-2.1.1/gecode/iter/ranges-size.icc +146 -0
  294. data/ext/gecode-2.1.1/gecode/iter/ranges-union.icc +224 -0
  295. data/ext/gecode-2.1.1/gecode/iter/ranges-values.icc +140 -0
  296. data/ext/gecode-2.1.1/gecode/iter/values-array.icc +119 -0
  297. data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +130 -0
  298. data/ext/gecode-2.1.1/gecode/iter/values-offset.icc +113 -0
  299. data/ext/gecode-2.1.1/gecode/iter/values-ranges.icc +106 -0
  300. data/ext/gecode-2.1.1/gecode/iter/values-singleton.icc +109 -0
  301. data/ext/gecode-2.1.1/gecode/iter/values-unique.icc +118 -0
  302. data/ext/gecode-2.1.1/gecode/iter/virtual-ranges-compl.icc +261 -0
  303. data/ext/gecode-2.1.1/gecode/iter/virtual-ranges-inter.icc +241 -0
  304. data/ext/gecode-2.1.1/gecode/iter/virtual-ranges-union.icc +249 -0
  305. data/ext/gecode-2.1.1/gecode/iter/virtual-ranges.icc +140 -0
  306. data/ext/gecode-2.1.1/gecode/kernel.hh +182 -0
  307. data/ext/gecode-2.1.1/gecode/kernel/advisor.icc +104 -0
  308. data/ext/gecode-2.1.1/gecode/kernel/array.icc +1232 -0
  309. data/ext/gecode-2.1.1/gecode/kernel/branching.icc +447 -0
  310. data/ext/gecode-2.1.1/gecode/kernel/core.cc +473 -0
  311. data/ext/gecode-2.1.1/gecode/kernel/core.icc +2295 -0
  312. data/ext/gecode-2.1.1/gecode/kernel/exception.icc +101 -0
  313. data/ext/gecode-2.1.1/gecode/kernel/macros.icc +117 -0
  314. data/ext/gecode-2.1.1/gecode/kernel/memory-manager.cc +57 -0
  315. data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +458 -0
  316. data/ext/gecode-2.1.1/gecode/kernel/modevent.icc +69 -0
  317. data/ext/gecode-2.1.1/gecode/kernel/propagator.icc +845 -0
  318. data/ext/gecode-2.1.1/gecode/kernel/reflection.cc +921 -0
  319. data/ext/gecode-2.1.1/gecode/kernel/reflection.icc +1012 -0
  320. data/ext/gecode-2.1.1/gecode/kernel/shared-array.icc +286 -0
  321. data/ext/gecode-2.1.1/gecode/kernel/var-imp.icc +433 -0
  322. data/ext/gecode-2.1.1/gecode/kernel/var-map.cc +269 -0
  323. data/ext/gecode-2.1.1/gecode/kernel/var-map.icc +227 -0
  324. data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +72 -0
  325. data/ext/gecode-2.1.1/gecode/kernel/var-type.cc +68 -0
  326. data/ext/gecode-2.1.1/gecode/kernel/var-type.icc +915 -0
  327. data/ext/gecode-2.1.1/gecode/kernel/var.icc +120 -0
  328. data/ext/gecode-2.1.1/gecode/kernel/view.icc +611 -0
  329. data/ext/gecode-2.1.1/gecode/minimodel.hh +1165 -0
  330. data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +179 -0
  331. data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.cc +327 -0
  332. data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.icc +131 -0
  333. data/ext/gecode-2.1.1/gecode/minimodel/bool-rel.icc +83 -0
  334. data/ext/gecode-2.1.1/gecode/minimodel/exception.icc +84 -0
  335. data/ext/gecode-2.1.1/gecode/minimodel/lin-expr.icc +374 -0
  336. data/ext/gecode-2.1.1/gecode/minimodel/lin-rel.icc +324 -0
  337. data/ext/gecode-2.1.1/gecode/minimodel/matrix.icc +144 -0
  338. data/ext/gecode-2.1.1/gecode/minimodel/reg.cc +823 -0
  339. data/ext/gecode-2.1.1/gecode/search.hh +752 -0
  340. data/ext/gecode-2.1.1/gecode/search/bab.cc +169 -0
  341. data/ext/gecode-2.1.1/gecode/search/bab.icc +117 -0
  342. data/ext/gecode-2.1.1/gecode/search/dfs.cc +79 -0
  343. data/ext/gecode-2.1.1/gecode/search/dfs.icc +169 -0
  344. data/ext/gecode-2.1.1/gecode/search/engine-ctrl.icc +131 -0
  345. data/ext/gecode-2.1.1/gecode/search/lds.cc +265 -0
  346. data/ext/gecode-2.1.1/gecode/search/lds.icc +73 -0
  347. data/ext/gecode-2.1.1/gecode/search/options.cc +46 -0
  348. data/ext/gecode-2.1.1/gecode/search/options.icc +46 -0
  349. data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +237 -0
  350. data/ext/gecode-2.1.1/gecode/search/restart.icc +99 -0
  351. data/ext/gecode-2.1.1/gecode/search/statistics.icc +46 -0
  352. data/ext/gecode-2.1.1/gecode/search/stop.cc +74 -0
  353. data/ext/gecode-2.1.1/gecode/search/stop.icc +116 -0
  354. data/ext/gecode-2.1.1/gecode/serialization.hh +149 -0
  355. data/ext/gecode-2.1.1/gecode/serialization/boost.cc +78 -0
  356. data/ext/gecode-2.1.1/gecode/serialization/boost.icc +381 -0
  357. data/ext/gecode-2.1.1/gecode/serialization/flatzinc.cc +372 -0
  358. data/ext/gecode-2.1.1/gecode/serialization/javascript.cc +340 -0
  359. data/ext/gecode-2.1.1/gecode/serialization/javascript.hh +69 -0
  360. data/ext/gecode-2.1.1/gecode/serialization/register.cc +8142 -0
  361. data/ext/gecode-2.1.1/gecode/set.hh +970 -0
  362. data/ext/gecode-2.1.1/gecode/set/array.cc +114 -0
  363. data/ext/gecode-2.1.1/gecode/set/array.icc +77 -0
  364. data/ext/gecode-2.1.1/gecode/set/branch.cc +78 -0
  365. data/ext/gecode-2.1.1/gecode/set/branch.hh +213 -0
  366. data/ext/gecode-2.1.1/gecode/set/branch/select-val.icc +132 -0
  367. data/ext/gecode-2.1.1/gecode/set/branch/select-view.icc +148 -0
  368. data/ext/gecode-2.1.1/gecode/set/cardinality.cc +65 -0
  369. data/ext/gecode-2.1.1/gecode/set/convex.cc +59 -0
  370. data/ext/gecode-2.1.1/gecode/set/convex.hh +126 -0
  371. data/ext/gecode-2.1.1/gecode/set/convex/conv.cc +118 -0
  372. data/ext/gecode-2.1.1/gecode/set/convex/conv.icc +67 -0
  373. data/ext/gecode-2.1.1/gecode/set/convex/hull.cc +140 -0
  374. data/ext/gecode-2.1.1/gecode/set/convex/hull.icc +68 -0
  375. data/ext/gecode-2.1.1/gecode/set/distinct.cc +56 -0
  376. data/ext/gecode-2.1.1/gecode/set/distinct.hh +90 -0
  377. data/ext/gecode-2.1.1/gecode/set/distinct/atmostOne.cc +192 -0
  378. data/ext/gecode-2.1.1/gecode/set/distinct/atmostOne.icc +66 -0
  379. data/ext/gecode-2.1.1/gecode/set/dom.cc +232 -0
  380. data/ext/gecode-2.1.1/gecode/set/exception.icc +135 -0
  381. data/ext/gecode-2.1.1/gecode/set/int.cc +177 -0
  382. data/ext/gecode-2.1.1/gecode/set/int.hh +391 -0
  383. data/ext/gecode-2.1.1/gecode/set/int/card.icc +116 -0
  384. data/ext/gecode-2.1.1/gecode/set/int/channel-bool.icc +303 -0
  385. data/ext/gecode-2.1.1/gecode/set/int/channel-int.icc +174 -0
  386. data/ext/gecode-2.1.1/gecode/set/int/match.icc +224 -0
  387. data/ext/gecode-2.1.1/gecode/set/int/minmax.icc +228 -0
  388. data/ext/gecode-2.1.1/gecode/set/int/weights.icc +370 -0
  389. data/ext/gecode-2.1.1/gecode/set/limits.icc +62 -0
  390. data/ext/gecode-2.1.1/gecode/set/projectors-compiler.hh +164 -0
  391. data/ext/gecode-2.1.1/gecode/set/projectors.cc +143 -0
  392. data/ext/gecode-2.1.1/gecode/set/projectors.hh +438 -0
  393. data/ext/gecode-2.1.1/gecode/set/projectors/compiler.cc +859 -0
  394. data/ext/gecode-2.1.1/gecode/set/projectors/formula.cc +312 -0
  395. data/ext/gecode-2.1.1/gecode/set/projectors/formula.icc +66 -0
  396. data/ext/gecode-2.1.1/gecode/set/projectors/projector-set.cc +91 -0
  397. data/ext/gecode-2.1.1/gecode/set/projectors/projector-set.icc +85 -0
  398. data/ext/gecode-2.1.1/gecode/set/projectors/projector.cc +147 -0
  399. data/ext/gecode-2.1.1/gecode/set/projectors/projector.icc +98 -0
  400. data/ext/gecode-2.1.1/gecode/set/projectors/propagator.hh +168 -0
  401. data/ext/gecode-2.1.1/gecode/set/projectors/propagator/card.icc +128 -0
  402. data/ext/gecode-2.1.1/gecode/set/projectors/propagator/nary.icc +144 -0
  403. data/ext/gecode-2.1.1/gecode/set/projectors/propagator/re-nary.cc +100 -0
  404. data/ext/gecode-2.1.1/gecode/set/projectors/propagator/re-nary.icc +71 -0
  405. data/ext/gecode-2.1.1/gecode/set/projectors/set-expr.cc +339 -0
  406. data/ext/gecode-2.1.1/gecode/set/projectors/set-expr.icc +237 -0
  407. data/ext/gecode-2.1.1/gecode/set/propagator.icc +125 -0
  408. data/ext/gecode-2.1.1/gecode/set/rel-op-const.cc +332 -0
  409. data/ext/gecode-2.1.1/gecode/set/rel-op.cc +197 -0
  410. data/ext/gecode-2.1.1/gecode/set/rel-op.hh +353 -0
  411. data/ext/gecode-2.1.1/gecode/set/rel-op/common.icc +557 -0
  412. data/ext/gecode-2.1.1/gecode/set/rel-op/inter.icc +409 -0
  413. data/ext/gecode-2.1.1/gecode/set/rel-op/partition.icc +202 -0
  414. data/ext/gecode-2.1.1/gecode/set/rel-op/post.icc +223 -0
  415. data/ext/gecode-2.1.1/gecode/set/rel-op/subofunion.icc +192 -0
  416. data/ext/gecode-2.1.1/gecode/set/rel-op/superofinter.icc +193 -0
  417. data/ext/gecode-2.1.1/gecode/set/rel-op/union.icc +383 -0
  418. data/ext/gecode-2.1.1/gecode/set/rel.cc +258 -0
  419. data/ext/gecode-2.1.1/gecode/set/rel.hh +321 -0
  420. data/ext/gecode-2.1.1/gecode/set/rel/common.icc +125 -0
  421. data/ext/gecode-2.1.1/gecode/set/rel/eq.icc +139 -0
  422. data/ext/gecode-2.1.1/gecode/set/rel/nosubset.icc +128 -0
  423. data/ext/gecode-2.1.1/gecode/set/rel/nq.icc +208 -0
  424. data/ext/gecode-2.1.1/gecode/set/rel/re-eq.icc +179 -0
  425. data/ext/gecode-2.1.1/gecode/set/rel/re-subset.icc +172 -0
  426. data/ext/gecode-2.1.1/gecode/set/rel/subset.icc +119 -0
  427. data/ext/gecode-2.1.1/gecode/set/select.cc +135 -0
  428. data/ext/gecode-2.1.1/gecode/set/select.hh +233 -0
  429. data/ext/gecode-2.1.1/gecode/set/select/disjoint.cc +308 -0
  430. data/ext/gecode-2.1.1/gecode/set/select/disjoint.icc +75 -0
  431. data/ext/gecode-2.1.1/gecode/set/select/idxarray.hh +113 -0
  432. data/ext/gecode-2.1.1/gecode/set/select/idxarray.icc +155 -0
  433. data/ext/gecode-2.1.1/gecode/set/select/inter.icc +349 -0
  434. data/ext/gecode-2.1.1/gecode/set/select/union.icc +371 -0
  435. data/ext/gecode-2.1.1/gecode/set/select/unionConst.icc +334 -0
  436. data/ext/gecode-2.1.1/gecode/set/sequence.cc +69 -0
  437. data/ext/gecode-2.1.1/gecode/set/sequence.hh +134 -0
  438. data/ext/gecode-2.1.1/gecode/set/sequence/common.icc +99 -0
  439. data/ext/gecode-2.1.1/gecode/set/sequence/seq-u.cc +176 -0
  440. data/ext/gecode-2.1.1/gecode/set/sequence/seq-u.icc +79 -0
  441. data/ext/gecode-2.1.1/gecode/set/sequence/seq.cc +94 -0
  442. data/ext/gecode-2.1.1/gecode/set/sequence/seq.icc +69 -0
  443. data/ext/gecode-2.1.1/gecode/set/var-imp.icc +737 -0
  444. data/ext/gecode-2.1.1/gecode/set/var-imp/delta.icc +78 -0
  445. data/ext/gecode-2.1.1/gecode/set/var-imp/integerset.cc +349 -0
  446. data/ext/gecode-2.1.1/gecode/set/var-imp/integerset.icc +484 -0
  447. data/ext/gecode-2.1.1/gecode/set/var-imp/iter.icc +63 -0
  448. data/ext/gecode-2.1.1/gecode/set/var-imp/set.cc +214 -0
  449. data/ext/gecode-2.1.1/gecode/set/var-imp/set.icc +532 -0
  450. data/ext/gecode-2.1.1/gecode/set/var-imp/set.vis +190 -0
  451. data/ext/gecode-2.1.1/gecode/set/var/set.cc +105 -0
  452. data/ext/gecode-2.1.1/gecode/set/var/set.icc +303 -0
  453. data/ext/gecode-2.1.1/gecode/set/view.icc +1503 -0
  454. data/ext/gecode-2.1.1/gecode/set/view/complement.icc +629 -0
  455. data/ext/gecode-2.1.1/gecode/set/view/const.icc +907 -0
  456. data/ext/gecode-2.1.1/gecode/set/view/offset.icc +497 -0
  457. data/ext/gecode-2.1.1/gecode/set/view/print.cc +141 -0
  458. data/ext/gecode-2.1.1/gecode/set/view/set.icc +275 -0
  459. data/ext/gecode-2.1.1/gecode/set/view/singleton.icc +438 -0
  460. data/ext/gecode-2.1.1/gecode/support.hh +110 -0
  461. data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +158 -0
  462. data/ext/gecode-2.1.1/gecode/support/buddy/AUTHORS +11 -0
  463. data/ext/gecode-2.1.1/gecode/support/buddy/ChangeLog +218 -0
  464. data/ext/gecode-2.1.1/gecode/support/buddy/NEWS +200 -0
  465. data/ext/gecode-2.1.1/gecode/support/buddy/README +128 -0
  466. data/ext/gecode-2.1.1/gecode/support/buddy/bdd.h +939 -0
  467. data/ext/gecode-2.1.1/gecode/support/buddy/bddio.c +596 -0
  468. data/ext/gecode-2.1.1/gecode/support/buddy/bddop.c +2848 -0
  469. data/ext/gecode-2.1.1/gecode/support/buddy/bddtree.h +62 -0
  470. data/ext/gecode-2.1.1/gecode/support/buddy/bvec.c +1354 -0
  471. data/ext/gecode-2.1.1/gecode/support/buddy/bvec.h +298 -0
  472. data/ext/gecode-2.1.1/gecode/support/buddy/cache.c +104 -0
  473. data/ext/gecode-2.1.1/gecode/support/buddy/cache.h +72 -0
  474. data/ext/gecode-2.1.1/gecode/support/buddy/config.h +20 -0
  475. data/ext/gecode-2.1.1/gecode/support/buddy/cppext.cc +626 -0
  476. data/ext/gecode-2.1.1/gecode/support/buddy/fdd.c +1079 -0
  477. data/ext/gecode-2.1.1/gecode/support/buddy/fdd.h +175 -0
  478. data/ext/gecode-2.1.1/gecode/support/buddy/imatrix.c +151 -0
  479. data/ext/gecode-2.1.1/gecode/support/buddy/imatrix.h +61 -0
  480. data/ext/gecode-2.1.1/gecode/support/buddy/kernel.c +1555 -0
  481. data/ext/gecode-2.1.1/gecode/support/buddy/kernel.h +244 -0
  482. data/ext/gecode-2.1.1/gecode/support/buddy/pairs.c +336 -0
  483. data/ext/gecode-2.1.1/gecode/support/buddy/prime.c +322 -0
  484. data/ext/gecode-2.1.1/gecode/support/buddy/prime.h +50 -0
  485. data/ext/gecode-2.1.1/gecode/support/buddy/reorder.c +2345 -0
  486. data/ext/gecode-2.1.1/gecode/support/buddy/tree.c +224 -0
  487. data/ext/gecode-2.1.1/gecode/support/cast.icc +52 -0
  488. data/ext/gecode-2.1.1/gecode/support/config.icc.in +80 -0
  489. data/ext/gecode-2.1.1/gecode/support/dynamic-array.icc +138 -0
  490. data/ext/gecode-2.1.1/gecode/support/dynamic-stack.icc +167 -0
  491. data/ext/gecode-2.1.1/gecode/support/exception.cc +65 -0
  492. data/ext/gecode-2.1.1/gecode/support/exception.icc +82 -0
  493. data/ext/gecode-2.1.1/gecode/support/macros.icc +103 -0
  494. data/ext/gecode-2.1.1/gecode/support/map.icc +207 -0
  495. data/ext/gecode-2.1.1/gecode/support/marked-pointer.icc +66 -0
  496. data/ext/gecode-2.1.1/gecode/support/memory.icc +220 -0
  497. data/ext/gecode-2.1.1/gecode/support/random.icc +121 -0
  498. data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +122 -0
  499. data/ext/gecode-2.1.1/gecode/support/sort.icc +210 -0
  500. data/ext/gecode-2.1.1/gecode/support/static-pqueue.icc +242 -0
  501. data/ext/gecode-2.1.1/gecode/support/static-stack.icc +125 -0
  502. data/ext/gecode-2.1.1/gecode/support/symbol.cc +226 -0
  503. data/ext/gecode-2.1.1/gecode/support/symbol.icc +130 -0
  504. data/ext/{gecode-1.3.1 → gecode-2.1.1}/install-sh +0 -0
  505. data/ext/gecode-2.1.1/misc/AppleHelpbookInfo.plist +26 -0
  506. data/ext/gecode-2.1.1/misc/allexamples.perl +60 -0
  507. data/ext/gecode-2.1.1/misc/debian/Makefile.am +44 -0
  508. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/changelog +0 -0
  509. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/control +0 -0
  510. data/ext/gecode-2.1.1/misc/debian/copyright +30 -0
  511. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/gecode.info +0 -0
  512. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/gecode.install +0 -0
  513. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/gecode.spec +0 -0
  514. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/rules +0 -0
  515. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/back.png +0 -0
  516. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/footer.html +0 -0
  517. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/gecode-logo-100.png +0 -0
  518. data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/header.html +0 -0
  519. data/ext/gecode-2.1.1/misc/doxygen/stylesheet.css +464 -0
  520. data/ext/gecode-2.1.1/misc/fixproperties.sh +77 -0
  521. data/ext/gecode-2.1.1/misc/gecode-gist.pc.in +45 -0
  522. data/ext/gecode-2.1.1/misc/gecode-minimodel.pc.in +45 -0
  523. data/ext/gecode-2.1.1/misc/gecode-search.pc.in +45 -0
  524. data/ext/gecode-2.1.1/misc/gecode-serialization.pc.in +45 -0
  525. data/ext/gecode-2.1.1/misc/gecode.pc.in +45 -0
  526. data/ext/gecode-2.1.1/misc/genchangelog.perl +208 -0
  527. data/ext/gecode-2.1.1/misc/genlcovmakefile.perl +148 -0
  528. data/ext/gecode-2.1.1/misc/genlicense.perl +121 -0
  529. data/ext/gecode-2.1.1/misc/genregistry.perl +468 -0
  530. data/ext/gecode-2.1.1/misc/genstatistics.perl +178 -0
  531. data/ext/gecode-2.1.1/misc/gentxtchangelog.perl +192 -0
  532. data/ext/gecode-2.1.1/misc/genvariables.perl +905 -0
  533. data/ext/gecode-2.1.1/misc/getrevision.perl +47 -0
  534. data/ext/gecode-2.1.1/misc/makedepend.perl +85 -0
  535. data/ext/gecode-2.1.1/misc/svn-ignore.txt +15 -0
  536. data/ext/gecode-2.1.1/variables.vsl +50 -0
  537. data/ext/missing.cpp +1 -1
  538. data/ext/missing.h +1 -1
  539. data/ext/vararray.h +4 -4
  540. data/lib/gecoder/bindings.rb +21 -1
  541. data/lib/gecoder/bindings/bindings.rb +408 -731
  542. data/lib/gecoder/interface/binding_changes.rb +1 -1
  543. data/lib/gecoder/interface/branch.rb +25 -25
  544. data/lib/gecoder/interface/constraints.rb +47 -4
  545. data/lib/gecoder/interface/constraints/bool/boolean.rb +18 -16
  546. data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +13 -11
  547. data/lib/gecoder/interface/constraints/int/arithmetic.rb +5 -4
  548. data/lib/gecoder/interface/constraints/int/domain.rb +8 -9
  549. data/lib/gecoder/interface/constraints/int/linear.rb +10 -8
  550. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +4 -4
  551. data/lib/gecoder/interface/constraints/int_enum/channel.rb +2 -2
  552. data/lib/gecoder/interface/constraints/int_enum/count.rb +4 -5
  553. data/lib/gecoder/interface/constraints/int_enum/distinct.rb +7 -2
  554. data/lib/gecoder/interface/constraints/int_enum/element.rb +2 -2
  555. data/lib/gecoder/interface/constraints/int_enum/equality.rb +6 -3
  556. data/lib/gecoder/interface/constraints/int_enum/sort.rb +17 -5
  557. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +0 -36
  558. data/lib/gecoder/interface/constraints/set_var_constraints.rb +5 -0
  559. data/lib/gecoder/interface/model.rb +3 -3
  560. data/lib/gecoder/interface/search.rb +5 -4
  561. data/lib/gecoder/version.rb +1 -1
  562. data/specs/branch.rb +27 -27
  563. data/specs/constraints/arithmetic.rb +48 -30
  564. data/specs/constraints/bool_enum.rb +39 -19
  565. data/specs/constraints/boolean.rb +10 -10
  566. data/specs/constraints/cardinality.rb +12 -9
  567. data/specs/constraints/channel.rb +6 -6
  568. data/specs/constraints/connection.rb +22 -26
  569. data/specs/constraints/constraint_helper.rb +125 -41
  570. data/specs/constraints/count.rb +22 -15
  571. data/specs/constraints/distinct.rb +10 -64
  572. data/specs/constraints/element.rb +14 -12
  573. data/specs/constraints/equality.rb +4 -4
  574. data/specs/constraints/int_domain.rb +8 -7
  575. data/specs/constraints/int_relation.rb +12 -8
  576. data/specs/constraints/linear.rb +4 -4
  577. data/specs/constraints/reification_sugar.rb +22 -4
  578. data/specs/constraints/selection.rb +2 -2
  579. data/specs/constraints/set_domain.rb +7 -3
  580. data/specs/constraints/set_operation.rb +2 -2
  581. data/specs/constraints/set_relation.rb +2 -6
  582. data/specs/constraints/sort.rb +20 -16
  583. data/specs/distribution.rb +14 -0
  584. data/specs/model.rb +4 -4
  585. data/tasks/dependencies.txt +21 -0
  586. data/tasks/distribution.rake +49 -14
  587. data/vendor/rust/include/rust_checks.hh +2 -1
  588. data/vendor/rust/include/rust_conversions.hh +2 -2
  589. data/vendor/rust/rust/attribute.rb +2 -2
  590. data/vendor/rust/rust/class.rb +2 -2
  591. data/vendor/rust/rust/cxxclass.rb +0 -2
  592. data/vendor/rust/rust/function.rb +2 -2
  593. data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +1 -1
  594. data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +1 -1
  595. data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +1 -1
  596. data/vendor/rust/rust/type.rb +1 -1
  597. metadata +599 -542
  598. data/ext/gecode-1.3.1/LICENSE +0 -34
  599. data/ext/gecode-1.3.1/Makefile.contribs +0 -71
  600. data/ext/gecode-1.3.1/Makefile.dep +0 -3928
  601. data/ext/gecode-1.3.1/Makefile.in +0 -966
  602. data/ext/gecode-1.3.1/changelog.in +0 -1065
  603. data/ext/gecode-1.3.1/configure +0 -8590
  604. data/ext/gecode-1.3.1/configure.ac +0 -179
  605. data/ext/gecode-1.3.1/configure.ac.in +0 -175
  606. data/ext/gecode-1.3.1/contribs/graph/INSTALL +0 -53
  607. data/ext/gecode-1.3.1/contribs/graph/LICENSE +0 -11
  608. data/ext/gecode-1.3.1/contribs/graph/Makefile +0 -167
  609. data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +0 -169
  610. data/ext/gecode-1.3.1/contribs/graph/TODO +0 -28
  611. data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +0 -82
  612. data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +0 -186
  613. data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +0 -257
  614. data/ext/gecode-1.3.1/contribs/graph/configure +0 -2160
  615. data/ext/gecode-1.3.1/contribs/graph/configure.ac +0 -33
  616. data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +0 -1226
  617. data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +0 -132
  618. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +0 -94
  619. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +0 -104
  620. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +0 -105
  621. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +0 -92
  622. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +0 -273
  623. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +0 -311
  624. data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +0 -1
  625. data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +0 -1
  626. data/ext/gecode-1.3.1/contribs/graph/graph.hh +0 -51
  627. data/ext/gecode-1.3.1/contribs/graph/graphutils.h +0 -46
  628. data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +0 -140
  629. data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +0 -1
  630. data/ext/gecode-1.3.1/contribs/graph/path.hh +0 -116
  631. data/ext/gecode-1.3.1/contribs/graph/path.icc +0 -64
  632. data/ext/gecode-1.3.1/contribs/graph/path/path.icc +0 -139
  633. data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +0 -133
  634. data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +0 -341
  635. data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +0 -1
  636. data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +0 -105
  637. data/ext/gecode-1.3.1/contribs/graph/var.icc +0 -106
  638. data/ext/gecode-1.3.1/contribs/graph/view.icc +0 -373
  639. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +0 -162
  640. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +0 -78
  641. data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +0 -349
  642. data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +0 -148
  643. data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +0 -337
  644. data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +0 -493
  645. data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +0 -60
  646. data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +0 -600
  647. data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +0 -135
  648. data/ext/gecode-1.3.1/contribs/map/COMPILING +0 -68
  649. data/ext/gecode-1.3.1/contribs/map/LICENSE +0 -11
  650. data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +0 -173
  651. data/ext/gecode-1.3.1/contribs/map/configure +0 -2285
  652. data/ext/gecode-1.3.1/contribs/map/configure.ac +0 -32
  653. data/ext/gecode-1.3.1/contribs/map/constraints.hh +0 -46
  654. data/ext/gecode-1.3.1/contribs/map/constraints.icc +0 -84
  655. data/ext/gecode-1.3.1/contribs/map/doxygen.conf +0 -1229
  656. data/ext/gecode-1.3.1/contribs/map/doxygen.hh +0 -33
  657. data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +0 -199
  658. data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +0 -1
  659. data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +0 -1
  660. data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
  661. data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +0 -148
  662. data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
  663. data/ext/gecode-1.3.1/contribs/map/examples/map.cc +0 -80
  664. data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +0 -155
  665. data/ext/gecode-1.3.1/contribs/map/map.hh +0 -65
  666. data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +0 -235
  667. data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +0 -771
  668. data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +0 -2
  669. data/ext/gecode-1.3.1/contribs/map/var.icc +0 -346
  670. data/ext/gecode-1.3.1/contribs/map/var/imp.cc +0 -42
  671. data/ext/gecode-1.3.1/contribs/map/var/imp.icc +0 -436
  672. data/ext/gecode-1.3.1/doxygen.conf.in +0 -1225
  673. data/ext/gecode-1.3.1/doxygen.hh.in +0 -877
  674. data/ext/gecode-1.3.1/examples/all-interval-sort.cc +0 -201
  675. data/ext/gecode-1.3.1/examples/all-interval.cc +0 -114
  676. data/ext/gecode-1.3.1/examples/alpha.cc +0 -112
  677. data/ext/gecode-1.3.1/examples/baseline.cc +0 -71
  678. data/ext/gecode-1.3.1/examples/bibd.cc +0 -173
  679. data/ext/gecode-1.3.1/examples/black-hole.cc +0 -281
  680. data/ext/gecode-1.3.1/examples/cars.cc +0 -165
  681. data/ext/gecode-1.3.1/examples/crew.cc +0 -220
  682. data/ext/gecode-1.3.1/examples/crowded-chess.cc +0 -312
  683. data/ext/gecode-1.3.1/examples/donald.cc +0 -93
  684. data/ext/gecode-1.3.1/examples/eq20.cc +0 -111
  685. data/ext/gecode-1.3.1/examples/golf.cc +0 -242
  686. data/ext/gecode-1.3.1/examples/golomb.cc +0 -141
  687. data/ext/gecode-1.3.1/examples/graph-color.cc +0 -371
  688. data/ext/gecode-1.3.1/examples/grocery.cc +0 -107
  689. data/ext/gecode-1.3.1/examples/hamming.cc +0 -107
  690. data/ext/gecode-1.3.1/examples/ind-set.cc +0 -130
  691. data/ext/gecode-1.3.1/examples/knights.cc +0 -146
  692. data/ext/gecode-1.3.1/examples/langfordnum.cc +0 -244
  693. data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +0 -93
  694. data/ext/gecode-1.3.1/examples/magic-sequence.cc +0 -108
  695. data/ext/gecode-1.3.1/examples/magic-square.cc +0 -120
  696. data/ext/gecode-1.3.1/examples/money.cc +0 -92
  697. data/ext/gecode-1.3.1/examples/ortho-latin.cc +0 -156
  698. data/ext/gecode-1.3.1/examples/packing.cc +0 -211
  699. data/ext/gecode-1.3.1/examples/partition.cc +0 -126
  700. data/ext/gecode-1.3.1/examples/photo.cc +0 -155
  701. data/ext/gecode-1.3.1/examples/picture-puzzle.cc +0 -481
  702. data/ext/gecode-1.3.1/examples/queen-armies.cc +0 -240
  703. data/ext/gecode-1.3.1/examples/queens.cc +0 -99
  704. data/ext/gecode-1.3.1/examples/sports-league.cc +0 -454
  705. data/ext/gecode-1.3.1/examples/steiner.cc +0 -148
  706. data/ext/gecode-1.3.1/examples/stress-domain.cc +0 -86
  707. data/ext/gecode-1.3.1/examples/stress-element.cc +0 -95
  708. data/ext/gecode-1.3.1/examples/stress-exec.cc +0 -74
  709. data/ext/gecode-1.3.1/examples/stress-min.cc +0 -84
  710. data/ext/gecode-1.3.1/examples/stress-search.cc +0 -72
  711. data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +0 -282
  712. data/ext/gecode-1.3.1/examples/sudoku-set.cc +0 -162
  713. data/ext/gecode-1.3.1/examples/sudoku.cc +0 -188
  714. data/ext/gecode-1.3.1/examples/sudoku.icc +0 -703
  715. data/ext/gecode-1.3.1/examples/support.cc +0 -160
  716. data/ext/gecode-1.3.1/examples/support.hh +0 -98
  717. data/ext/gecode-1.3.1/examples/support.icc +0 -187
  718. data/ext/gecode-1.3.1/examples/timer.cc +0 -47
  719. data/ext/gecode-1.3.1/examples/timer.hh +0 -72
  720. data/ext/gecode-1.3.1/examples/warehouses.cc +0 -176
  721. data/ext/gecode-1.3.1/extconf.rb +0 -8
  722. data/ext/gecode-1.3.1/gecode.m4 +0 -736
  723. data/ext/gecode-1.3.1/gecode/config.icc.in +0 -50
  724. data/ext/gecode-1.3.1/gecode/int.hh +0 -1426
  725. data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +0 -87
  726. data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +0 -292
  727. data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +0 -213
  728. data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +0 -196
  729. data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +0 -478
  730. data/ext/gecode-1.3.1/gecode/int/array.cc +0 -61
  731. data/ext/gecode-1.3.1/gecode/int/array.icc +0 -264
  732. data/ext/gecode-1.3.1/gecode/int/bool.cc +0 -187
  733. data/ext/gecode-1.3.1/gecode/int/bool.hh +0 -255
  734. data/ext/gecode-1.3.1/gecode/int/bool/base.icc +0 -123
  735. data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +0 -89
  736. data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +0 -132
  737. data/ext/gecode-1.3.1/gecode/int/bool/or.icc +0 -380
  738. data/ext/gecode-1.3.1/gecode/int/branch.cc +0 -81
  739. data/ext/gecode-1.3.1/gecode/int/branch.hh +0 -444
  740. data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +0 -83
  741. data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +0 -76
  742. data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +0 -104
  743. data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +0 -219
  744. data/ext/gecode-1.3.1/gecode/int/channel.cc +0 -62
  745. data/ext/gecode-1.3.1/gecode/int/channel.hh +0 -144
  746. data/ext/gecode-1.3.1/gecode/int/channel/base.icc +0 -60
  747. data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +0 -313
  748. data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +0 -59
  749. data/ext/gecode-1.3.1/gecode/int/channel/val.icc +0 -239
  750. data/ext/gecode-1.3.1/gecode/int/count.cc +0 -174
  751. data/ext/gecode-1.3.1/gecode/int/count.hh +0 -401
  752. data/ext/gecode-1.3.1/gecode/int/count/int.icc +0 -495
  753. data/ext/gecode-1.3.1/gecode/int/count/rel.icc +0 -100
  754. data/ext/gecode-1.3.1/gecode/int/count/view.icc +0 -332
  755. data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +0 -210
  756. data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +0 -118
  757. data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +0 -377
  758. data/ext/gecode-1.3.1/gecode/int/distinct.cc +0 -77
  759. data/ext/gecode-1.3.1/gecode/int/distinct.hh +0 -272
  760. data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +0 -73
  761. data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +0 -335
  762. data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +0 -62
  763. data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +0 -740
  764. data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +0 -96
  765. data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +0 -107
  766. data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +0 -97
  767. data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +0 -171
  768. data/ext/gecode-1.3.1/gecode/int/dom.cc +0 -81
  769. data/ext/gecode-1.3.1/gecode/int/dom.hh +0 -101
  770. data/ext/gecode-1.3.1/gecode/int/dom/range.icc +0 -85
  771. data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +0 -85
  772. data/ext/gecode-1.3.1/gecode/int/element.cc +0 -58
  773. data/ext/gecode-1.3.1/gecode/int/element.hh +0 -203
  774. data/ext/gecode-1.3.1/gecode/int/element/int.icc +0 -396
  775. data/ext/gecode-1.3.1/gecode/int/element/view.icc +0 -443
  776. data/ext/gecode-1.3.1/gecode/int/exception.icc +0 -137
  777. data/ext/gecode-1.3.1/gecode/int/gcc.cc +0 -708
  778. data/ext/gecode-1.3.1/gecode/int/gcc.hh +0 -338
  779. data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +0 -629
  780. data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +0 -504
  781. data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +0 -760
  782. data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +0 -2375
  783. data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +0 -375
  784. data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +0 -687
  785. data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +0 -236
  786. data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +0 -373
  787. data/ext/gecode-1.3.1/gecode/int/int-set.cc +0 -115
  788. data/ext/gecode-1.3.1/gecode/int/int-set.icc +0 -151
  789. data/ext/gecode-1.3.1/gecode/int/linear.cc +0 -247
  790. data/ext/gecode-1.3.1/gecode/int/linear.hh +0 -1056
  791. data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +0 -439
  792. data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +0 -422
  793. data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +0 -311
  794. data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +0 -503
  795. data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +0 -857
  796. data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +0 -264
  797. data/ext/gecode-1.3.1/gecode/int/linear/post.cc +0 -542
  798. data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +0 -255
  799. data/ext/gecode-1.3.1/gecode/int/propagator.icc +0 -194
  800. data/ext/gecode-1.3.1/gecode/int/regular.cc +0 -40
  801. data/ext/gecode-1.3.1/gecode/int/regular.hh +0 -83
  802. data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +0 -466
  803. data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +0 -172
  804. data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +0 -480
  805. data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +0 -738
  806. data/ext/gecode-1.3.1/gecode/int/rel.cc +0 -293
  807. data/ext/gecode-1.3.1/gecode/int/rel.hh +0 -526
  808. data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +0 -640
  809. data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +0 -212
  810. data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +0 -246
  811. data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +0 -188
  812. data/ext/gecode-1.3.1/gecode/int/sortedness.cc +0 -124
  813. data/ext/gecode-1.3.1/gecode/int/sortedness.hh +0 -108
  814. data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +0 -177
  815. data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +0 -243
  816. data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +0 -232
  817. data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +0 -727
  818. data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +0 -666
  819. data/ext/gecode-1.3.1/gecode/int/var-imp.vis +0 -198
  820. data/ext/gecode-1.3.1/gecode/int/var.icc +0 -590
  821. data/ext/gecode-1.3.1/gecode/int/var/bool.icc +0 -52
  822. data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +0 -65
  823. data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +0 -191
  824. data/ext/gecode-1.3.1/gecode/int/var/imp.cc +0 -361
  825. data/ext/gecode-1.3.1/gecode/int/var/imp.icc +0 -579
  826. data/ext/gecode-1.3.1/gecode/int/var/int.cc +0 -63
  827. data/ext/gecode-1.3.1/gecode/int/var/int.icc +0 -135
  828. data/ext/gecode-1.3.1/gecode/int/view.icc +0 -1219
  829. data/ext/gecode-1.3.1/gecode/int/view/bool.icc +0 -270
  830. data/ext/gecode-1.3.1/gecode/int/view/constint.icc +0 -306
  831. data/ext/gecode-1.3.1/gecode/int/view/int.icc +0 -221
  832. data/ext/gecode-1.3.1/gecode/int/view/iter.icc +0 -49
  833. data/ext/gecode-1.3.1/gecode/int/view/minus.icc +0 -285
  834. data/ext/gecode-1.3.1/gecode/int/view/offset.icc +0 -274
  835. data/ext/gecode-1.3.1/gecode/int/view/print.cc +0 -109
  836. data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +0 -215
  837. data/ext/gecode-1.3.1/gecode/int/view/scale.icc +0 -373
  838. data/ext/gecode-1.3.1/gecode/iter.hh +0 -65
  839. data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +0 -130
  840. data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +0 -208
  841. data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +0 -123
  842. data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +0 -143
  843. data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +0 -206
  844. data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +0 -127
  845. data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +0 -96
  846. data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +0 -202
  847. data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +0 -103
  848. data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +0 -138
  849. data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +0 -112
  850. data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +0 -142
  851. data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +0 -224
  852. data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +0 -71
  853. data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +0 -131
  854. data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +0 -211
  855. data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +0 -125
  856. data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +0 -91
  857. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +0 -247
  858. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +0 -227
  859. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +0 -236
  860. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +0 -126
  861. data/ext/gecode-1.3.1/gecode/kernel.hh +0 -141
  862. data/ext/gecode-1.3.1/gecode/kernel/array.icc +0 -954
  863. data/ext/gecode-1.3.1/gecode/kernel/branching.icc +0 -233
  864. data/ext/gecode-1.3.1/gecode/kernel/core.cc +0 -417
  865. data/ext/gecode-1.3.1/gecode/kernel/core.icc +0 -1681
  866. data/ext/gecode-1.3.1/gecode/kernel/exception.cc +0 -49
  867. data/ext/gecode-1.3.1/gecode/kernel/exception.icc +0 -104
  868. data/ext/gecode-1.3.1/gecode/kernel/macros.icc +0 -98
  869. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +0 -41
  870. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +0 -438
  871. data/ext/gecode-1.3.1/gecode/kernel/memory.icc +0 -205
  872. data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +0 -53
  873. data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +0 -680
  874. data/ext/gecode-1.3.1/gecode/kernel/view.icc +0 -583
  875. data/ext/gecode-1.3.1/gecode/limits.hh +0 -87
  876. data/ext/gecode-1.3.1/gecode/minimodel.hh +0 -942
  877. data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +0 -137
  878. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +0 -207
  879. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +0 -191
  880. data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +0 -66
  881. data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +0 -59
  882. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +0 -103
  883. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +0 -192
  884. data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +0 -200
  885. data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +0 -118
  886. data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +0 -241
  887. data/ext/gecode-1.3.1/gecode/search.hh +0 -745
  888. data/ext/gecode-1.3.1/gecode/search/bab.cc +0 -153
  889. data/ext/gecode-1.3.1/gecode/search/bab.icc +0 -101
  890. data/ext/gecode-1.3.1/gecode/search/dfs.cc +0 -63
  891. data/ext/gecode-1.3.1/gecode/search/dfs.icc +0 -144
  892. data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +0 -109
  893. data/ext/gecode-1.3.1/gecode/search/lds.cc +0 -237
  894. data/ext/gecode-1.3.1/gecode/search/lds.icc +0 -57
  895. data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +0 -219
  896. data/ext/gecode-1.3.1/gecode/search/restart.icc +0 -76
  897. data/ext/gecode-1.3.1/gecode/search/statistics.icc +0 -30
  898. data/ext/gecode-1.3.1/gecode/search/stop.cc +0 -58
  899. data/ext/gecode-1.3.1/gecode/search/stop.icc +0 -100
  900. data/ext/gecode-1.3.1/gecode/set.hh +0 -419
  901. data/ext/gecode-1.3.1/gecode/set/array.cc +0 -114
  902. data/ext/gecode-1.3.1/gecode/set/array.icc +0 -134
  903. data/ext/gecode-1.3.1/gecode/set/branch.cc +0 -57
  904. data/ext/gecode-1.3.1/gecode/set/branch.hh +0 -176
  905. data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +0 -72
  906. data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +0 -112
  907. data/ext/gecode-1.3.1/gecode/set/cardinality.cc +0 -49
  908. data/ext/gecode-1.3.1/gecode/set/convex.cc +0 -43
  909. data/ext/gecode-1.3.1/gecode/set/convex.hh +0 -92
  910. data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +0 -81
  911. data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +0 -51
  912. data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +0 -100
  913. data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +0 -52
  914. data/ext/gecode-1.3.1/gecode/set/distinct.cc +0 -48
  915. data/ext/gecode-1.3.1/gecode/set/distinct.hh +0 -97
  916. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +0 -151
  917. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +0 -50
  918. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +0 -46
  919. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +0 -157
  920. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +0 -124
  921. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +0 -58
  922. data/ext/gecode-1.3.1/gecode/set/dom.cc +0 -224
  923. data/ext/gecode-1.3.1/gecode/set/exception.icc +0 -132
  924. data/ext/gecode-1.3.1/gecode/set/int.cc +0 -139
  925. data/ext/gecode-1.3.1/gecode/set/int.hh +0 -226
  926. data/ext/gecode-1.3.1/gecode/set/int/card.cc +0 -61
  927. data/ext/gecode-1.3.1/gecode/set/int/card.icc +0 -54
  928. data/ext/gecode-1.3.1/gecode/set/int/channel.cc +0 -100
  929. data/ext/gecode-1.3.1/gecode/set/int/channel.icc +0 -75
  930. data/ext/gecode-1.3.1/gecode/set/int/match.cc +0 -148
  931. data/ext/gecode-1.3.1/gecode/set/int/match.icc +0 -67
  932. data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +0 -109
  933. data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +0 -63
  934. data/ext/gecode-1.3.1/gecode/set/int/weights.cc +0 -182
  935. data/ext/gecode-1.3.1/gecode/set/int/weights.icc +0 -174
  936. data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +0 -148
  937. data/ext/gecode-1.3.1/gecode/set/projectors.cc +0 -109
  938. data/ext/gecode-1.3.1/gecode/set/projectors.hh +0 -319
  939. data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +0 -841
  940. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +0 -69
  941. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +0 -66
  942. data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +0 -125
  943. data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +0 -79
  944. data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +0 -127
  945. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +0 -96
  946. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +0 -106
  947. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +0 -76
  948. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +0 -53
  949. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +0 -306
  950. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +0 -192
  951. data/ext/gecode-1.3.1/gecode/set/propagator.icc +0 -96
  952. data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +0 -233
  953. data/ext/gecode-1.3.1/gecode/set/rel-op.cc +0 -96
  954. data/ext/gecode-1.3.1/gecode/set/rel-op.hh +0 -267
  955. data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +0 -528
  956. data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +0 -312
  957. data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +0 -131
  958. data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +0 -198
  959. data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +0 -150
  960. data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +0 -151
  961. data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +0 -292
  962. data/ext/gecode-1.3.1/gecode/set/rel.cc +0 -201
  963. data/ext/gecode-1.3.1/gecode/set/rel.hh +0 -250
  964. data/ext/gecode-1.3.1/gecode/set/rel/common.icc +0 -109
  965. data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +0 -101
  966. data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +0 -88
  967. data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +0 -132
  968. data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +0 -142
  969. data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +0 -121
  970. data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +0 -80
  971. data/ext/gecode-1.3.1/gecode/set/select.cc +0 -88
  972. data/ext/gecode-1.3.1/gecode/set/select.hh +0 -113
  973. data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +0 -267
  974. data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +0 -59
  975. data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +0 -91
  976. data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +0 -112
  977. data/ext/gecode-1.3.1/gecode/set/select/inter.icc +0 -300
  978. data/ext/gecode-1.3.1/gecode/set/sequence.cc +0 -48
  979. data/ext/gecode-1.3.1/gecode/set/sequence.hh +0 -97
  980. data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +0 -79
  981. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +0 -83
  982. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +0 -63
  983. data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +0 -61
  984. data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +0 -53
  985. data/ext/gecode-1.3.1/gecode/set/var-imp.vis +0 -205
  986. data/ext/gecode-1.3.1/gecode/set/var.icc +0 -1090
  987. data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +0 -192
  988. data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +0 -235
  989. data/ext/gecode-1.3.1/gecode/set/var/imp.cc +0 -127
  990. data/ext/gecode-1.3.1/gecode/set/var/imp.icc +0 -356
  991. data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +0 -256
  992. data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +0 -512
  993. data/ext/gecode-1.3.1/gecode/set/var/iter.icc +0 -47
  994. data/ext/gecode-1.3.1/gecode/set/var/set.cc +0 -99
  995. data/ext/gecode-1.3.1/gecode/set/var/set.icc +0 -282
  996. data/ext/gecode-1.3.1/gecode/set/view.icc +0 -1075
  997. data/ext/gecode-1.3.1/gecode/set/view/complement.icc +0 -525
  998. data/ext/gecode-1.3.1/gecode/set/view/const.icc +0 -651
  999. data/ext/gecode-1.3.1/gecode/set/view/print.cc +0 -120
  1000. data/ext/gecode-1.3.1/gecode/set/view/set.icc +0 -217
  1001. data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +0 -348
  1002. data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +0 -152
  1003. data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +0 -131
  1004. data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +0 -157
  1005. data/ext/gecode-1.3.1/gecode/support/random.hh +0 -100
  1006. data/ext/gecode-1.3.1/gecode/support/shared-array.hh +0 -255
  1007. data/ext/gecode-1.3.1/gecode/support/sort.hh +0 -193
  1008. data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +0 -240
  1009. data/ext/gecode-1.3.1/gecode/support/static-stack.hh +0 -117
  1010. data/ext/gecode-1.3.1/misc/debian/Makefile.am +0 -8
  1011. data/ext/gecode-1.3.1/misc/debian/copyright +0 -44
  1012. data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +0 -460
  1013. data/ext/gecode-1.3.1/misc/fixproperties.sh +0 -32
  1014. data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +0 -12
  1015. data/ext/gecode-1.3.1/misc/gecode-search.pc.in +0 -12
  1016. data/ext/gecode-1.3.1/misc/gecode.pc.in +0 -12
  1017. data/ext/gecode-1.3.1/misc/genchangelog.perl +0 -190
  1018. data/ext/gecode-1.3.1/misc/genlicense.perl +0 -113
  1019. data/ext/gecode-1.3.1/misc/genstatistics.perl +0 -155
  1020. data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +0 -170
  1021. data/ext/gecode-1.3.1/misc/genvarimp.perl +0 -666
  1022. data/ext/gecode-1.3.1/misc/getrevision.perl +0 -32
  1023. data/ext/gecode-1.3.1/misc/makedepend.perl +0 -66
  1024. data/ext/gecode-1.3.1/test/int.cc +0 -497
  1025. data/ext/gecode-1.3.1/test/int.hh +0 -119
  1026. data/ext/gecode-1.3.1/test/int/arithmetic.cc +0 -262
  1027. data/ext/gecode-1.3.1/test/int/basic.cc +0 -42
  1028. data/ext/gecode-1.3.1/test/int/bool.cc +0 -189
  1029. data/ext/gecode-1.3.1/test/int/channel.cc +0 -79
  1030. data/ext/gecode-1.3.1/test/int/count.cc +0 -264
  1031. data/ext/gecode-1.3.1/test/int/distinct.cc +0 -121
  1032. data/ext/gecode-1.3.1/test/int/dom.cc +0 -69
  1033. data/ext/gecode-1.3.1/test/int/element.cc +0 -132
  1034. data/ext/gecode-1.3.1/test/int/gcc.cc +0 -592
  1035. data/ext/gecode-1.3.1/test/int/linear.cc +0 -315
  1036. data/ext/gecode-1.3.1/test/int/minimodel.cc +0 -451
  1037. data/ext/gecode-1.3.1/test/int/regular.cc +0 -105
  1038. data/ext/gecode-1.3.1/test/int/rel.cc +0 -283
  1039. data/ext/gecode-1.3.1/test/int/scheduling.cc +0 -259
  1040. data/ext/gecode-1.3.1/test/int/sortedness.cc +0 -272
  1041. data/ext/gecode-1.3.1/test/intset.cc +0 -40
  1042. data/ext/gecode-1.3.1/test/log.cc +0 -515
  1043. data/ext/gecode-1.3.1/test/log.hh +0 -68
  1044. data/ext/gecode-1.3.1/test/set.cc +0 -542
  1045. data/ext/gecode-1.3.1/test/set.hh +0 -152
  1046. data/ext/gecode-1.3.1/test/set/convex.cc +0 -94
  1047. data/ext/gecode-1.3.1/test/set/distinct.cc +0 -148
  1048. data/ext/gecode-1.3.1/test/set/dom.cc +0 -67
  1049. data/ext/gecode-1.3.1/test/set/int.cc +0 -249
  1050. data/ext/gecode-1.3.1/test/set/projection.cc +0 -333
  1051. data/ext/gecode-1.3.1/test/set/rel-op.cc +0 -662
  1052. data/ext/gecode-1.3.1/test/set/rel.cc +0 -198
  1053. data/ext/gecode-1.3.1/test/set/select.cc +0 -108
  1054. data/ext/gecode-1.3.1/test/set/sequence.cc +0 -83
  1055. data/ext/gecode-1.3.1/test/stress.cc +0 -93
  1056. data/ext/gecode-1.3.1/test/stress.hh +0 -74
  1057. data/ext/gecode-1.3.1/test/stress/distinct.cc +0 -70
  1058. data/ext/gecode-1.3.1/test/stress/domain.cc +0 -69
  1059. data/ext/gecode-1.3.1/test/stress/exec.cc +0 -60
  1060. data/ext/gecode-1.3.1/test/stress/minsort.cc +0 -63
  1061. data/ext/gecode-1.3.1/test/stress/regular.cc +0 -112
  1062. data/ext/gecode-1.3.1/test/test.cc +0 -215
  1063. data/ext/gecode-1.3.1/test/test.hh +0 -107
@@ -1,1681 +0,0 @@
1
- /*
2
- * Main authors:
3
- * Christian Schulte <schulte@gecode.org>
4
- * Guido Tack <tack@gecode.org>
5
- *
6
- * Copyright:
7
- * Christian Schulte, 2002
8
- * Guido Tack, 2003
9
- *
10
- * Bugfixes provided by:
11
- * Alexander Samoilov <alexander_samoilov@yahoo.com>
12
- *
13
- * Last modified:
14
- * $Date: 2006-10-25 13:51:24 +0200 (Wed, 25 Oct 2006) $ by $Author: schulte $
15
- * $Revision: 3787 $
16
- *
17
- * This file is part of Gecode, the generic constraint
18
- * development environment:
19
- * http://www.gecode.org
20
- *
21
- * See the file "LICENSE" for information on usage and
22
- * redistribution of this file, and for a
23
- * DISCLAIMER OF ALL WARRANTIES.
24
- *
25
- */
26
-
27
- namespace Gecode {
28
-
29
- /**
30
- * \defgroup TaskVarMEPC Generic modification events and propagation conditions
31
- *
32
- * Predefined modification events must be taken into account
33
- * by variable types.
34
- * \ingroup TaskVar
35
- */
36
- //@{
37
- /// Type for modification events
38
- typedef int ModEvent;
39
-
40
- /// Generic modification event: failed variable
41
- const ModEvent ME_GEN_FAILED = -1;
42
- /// Generic modification event: no modification
43
- const ModEvent ME_GEN_NONE = 0;
44
- /// Generic modification event: variable is assigned a value
45
- const ModEvent ME_GEN_ASSIGNED = 1;
46
- /// Generic modification event: maximal modification event
47
- const ModEvent ME_GEN_MAX = 15;
48
-
49
- /// Type for propagation conditions
50
- typedef int PropCond;
51
- /// Propagation condition for an assigned variable
52
- const PropCond PC_GEN_ASSIGNED = 0;
53
- /// Propagation conditions must be between 0 and 15
54
- const PropCond PC_GEN_MAX = 15;
55
- //@}
56
-
57
-
58
- /**
59
- * \brief %Variable type identifiers
60
- *
61
- * Each variable type must have a unique variable type identifier. The
62
- * kernel supports at most eight different variable type identifiers.
63
- *
64
- * If you want to add your own variable type, you have to make sure that
65
- * file is created in the subdirectory vti. The names of the file defines
66
- * the name of the variable type identifier (for example, if the name of
67
- * the file is INT, it defines the identifier VTI_INT).
68
- * \ingroup TaskVar
69
- */
70
- enum VarTypeId {
71
- #include "gecode/vti.icc"
72
- VTI_LAST, ///< Maximal variable type identifier plus one
73
- VTI_NOIDX = 0 ///< Used for variables without indexing structure
74
- };
75
-
76
-
77
- /*
78
- * These are the classes of interest
79
- *
80
- */
81
- class Actor;
82
- class Propagator;
83
- class Space;
84
- template <VarTypeId VTI, PropCond PC, class MED> class Variable;
85
-
86
-
87
- /*
88
- * Variables
89
- *
90
- */
91
-
92
- /**
93
- * \brief Base-class for variable implementations
94
- *
95
- * Serves as base-class that can be used without having to know any
96
- * template arguments.
97
- * \ingroup TaskVar
98
- */
99
- class VarBase {};
100
-
101
- /**
102
- * \brief Base-class for variable type processor
103
- *
104
- * Serves as base-class that can be used without having to know any
105
- * template arguments.
106
- * \ingroup TaskVar
107
- */
108
- class VarTypeProcessorBase {
109
- public:
110
- /// Process modified variables linked from \a x
111
- virtual void process(Space* home, VarBase* x) = 0;
112
- /**
113
- * \brief Update copied variables linked from \a x
114
- *
115
- * The argument \a sub gives the array where subscriptions are
116
- * to be stored.
117
- */
118
- virtual void update(VarBase* x, Propagator**& sub) = 0;
119
- /**
120
- * \brief Dispose variables
121
- *
122
- * If needed for the variable type, dispose a list of
123
- * variables, with \a x being the first variable on the list.
124
- */
125
- virtual void dispose(Space* home, VarBase* x) = 0;
126
- /// Destructor (not really used)
127
- GECODE_KERNEL_EXPORT virtual ~VarTypeProcessorBase(void);
128
- };
129
-
130
- /**
131
- * \brief %Variable type processor
132
- *
133
- * Base class for variable type processor for variable type index \a VTI
134
- * and maximum propagation condition \a PC.
135
- * \ingroup TaskVar
136
- */
137
- template <VarTypeId VTI, PropCond PC, class MED>
138
- class VarTypeProcessor : public VarTypeProcessorBase {
139
- public:
140
- /// Constructor (registers processor with kernel)
141
- VarTypeProcessor(void);
142
- /**
143
- * \brief Update copied variables linked from \a x
144
- *
145
- * The argument \a sub gives the array where subscriptions are
146
- * to be stored.
147
- */
148
- virtual void update(VarBase* x, Propagator**& sub);
149
- /**
150
- * \brief Dispose variables
151
- *
152
- * If needed for the variable type, dispose a list of
153
- * variables, with \a x being the first variable on the list.
154
- */
155
- virtual void dispose(Space* home, VarBase* x);
156
- };
157
-
158
- /**
159
- * \brief Propagator modification events
160
- *
161
- * Propagator modification events are used by propagators. A
162
- * propagator stores a modification event for each variable type.
163
- * They can be accessed through a variable or a view from a given
164
- * propagator. They can be constructed from a given modevent by
165
- * a variable or view.
166
- * \ingroup TaskActor
167
- */
168
- typedef int PropModEvent;
169
-
170
-
171
- /**
172
- * \brief Base-class for variable implementations
173
- *
174
- * Implements variable implementation for variable type identifier
175
- * \a VTI and largest possible propagation condition \a PC.
176
- * \ingroup TaskVar
177
- */
178
- template <VarTypeId VTI, PropCond PC, class MED>
179
- class Variable : public VarBase {
180
- friend class Space;
181
- friend class Propagator;
182
- friend class VarTypeProcessor<VTI,PC,MED>;
183
- private:
184
- Variable* _next; ///< Either next modified or copied variable
185
- union {
186
- /**
187
- * \brief Combines the number of free entries with modification events
188
- *
189
- * The least four bits are reserved for the modification events, the
190
- * remaining 28 bits are for the number of free entries.
191
- *
192
- */
193
- unsigned int free_me;
194
- /// Store the forwarding pointer during copying
195
- Variable* fwd;
196
- } u;
197
- Propagator** idx[PC+2]; ///< Stores where entries start (idx[pc]}
198
-
199
- /// Manage number of free entries internally
200
- unsigned int free(void) const;
201
- /// Manage number of free entries internally
202
- void free(unsigned int n);
203
- /// Manage number of free entries internally
204
- void free_inc(void);
205
- /// Manage number of free entries internally
206
- void free_dec(void);
207
-
208
- /**
209
- * \brief Update copied variable \a x
210
- *
211
- * The argument \a sub gives the array where subscriptions are
212
- * to be stored.
213
- */
214
- void update(Variable* x, Propagator**& sub);
215
-
216
- /// Resize subscription array
217
- void resize(Space* home);
218
-
219
- public:
220
- /// Creation
221
- Variable(Space* home);
222
-
223
- /// \name Dependencies
224
- //@{
225
- /** \brief Subscribe propagator \a p with propagation condition \a pc to variable
226
- *
227
- * In case \a process is false, the propagator is just subscribed but
228
- * not processed for execution (this must be used when creating
229
- * subscriptions during propagation).
230
- *
231
- * In case the variable is assigned (that is, \a assigned is
232
- * true), the subscribing propagator is processed for execution.
233
- * Otherwise, the propagator subscribes and is processed for execution
234
- * with modification event \a me provided that \a pc is different
235
- * from \a PC_GEN_ASSIGNED.
236
- */
237
- void subscribe(Space* home, Propagator* p, PropCond pc,
238
- bool assigned, ModEvent me, bool process);
239
- /// Cancel subscription of propagator \a p with propagation condition \a pc
240
- void cancel(Space* home, Propagator* p, PropCond pc);
241
- /// Return degree (number of subscribed propagators)
242
- unsigned int degree(void) const;
243
- /// Notify that variable implementation has been modified with modification event \a me
244
- void notify(Space* home, ModEvent me);
245
- /// Notify that variable implementation has been assigned (only if variable has single modification event)
246
- void notify(Space* home);
247
- //@}
248
-
249
- /// \name Processing modified variables
250
- //@{
251
- /// Check whether variable has been modified during propagation
252
- bool modified(void) const;
253
- //@}
254
-
255
- /// \name Cloning variables
256
- //@{
257
- /// Constructor for cloning
258
- Variable(Space* home, bool share, Variable& x);
259
- /// Is variable already copied
260
- bool copied(void) const;
261
- /// Use forward pointer if variable already copied
262
- Variable* forward(void) const;
263
- //@}
264
-
265
- /// \name Propagator modification events
266
- //@{
267
- /// Return modification event for variable from propagator \a p
268
- static ModEvent pme(const Propagator* p);
269
- /// Translate modification event \a me into propagator modification event
270
- static PropModEvent pme(ModEvent me);
271
- /// Combine modifications events \a me1 and \a me2
272
- static ModEvent combine(ModEvent me1, ModEvent me2);
273
- //@}
274
-
275
- /// \name Processing modified variables
276
- //@{
277
- /// Return next modified variable and reset (during processing)
278
- Variable* next(void);
279
- /// Return current modification event of variable
280
- ModEvent modevent(void) const;
281
- /// Set modification event to \a me
282
- void modevent(ModEvent me);
283
- /// Process subscribed propagators
284
- void process(Space* home, PropCond pc1, PropCond pc2, ModEvent me);
285
- /// Process subscribed propagators for assigned variable
286
- void process(Space* home);
287
- //@}
288
-
289
- /// \name Memory management
290
- //@{
291
- /// Allocate memory from space
292
- static void* operator new(size_t,Space*);
293
- /// Return memory to space
294
- static void operator delete(void*,Space*);
295
- /// Needed for exceptions
296
- static void operator delete(void*);
297
- //@}
298
- };
299
-
300
-
301
-
302
-
303
- /**
304
- * \brief Status of constraint propagation and branching commit
305
- * \ingroup TaskActor
306
- */
307
- enum ExecStatus {
308
- ES_FAILED = -1, ///< Execution has resulted in failure
309
- ES_NOFIX = 0, ///< Propagation has not computed fixpoint
310
- ES_OK = 0, ///< Execution is okay
311
- ES_FIX = 1, ///< Propagation has computed fixpoint
312
- ES_SUBSUMED = 2, ///< %Propagator is subsumed (entailed)
313
- __ES_FIX_PARTIAL = 3, ///< Internal: do not use
314
- __ES_NOFIX_PARTIAL = 4 ///< Internal: do not use
315
- };
316
-
317
- /**
318
- * \brief Classification of propagation cost
319
- * \ingroup TaskActor
320
- */
321
- enum PropCost {
322
- PC_CRAZY_LO = 0, ///< Exponential complexity, cheap
323
- PC_CRAZY_HI = 0, ///< Exponential complexity, expensive
324
- PC_CUBIC_LO = 1, ///< Cubic complexity, cheap
325
- PC_CUBIC_HI = 1, ///< Cubic complexity, expensive
326
- PC_QUADRATIC_LO = 2, ///< Quadratic complexity, cheap
327
- PC_QUADRATIC_HI = 2, ///< Quadratic complexity, expensive
328
- PC_LINEAR_HI = 3, ///< Linear complexity, expensive
329
- PC_LINEAR_LO = 4, ///< Linear complexity, cheap
330
- PC_TERNARY_HI = 5, ///< Three variables, expensive
331
- PC_BINARY_HI = 6, ///< Two variables, expensive
332
- PC_TERNARY_LO = 6, ///< Three variables, cheap
333
- PC_BINARY_LO = 7, ///< Two variables, cheap
334
- PC_UNARY_LO = 7, ///< Only single variable, cheap
335
- PC_UNARY_HI = 7, ///< Only single variable, expensive
336
- PC_MAX = 7 ///< Maximal cost value
337
- };
338
-
339
- /**
340
- * \brief Double-linked list for actors
341
- *
342
- * Used to maintain which actors belong to a space and also
343
- * (for propagators) to organize actors in the queue of
344
- * waiting propagators.
345
- */
346
- class ActorLink {
347
- friend class Actor;
348
- friend class Space;
349
- template <VarTypeId VTI, PropCond PC, class MED> friend class Variable;
350
- private:
351
- ActorLink* _next; ActorLink* _prev;
352
- public:
353
- //@{
354
- /// Routines for double-linked list
355
- ActorLink* prev(void) const; void prev(ActorLink*);
356
- ActorLink* next(void) const; void next(ActorLink*);
357
- //@}
358
-
359
-
360
- /// Initialize links (self-linked)
361
- void init(void);
362
- /// Remove from predecessor and successor
363
- void unlink(void);
364
- /// Insert \a al directly after this
365
- void head(ActorLink* al);
366
- /// Insert \a al directly before this
367
- void tail(ActorLink* al);
368
- };
369
-
370
-
371
- /**
372
- * \brief Double-linked list for deleting actors
373
- *
374
- * Used for actors that must be deleted (forced deletion) when a space
375
- * is deleted (even if the space is failed).
376
- *
377
- * The reason why it is not conjoined with ActorLink is that the array
378
- * of propagator queues just need the normal linkage, but not the linkage
379
- * for deletion.
380
- */
381
- class ActorDeleteLink : public ActorLink {
382
- friend class Actor;
383
- friend class Space;
384
- template <VarTypeId VTI, PropCond PC, class MED> friend class Variable;
385
- private:
386
- ActorDeleteLink* _next_d; ActorDeleteLink* _prev_d;
387
- public:
388
- ActorDeleteLink* next_delete(void) const;
389
- void next_delete(ActorDeleteLink*);
390
- ActorDeleteLink* prev_delete(void) const;
391
- void prev_delete(ActorDeleteLink*);
392
-
393
- /// Initialize links (self-linked)
394
- void init_delete(void);
395
- void unlink_delete(void);
396
- void insert_delete(ActorDeleteLink*,bool);
397
- };
398
-
399
-
400
-
401
- /**
402
- * \brief Base-class for both propagators and branchings
403
- * \ingroup TaskActor
404
- */
405
- class Actor : private ActorDeleteLink {
406
- friend class Space;
407
- template <VarTypeId VTI, PropCond PC, class MED> friend class Variable;
408
- public:
409
- /// Create copy
410
- virtual Actor* copy(Space*,bool) = 0;
411
- /// Delete actor and return its size
412
- GECODE_KERNEL_EXPORT
413
- virtual size_t dispose(Space* home);
414
-
415
- /// \name Memory management
416
- //@{
417
- /// Flush cache datastructures
418
- GECODE_KERNEL_EXPORT virtual void flush(void);
419
- /// Report size occupied by cached datastructures
420
- GECODE_KERNEL_EXPORT virtual size_t cached(void) const;
421
- /// Allocate memory from space
422
- static void* operator new(size_t s, Space* home);
423
- /// No-op for exceptions
424
- static void operator delete(void* p, Space* home);
425
- private:
426
- #ifndef __GNUC__
427
- /// Not used (uses dispose instead)
428
- static void operator delete(void* p, size_t s);
429
- #endif
430
- /// Not used
431
- static void* operator new(size_t s);
432
- /// Destruct: unlink, dispose, and reclaim memory
433
- void destruct(Space* home);
434
- //@}
435
- #ifdef __GNUC__
436
- public:
437
- /// To avoid warnings from GCC
438
- virtual ~Actor(void) {}
439
- /// Not used (uses dispose instead)
440
- static void operator delete(void* p, size_t s);
441
- #endif
442
- };
443
-
444
-
445
-
446
- /**
447
- * \brief Base-class for propagators
448
- * \ingroup TaskActor
449
- */
450
- class Propagator : public Actor {
451
- friend class Space;
452
- template <VarTypeId VTI, PropCond PC, class MED> friend class Variable;
453
- private:
454
- PropModEvent pme;
455
- protected:
456
- /**
457
- * \brief Constructor for creation
458
- *
459
- * Force deletion, if \a fd is true
460
- */
461
- Propagator(Space* home, bool fd=false);
462
- /// Constructor for cloning \a p
463
- Propagator(Space* home, bool share, Propagator& p);
464
-
465
- /// \name Partial fixpoints
466
- //@{
467
- /**
468
- * \brief %Propagator has computed partial fixpoint
469
- *
470
- * %Set propagator modification events after processing of
471
- * variables to \a pme.
472
- * \warning Has a side-effect on the propagator. Overwrites
473
- * the propagator modification events of a propagator.
474
- * Use only directly with returning from propagation.
475
- * \ingroup TaskActor
476
- */
477
- ExecStatus ES_FIX_PARTIAL(PropModEvent pme);
478
- /**
479
- * \brief %Propagator has not computed partial fixpoint
480
- *
481
- * %Set propagator modification events before processing of
482
- * variables to \a pme.
483
- * \warning Has a side-effect on the propagator. Overwrites
484
- * the propagator modification events of a propagator.
485
- * Use only directly with returning from propagation.
486
- * \ingroup TaskActor
487
- */
488
- ExecStatus ES_NOFIX_PARTIAL(PropModEvent pme);
489
- //@}
490
- public:
491
- /// \name Propagation
492
- //@{
493
- /// Propagation function
494
- virtual ExecStatus propagate(Space*) = 0;
495
- /// Cost function
496
- virtual PropCost cost(void) const = 0;
497
- //@}
498
- };
499
-
500
-
501
-
502
- /*
503
- * Branchings
504
- *
505
- */
506
-
507
- class Branching;
508
-
509
- /**
510
- * \brief Branch description for batch recomputation
511
- *
512
- * Must be refined by inheritance such that the information stored
513
- * inside a branching description is sufficient to redo a tell
514
- * performed by a particular branching.
515
- *
516
- * \ingroup TaskActor
517
- */
518
- class BranchingDesc {
519
- friend class Space;
520
- private:
521
- const unsigned int id; ///< Identity to match creating branching
522
- const unsigned int alt; ///< Number of alternatives
523
- protected:
524
- /// Initialize for particular branching \a b and alternatives \a a
525
- BranchingDesc(const Branching* b, const unsigned int a);
526
- public:
527
- /// Destructor
528
- GECODE_KERNEL_EXPORT virtual ~BranchingDesc(void);
529
-
530
- /// Return number of alternatives
531
- unsigned int alternatives(void) const;
532
-
533
- /// Report size occupied by branching description
534
- virtual size_t size(void) const = 0;
535
- /// Allocate memory from heap
536
- static void* operator new(size_t);
537
- /// Return memory to heap
538
- static void operator delete(void*);
539
- };
540
-
541
- /**
542
- * \brief Base-class for branchings
543
- *
544
- * Note that branchings cannot be created inside a propagator
545
- * (no idea why one would like to that anyway). If you do that
546
- * the system will explode in a truly interesting way.
547
- *
548
- * \ingroup TaskActor
549
- */
550
- class Branching : public Actor {
551
- friend class Space;
552
- friend class BranchingDesc;
553
- private:
554
- unsigned int id; ///< Unique identity (to match to branching descriptions)
555
- protected:
556
- /// Constructor for creation, force disposal if \a fd is true
557
- Branching(Space* home, bool fd=false);
558
- /// Constructor for cloning \a b
559
- Branching(Space* home, bool share, Branching& b);
560
-
561
- public:
562
- /// \name Branching
563
- //@{
564
- /**
565
- * \brief Check status of branching, return true if alternatives left
566
- *
567
- * This method is called when Space::status is called, it determines
568
- * whether to continue branching with this branching or move on to
569
- * the (possibly) next branching.
570
- *
571
- */
572
- virtual bool status(const Space* home) const = 0;
573
- /**
574
- * \brief Return branching description
575
- *
576
- * Note that this method can rely on the fact that it is called
577
- * immediately after a previous call to status. Hence, it is safe
578
- * to remember computation from status in order to speed up
579
- * description.
580
- *
581
- */
582
- virtual const BranchingDesc* description(const Space* home) const = 0;
583
- /**
584
- * \brief Commit for branching description \a d and alternative \a a
585
- *
586
- * The current branching in the space \a home performs a commit from
587
- * the information provided by the branching description \a d
588
- * and the alternative \a a.
589
- */
590
- virtual ExecStatus commit(Space* home, const BranchingDesc* d,
591
- unsigned int a) = 0;
592
- //@}
593
- };
594
-
595
-
596
-
597
- /**
598
- * \brief %Space status
599
- * \ingroup TaskSearch
600
- */
601
- enum SpaceStatus {
602
- SS_FAILED, ///< %Space is failed
603
- SS_SOLVED, ///< %Space is solved (no branching left)
604
- SS_BRANCH ///< %Space must be branched (at least one branching left)
605
- };
606
-
607
- /**
608
- * \brief Computation spaces
609
- */
610
- class Space {
611
- friend class Propagator;
612
- friend class Branching;
613
- template <VarTypeId VTI, PropCond PC, class MED> friend class Variable;
614
- template <VarTypeId VTI, PropCond PC, class MED> friend class VarTypeProcessor;
615
- private:
616
- MemoryManager mm; ///< Performs memory management for space
617
-
618
- /**
619
- * \name Processing variables
620
- */
621
- //@{
622
- /// Registered variable type processors
623
- GECODE_KERNEL_EXPORT
624
- static VarTypeProcessorBase* vtp[VTI_LAST];
625
- /// Array of all modified or copied variables (entry points)
626
- VarBase* vars[VTI_LAST];
627
- /// Array of lists of variables that need deletion
628
- VarBase* vars_dispose[VTI_LAST];
629
- /// To keep variables during copying without index structure
630
- VarBase* vars_noidx;
631
- /// Process all modified variables by delegating to registered processors
632
- void process(void);
633
- //@}
634
-
635
- /**
636
- * \name Pool of waiting propagators
637
- */
638
- //@{
639
- /// Waiting propagators according to cost
640
- ActorLink pool[PC_MAX+1];
641
- /// Next cost level to check
642
- int pool_next;
643
- /// Put propagator \a p to pool
644
- void pool_put(Propagator* p);
645
- /// Get propagator \a p from pool
646
- bool pool_get(Propagator*& p);
647
- //@}
648
-
649
- /**
650
- * \brief Doubly linked list of all actors
651
- *
652
- * Propagators are stored at the beginning, branchings (if any) at
653
- * the end.
654
- */
655
- ActorDeleteLink a_actors;
656
- /**
657
- * \brief Points to the first branching to be used for status
658
- *
659
- * If equal to &a_actors, no branching does exist.
660
- *
661
- * If it is NULL, the space is failed.
662
- *
663
- */
664
- Branching* b_status;
665
- /**
666
- * \brief Points to the first branching to be used for commit
667
- *
668
- * Note that \a b_commit can point to an earlier branching
669
- * than \a b_status. This reflects the fact that the earlier
670
- * branching is already done (that is, status on that branching
671
- * returns false) but there might be still branching descriptions
672
- * referring to the earlier branching.
673
- *
674
- * If equal to &a_actors, no branching does exist.
675
- *
676
- */
677
- Branching* b_commit;
678
- /// Id of next branching to be created
679
- unsigned int branch_id;
680
-
681
- /**
682
- * \brief Number of subscriptions
683
- *
684
- * This number includes both the number of subscriptions and
685
- * one free slot and hence can be considered as a conservative
686
- * approximation of the real number of subscriptions. The number
687
- * becomes more accurate after cloning a space.
688
- *
689
- */
690
- unsigned int n_sub;
691
- /**
692
- * \brief Memory area used for storing subscriptions
693
- *
694
- * This area is only used when a space is created by cloning, otherwise
695
- * subscriptions are stored in space-allocated memory.
696
- *
697
- */
698
- Propagator** sub;
699
- /// Used for default arguments
700
- GECODE_KERNEL_EXPORT static unsigned long int unused_uli;
701
-
702
- /// Perform propagation, return number of propagation steps
703
- GECODE_KERNEL_EXPORT unsigned long int propagate(void);
704
-
705
- /// Add new propagator \a p to space (force disposal, if \a fd is true)
706
- void propagator(Propagator* p, bool fd);
707
- /// Readd propagator \a p (after performing propagation)
708
- void propagator(Propagator*);
709
- /// Add new branching \a b to space (force disposal, if \a fd is true)
710
- void branching(Branching* b, bool fd);
711
-
712
- /**
713
- * \name Processing propagators
714
- */
715
- //@{
716
- /// Process propagator \a p with modification event \a me
717
- template <VarTypeId VTI, class MED>
718
- void process(Propagator* p, ModEvent me);
719
- /// Process propagator \a p with modification event ME_GEN_ASSIGNED
720
- template <VarTypeId VTI, class MED>
721
- void process(Propagator* p);
722
- //@}
723
-
724
-
725
- public:
726
- /**
727
- * \brief Default constructor
728
- * \ingroup TaskIntScript
729
- */
730
- GECODE_KERNEL_EXPORT Space(void);
731
- /**
732
- * \brief Destructor
733
- * \ingroup TaskIntScript
734
- */
735
- GECODE_KERNEL_EXPORT virtual ~Space(void);
736
- /**
737
- * \brief Constructor for cloning
738
- *
739
- * Must copy and update all data structures (such as variables
740
- * and variable arrays) required by the subclass of Space.
741
- *
742
- * If \a share is true, share all data structures among copies.
743
- * Otherwise, make independent copies.
744
- * \ingroup TaskIntScript
745
- */
746
- GECODE_KERNEL_EXPORT Space(bool share, Space& s);
747
- /**
748
- * \brief Copying member function
749
- *
750
- * Must create a new object using the constructor for cloning.
751
- * \ingroup TaskIntScript
752
- */
753
- virtual Space* copy(bool share) = 0;
754
- /**
755
- * \brief Allocate memory from heap for new space
756
- * \ingroup TaskIntScript
757
- */
758
- static void* operator new(size_t);
759
- /**
760
- * \brief Free memory allocated from heap
761
- * \ingroup TaskIntScript
762
- */
763
- static void operator delete(void*);
764
-
765
-
766
-
767
-
768
- /*
769
- * Member functions for search engines
770
- *
771
- */
772
-
773
- /**
774
- * \brief Query space status
775
- *
776
- * Propagates the space until fixpoint or failure and
777
- * increments \a pn by the number of propagator executions.
778
- * - if the space is failed, SpaceStatus::SS_FAILED is returned.
779
- * - if the space is not failed but the space has no branching left,
780
- * SpaceStatus::SS_SOLVED is returned.
781
- * - otherwise, SpaceStatus::SS_BRANCH is returned.
782
- * \ingroup TaskSearch
783
- */
784
- SpaceStatus status(unsigned long int& pn=unused_uli);
785
-
786
- /**
787
- * \brief Create new branching description for current branching
788
- *
789
- * This member function can only be called after the member function
790
- * Space::status on the same space has been called and in between
791
- * no non-const member function has been called on this space.
792
- *
793
- * Note that the above invariant obly pertains to calls of member
794
- * functions of the same space. If the invariant is violated, the
795
- * system is likely to crash (hopefully it does). In particular, if
796
- * applied to a space with no current branching, the system will
797
- * crash.
798
- *
799
- * \ingroup TaskSearch
800
- */
801
- const BranchingDesc* description(void) const;
802
-
803
- /**
804
- * \brief Clone space
805
- *
806
- * Propagates the space until fixpoint and increments \a pn by the
807
- * number of propagator executions. If propagation results in
808
- * a failed space, an exception of type SpaceFailed is thrown.
809
- *
810
- * Otherwise, a clone of the space is returned. If \a shared is true,
811
- * sharable datastructures are shared among the clone and the original
812
- * space. If \a shared is false, independent copies of the shared
813
- * datastructures must be created. This means that a clone with no
814
- * sharing can be used in a different thread without any interaction
815
- * with the original space.
816
- *
817
- * \ingroup TaskSearch
818
- */
819
- GECODE_KERNEL_EXPORT
820
- Space* clone(bool share=true, unsigned long int& pn=unused_uli);
821
-
822
- /**
823
- * \brief Commit branching description \a d and for alternative \a a
824
- *
825
- * The current branching in the space performs a commit from
826
- * the information provided by the branching description \a d
827
- * and the alternative \a a.
828
- *
829
- * Note that no propagation is perfomed (to support batch
830
- * recomputation), in order to perform propagation the member
831
- * function status must be used.
832
- *
833
- * Committing with branching descriptions must be carried
834
- * out in the same order as the branch descriptions have been
835
- * obtained by the member function Space::description().
836
- *
837
- * It is perfectly okay to add constraints interleaved with
838
- * branching descriptions (provided they are in the right order).
839
- * However, if propagation is performed by calling the member
840
- * function status and then new branching descriptions are
841
- * computed, these branching descriptions are different.
842
- *
843
- * Committing throws the following exceptions:
844
- * - SpaceNoBranching, if the space has no current branching (it is
845
- * already solved).
846
- * - SpaceIllegalAlternative, if \a a is not smaller than the number
847
- * of alternatives supported by the branching description \a d.
848
- *
849
- * \ingroup TaskSearch
850
- */
851
- GECODE_KERNEL_EXPORT
852
- void commit(const BranchingDesc* d, unsigned int a);
853
-
854
- /**
855
- * \brief Flush cache datastructures in actors
856
- *
857
- * Flushes caches of actors in the space. This is useful to free
858
- * memory (in particular when considering a space to be stored
859
- * for later use such as during search). Even better is to make a
860
- * clone of the space.
861
- *
862
- * \ingroup TaskSearch
863
- */
864
- GECODE_KERNEL_EXPORT
865
- void flush(void);
866
-
867
-
868
- /*
869
- * Status checking and failing outside actors
870
- *
871
- */
872
-
873
- /**
874
- * \brief Fail space
875
- *
876
- * This is useful for failing outside of actors. Never use inside
877
- * a propagate or commit member function. The system will crash!
878
- * \ingroup TaskActor
879
- */
880
- void fail(void);
881
- /**
882
- * \brief Check whether space is failed
883
- *
884
- * Note that this does not perform propagation. This is useful
885
- * for posting actors: only if a space is not yet failed, new
886
- * actors are allowed to be created.
887
- * \ingroup TaskActor
888
- */
889
- bool failed(void) const;
890
- /**
891
- * \brief Return number of propagators
892
- *
893
- * Note that this function takes linear time in the number of
894
- * propagators. The number is only accurate when the space is
895
- * stable (that is, at fixpoint and all propagation is done).
896
- *
897
- * Throws an exception of type SpaceFailed, if the space is failed.
898
- */
899
- GECODE_KERNEL_EXPORT
900
- unsigned int propagators(void) const;
901
- /**
902
- * \brief Return number of branchings
903
- *
904
- * Note that this function takes linear time in the number of branchings.
905
- *
906
- * Throws an exception of type SpaceFailed, if the space is failed.
907
- */
908
- GECODE_KERNEL_EXPORT
909
- unsigned int branchings(void) const;
910
-
911
- /**
912
- * \defgroup FuncMemSpace Space-memory management
913
- * \ingroup FuncMem
914
- */
915
- //@{
916
- /// Allocate memory on space heap
917
- void* alloc(size_t);
918
- /// Attempt to reuse memory previously allocated with alloc
919
- void reuse(void*,size_t);
920
- /// Allocate from freelist-managed memory
921
- template <size_t> void* fl_alloc(void);
922
- /**
923
- * \brief Return freelist-managed memory to freelist
924
- *
925
- * The first list element to be retuned is \a f, the last is \a l.
926
- */
927
- template <size_t> void fl_dispose(FreeList* f, FreeList* l);
928
- /**
929
- * \brief Return how much heap memory is allocated by this space
930
- *
931
- * Note that is excludes the memory for the space object itself.
932
- */
933
- size_t allocated(void) const;
934
- /// Return how much memory is used by caches for actors
935
- GECODE_KERNEL_EXPORT size_t cached(void) const;
936
- /// Return list of variables that need deletion
937
- template <VarTypeId VTI> VarBase* varsDisposeList(void);
938
- /// Set list of variables that need deletion
939
- template <VarTypeId VTI> void varsDisposeList(VarBase* v);
940
- //@}
941
- };
942
-
943
-
944
-
945
-
946
- /***
947
- *** MEMORY MANAGEMENT
948
- ***
949
- ***/
950
-
951
- /*
952
- * Heap allocated: Space, BranchDesc
953
- *
954
- */
955
-
956
- forceinline void*
957
- Space::operator new(size_t s) {
958
- return Memory::malloc(s);
959
- }
960
- forceinline void
961
- Space::operator delete(void* p) {
962
- Memory::free(p);
963
- }
964
-
965
- forceinline void
966
- BranchingDesc::operator delete(void* p) {
967
- Memory::free(p);
968
- }
969
- forceinline void*
970
- BranchingDesc::operator new(size_t s) {
971
- return Memory::malloc(s);
972
- }
973
-
974
- /*
975
- * Space allocation: general space heaps and free lists
976
- *
977
- */
978
-
979
- forceinline void*
980
- Space::alloc(size_t s) {
981
- return mm.alloc(s);
982
- }
983
- forceinline void
984
- Space::reuse(void* p, size_t s) {
985
- return mm.reuse(p,s);
986
- }
987
-
988
- template <size_t s>
989
- forceinline void*
990
- Space::fl_alloc(void) {
991
- return mm.template fl_alloc<s>();
992
- }
993
- template <size_t s>
994
- forceinline void
995
- Space::fl_dispose(FreeList* f, FreeList* l) {
996
- mm.template fl_dispose<s>(f,l);
997
- }
998
-
999
- forceinline size_t
1000
- Space::allocated(void) const {
1001
- return mm.allocated()+n_sub*sizeof(Propagator**);
1002
- }
1003
-
1004
- template <VarTypeId VTI>
1005
- forceinline VarBase*
1006
- Space::varsDisposeList(void) {
1007
- return vars_dispose[VTI];
1008
- }
1009
-
1010
- template <VarTypeId VTI>
1011
- forceinline void
1012
- Space::varsDisposeList(VarBase* v) {
1013
- vars_dispose[VTI]=v;
1014
- }
1015
-
1016
- /*
1017
- * Space allocated entities: Actors and Variables
1018
- *
1019
- */
1020
-
1021
- forceinline void
1022
- Actor::operator delete(void*, size_t) {}
1023
- forceinline void
1024
- Actor::operator delete(void*,Space*) {}
1025
- forceinline void*
1026
- Actor::operator new(size_t s, Space* home) {
1027
- return home->alloc(s);
1028
- }
1029
-
1030
- template <VarTypeId VTI, PropCond PC, class MED>
1031
- forceinline void
1032
- Variable<VTI,PC,MED>::operator delete(void*) {}
1033
- template <VarTypeId VTI, PropCond PC, class MED>
1034
- forceinline void
1035
- Variable<VTI,PC,MED>::operator delete(void*, Space*) {}
1036
- template <VarTypeId VTI, PropCond PC, class MED>
1037
- forceinline void*
1038
- Variable<VTI,PC,MED>::operator new(size_t s, Space* home) {
1039
- return home->alloc(s);
1040
- }
1041
-
1042
-
1043
-
1044
- /*
1045
- * ActorLinks as common subclass for propagators and branchings
1046
- *
1047
- */
1048
-
1049
- forceinline ActorLink*
1050
- ActorLink::prev(void) const { return _prev; }
1051
- forceinline ActorLink*
1052
- ActorLink::next(void) const { return _next; }
1053
- forceinline void
1054
- ActorLink::prev(ActorLink* al) { _prev = al; }
1055
- forceinline void
1056
- ActorLink::next(ActorLink* al) { _next = al; }
1057
-
1058
- forceinline void
1059
- ActorLink::unlink(void) {
1060
- ActorLink* p = _prev; ActorLink* n = _next;
1061
- p->_next = n; n->_prev = p;
1062
- }
1063
- forceinline void
1064
- ActorLink::init(void) {
1065
- _next = this; _prev =this;
1066
- }
1067
- forceinline void
1068
- ActorLink::head(ActorLink* a) {
1069
- // Inserts al at head of link-chain (that is, after this)
1070
- ActorLink* n = _next;
1071
- this->_next = a; a->_prev = this;
1072
- a->_next = n; n->_prev = a;
1073
- }
1074
- forceinline void
1075
- ActorLink::tail(ActorLink* a) {
1076
- // Inserts al at tail of link-chain (that is, before this)
1077
- ActorLink* p = _prev;
1078
- a->_next = this; this->_prev = a;
1079
- p->_next = a; a->_prev = p;
1080
- }
1081
-
1082
-
1083
-
1084
- forceinline ActorDeleteLink*
1085
- ActorDeleteLink::next_delete(void) const { return _next_d; }
1086
- forceinline ActorDeleteLink*
1087
- ActorDeleteLink::prev_delete(void) const { return _prev_d; }
1088
- forceinline void
1089
- ActorDeleteLink::next_delete(ActorDeleteLink* adl) { _next_d = adl; }
1090
- forceinline void
1091
- ActorDeleteLink::prev_delete(ActorDeleteLink* adl) { _prev_d = adl; }
1092
-
1093
- forceinline void
1094
- ActorDeleteLink::unlink_delete(void) {
1095
- ActorDeleteLink* p = _prev_d;
1096
- ActorDeleteLink* n = _next_d;
1097
- p->_next_d = n; n->_prev_d = p;
1098
- }
1099
-
1100
- forceinline void
1101
- ActorDeleteLink::insert_delete(ActorDeleteLink* a, bool fd) {
1102
- if (fd) {
1103
- // Link a after this
1104
- ActorDeleteLink* n = _next_d;
1105
- this->_next_d = a; a->_prev_d = this;
1106
- a->_next_d = n; n->_prev_d = a;
1107
- } else {
1108
- // Just link to itself
1109
- a->_prev_d = a; a->_next_d = a;
1110
- }
1111
- }
1112
-
1113
- forceinline void
1114
- ActorDeleteLink::init_delete(void) {
1115
- _next_d = this; _prev_d = this;
1116
- }
1117
-
1118
-
1119
-
1120
-
1121
- forceinline size_t
1122
- Actor::dispose(Space*) {
1123
- return sizeof(*this);
1124
- }
1125
-
1126
- forceinline void
1127
- Actor::destruct(Space* home) {
1128
- unlink_delete();
1129
- size_t s = dispose(home);
1130
- home->reuse(this,s);
1131
- }
1132
-
1133
-
1134
- /*
1135
- * Spaces
1136
- *
1137
- */
1138
-
1139
- forceinline const BranchingDesc*
1140
- Space::description(void) const {
1141
- return b_status->description(this);
1142
- }
1143
-
1144
- forceinline bool
1145
- Space::failed(void) const {
1146
- return b_status == NULL;
1147
- }
1148
-
1149
- /*
1150
- * Main control for propagation and branching
1151
- * - a space only propagates and branches if requested by
1152
- * either a status, commit, or clone operation
1153
- * - for all of the operations the number of propagation
1154
- * steps performed is returned in the last (optional)
1155
- * reference argument
1156
- *
1157
- */
1158
- forceinline SpaceStatus
1159
- Space::status(unsigned long int& pn) {
1160
- // Perform propagation and do not continue when failed
1161
- pn += propagate();
1162
- if (failed())
1163
- return SS_FAILED;
1164
- /*
1165
- * Find the next branching that has still alternatives left
1166
- *
1167
- * It is important to note that branchings reporting to have no more
1168
- * alternatives left can not be deleted. They can not be deleted
1169
- * as there might be branching descriptions to be used in commit
1170
- * that refer to one of these branchings.
1171
- *
1172
- * A branching reporting that no more alternatives exist will eventually
1173
- * be deleted in commit. It will be deleted if the first branching
1174
- * description is used in commit that does not refer to this branching.
1175
- * As we insist that branching descriptions are used in order of
1176
- * creation, all further branching descriptions cannot refer to this
1177
- * branching.
1178
- *
1179
- */
1180
- while (b_status != &a_actors) {
1181
- if (b_status->status(this))
1182
- return SS_BRANCH;
1183
- b_status = static_cast<Branching*>(b_status->next());
1184
- }
1185
- // No branching with alternatives left, space is solved
1186
- return SS_SOLVED;
1187
- }
1188
-
1189
-
1190
- /*
1191
- * Variables
1192
- *
1193
- */
1194
-
1195
- template <VarTypeId VTI, PropCond PC, class MED>
1196
- forceinline
1197
- Variable<VTI,PC,MED>::Variable(Space*) :
1198
- _next(reinterpret_cast<Variable<VTI,PC,MED>*>(1)) {
1199
- u.free_me = 0;
1200
- for (int i=PC+2; i--; )
1201
- idx[i] = NULL;
1202
- }
1203
-
1204
-
1205
- template <VarTypeId VTI, PropCond PC, class MED>
1206
- forceinline unsigned int
1207
- Variable<VTI,PC,MED>::degree(void) const {
1208
- return static_cast<unsigned int>(idx[PC+1] - idx[0]);
1209
- }
1210
-
1211
-
1212
-
1213
- template <VarTypeId VTI, PropCond PC, class MED>
1214
- forceinline ModEvent
1215
- Variable<VTI,PC,MED>::modevent(void) const {
1216
- return u.free_me & 15;
1217
- }
1218
-
1219
- template <VarTypeId VTI, PropCond PC, class MED>
1220
- forceinline void
1221
- Variable<VTI,PC,MED>::modevent(ModEvent me) {
1222
- u.free_me = (u.free_me & ~15) | me;
1223
- }
1224
- template <VarTypeId VTI, PropCond PC, class MED>
1225
- forceinline unsigned int
1226
- Variable<VTI,PC,MED>::free(void) const {
1227
- return u.free_me >> 4;
1228
- }
1229
-
1230
- template <VarTypeId VTI, PropCond PC, class MED>
1231
- forceinline void
1232
- Variable<VTI,PC,MED>::free(unsigned int n) {
1233
- u.free_me = (u.free_me & 15) | (n << 4);
1234
- }
1235
-
1236
- template <VarTypeId VTI, PropCond PC, class MED>
1237
- forceinline void
1238
- Variable<VTI,PC,MED>::free_inc(void) {
1239
- u.free_me += (1 << 4);
1240
- }
1241
-
1242
- template <VarTypeId VTI, PropCond PC, class MED>
1243
- forceinline void
1244
- Variable<VTI,PC,MED>::free_dec(void) {
1245
- u.free_me -= (1 << 4);
1246
- }
1247
-
1248
- template <VarTypeId VTI, PropCond PC, class MED>
1249
- forceinline bool
1250
- Variable<VTI,PC,MED>::modified(void) const {
1251
- return _next != reinterpret_cast<Variable<VTI,PC,MED>*>(1);
1252
- }
1253
-
1254
-
1255
-
1256
- template <VarTypeId VTI, PropCond PC, class MED>
1257
- forceinline Variable<VTI,PC,MED>*
1258
- Variable<VTI,PC,MED>::next(void) {
1259
- Variable<VTI,PC,MED>* n = _next;
1260
- _next = reinterpret_cast<Variable<VTI,PC,MED>*>(1);
1261
- return n;
1262
- }
1263
-
1264
- template <VarTypeId VTI, PropCond PC, class MED>
1265
- forceinline bool
1266
- Variable<VTI,PC,MED>::copied(void) const {
1267
- return _next != reinterpret_cast<Variable<VTI,PC,MED>*>(1);
1268
- }
1269
-
1270
- template <VarTypeId VTI, PropCond PC, class MED>
1271
- forceinline
1272
- Variable<VTI,PC,MED>::Variable(Space* home, bool, Variable<VTI,PC,MED>& x)
1273
- : _next(reinterpret_cast<Variable<VTI,PC,MED>*>(1)) {
1274
- VarBase** reg;
1275
- if (x.idx[0] == NULL) {
1276
- // Variable needs no index structure
1277
- u.free_me = 0;
1278
- for (int i=PC+2; i--; )
1279
- idx[i] = NULL;
1280
- reg = &home->vars_noidx;
1281
- } else {
1282
- // Recover original value in copy
1283
- u.free_me = x.u.free_me;
1284
- reg = &home->vars[VTI];
1285
- }
1286
- // Set forwarding pointer
1287
- x.u.fwd = this;
1288
- // Register original
1289
- x._next = static_cast<Variable<VTI,PC,MED>*>(*reg); *reg = &x;
1290
- }
1291
-
1292
- template <VarTypeId VTI, PropCond PC, class MED>
1293
- forceinline Variable<VTI,PC,MED>*
1294
- Variable<VTI,PC,MED>::forward(void) const {
1295
- return u.fwd;
1296
- }
1297
-
1298
- /*
1299
- * Propagator modification events
1300
- *
1301
- */
1302
-
1303
- template <VarTypeId VTI, PropCond PC, class MED>
1304
- forceinline ModEvent
1305
- Variable<VTI,PC,MED>::pme(const Propagator* p) {
1306
- return static_cast<ModEvent>((p->pme >> (VTI << 2)) & 15);
1307
- }
1308
-
1309
- template <VarTypeId VTI, PropCond PC, class MED>
1310
- forceinline PropModEvent
1311
- Variable<VTI,PC,MED>::pme(ModEvent me) {
1312
- return static_cast<PropModEvent>(me << (VTI << 2));
1313
- }
1314
-
1315
- template <VarTypeId VTI, PropCond PC, class MED>
1316
- forceinline ModEvent
1317
- Variable<VTI,PC,MED>::combine(ModEvent me1, ModEvent me2) {
1318
- MED med;
1319
- return me2^med(me1,me2);
1320
- }
1321
-
1322
- /*
1323
- * Propagators
1324
- *
1325
- */
1326
-
1327
- forceinline void
1328
- Space::propagator(Propagator* p, bool fd) {
1329
- // Propagators are put at the front of the link of actors
1330
- a_actors.head(p);
1331
- a_actors.insert_delete(p,fd);
1332
- }
1333
-
1334
- forceinline void
1335
- Space::propagator(Propagator* p) {
1336
- a_actors.head(p);
1337
- }
1338
-
1339
- forceinline void
1340
- Space::branching(Branching* b, bool fd) {
1341
- // Propagators are put at the tail of the link of actors
1342
- b->id = branch_id++;
1343
- // If no branching available, make it the first one
1344
- if (b_status == &a_actors) {
1345
- b_status = b;
1346
- if (b_commit == &a_actors)
1347
- b_commit = b;
1348
- }
1349
- a_actors.tail(b);
1350
- a_actors.insert_delete(b,fd);
1351
- }
1352
-
1353
-
1354
-
1355
- forceinline
1356
- Propagator::Propagator(Space* home, bool fd)
1357
- : pme(0) {
1358
- home->propagator(this,fd);
1359
- }
1360
-
1361
- forceinline
1362
- Propagator::Propagator(Space*, bool, Propagator&)
1363
- : pme(0) {}
1364
-
1365
-
1366
- /*
1367
- * Branchings
1368
- *
1369
- */
1370
-
1371
- forceinline
1372
- Branching::Branching(Space* home, bool fd) {
1373
- home->branching(this,fd);
1374
- }
1375
-
1376
- forceinline
1377
- Branching::Branching(Space*, bool, Branching& b)
1378
- : id(b.id) {}
1379
-
1380
-
1381
-
1382
- /*
1383
- * Branching descriptions
1384
- *
1385
- */
1386
-
1387
- forceinline
1388
- BranchingDesc::BranchingDesc(const Branching* b, const unsigned int a)
1389
- : id(b->id), alt(a) {}
1390
-
1391
- forceinline unsigned int
1392
- BranchingDesc::alternatives(void) const {
1393
- return alt;
1394
- }
1395
-
1396
- forceinline
1397
- BranchingDesc::~BranchingDesc(void) {}
1398
-
1399
-
1400
-
1401
-
1402
-
1403
- /*
1404
- * Propagator pools
1405
- *
1406
- */
1407
-
1408
- forceinline void
1409
- Space::pool_put(Propagator* p) {
1410
- int c = p->cost();
1411
- pool[c].tail(p);
1412
- if (c > pool_next)
1413
- pool_next = c;
1414
- }
1415
-
1416
- forceinline void
1417
- Space::fail(void) {
1418
- b_status = NULL;
1419
- }
1420
-
1421
- template <VarTypeId VTI, class MED>
1422
- forceinline void
1423
- Space::process(Propagator* p) {
1424
- // The new event is ME_GEN_ASSIGNED
1425
- PropModEvent old_pme = p->pme;
1426
- // Compute old modification event
1427
- ModEvent old_me = old_pme & (ME_GEN_MAX << (VTI << 2));
1428
- // Check whether old event is already ME_GEN_ASSIGNED
1429
- if (old_me == (ME_GEN_ASSIGNED << (VTI << 2)))
1430
- return;
1431
- // Update event
1432
- p->pme ^= old_me ^ (ME_GEN_ASSIGNED << (VTI << 2));
1433
- // Put propagator into right queue
1434
- p->unlink();
1435
- pool_put(p);
1436
- }
1437
-
1438
- template <VarTypeId VTI, class MED>
1439
- forceinline void
1440
- Space::process(Propagator* p, ModEvent new_me) {
1441
- MED med;
1442
- PropModEvent old_pme = p->pme;
1443
- // Compute the old modification event
1444
- ModEvent old_me = ((old_pme >> (VTI << 2)) & ME_GEN_MAX);
1445
- // Get the new modification event (xor-ed with the old one)
1446
- ModEvent com_me = med(new_me,old_me);
1447
- // Event has not changed, do not nothing
1448
- if (com_me == 0)
1449
- return;
1450
- // Update modification event for propagator (use xor)
1451
- p->pme ^= (com_me << (VTI << 2));
1452
- // Put propagator into right queue
1453
- p->unlink();
1454
- pool_put(p);
1455
- }
1456
-
1457
- forceinline ExecStatus
1458
- Propagator::ES_FIX_PARTIAL(PropModEvent pme) {
1459
- this->pme = pme; return __ES_FIX_PARTIAL;
1460
- }
1461
-
1462
- forceinline ExecStatus
1463
- Propagator::ES_NOFIX_PARTIAL(PropModEvent pme) {
1464
- this->pme = pme; return __ES_NOFIX_PARTIAL;
1465
- }
1466
-
1467
-
1468
- /*
1469
- * Subscribing to a variable
1470
- *
1471
- */
1472
-
1473
- template <VarTypeId VTI, PropCond PC, class MED>
1474
- forceinline void
1475
- Variable<VTI,PC,MED>::subscribe(Space* home, Propagator* p, PropCond pc,
1476
- bool assigned, ModEvent me, bool process) {
1477
- if (assigned) {
1478
- // Do not subscribe, just process the propagator
1479
- if (process)
1480
- home->process<VTI,MED>(p);
1481
- } else {
1482
- // Count one new subscription
1483
- home->n_sub += 1;
1484
- if (free() == 0)
1485
- resize(home);
1486
- free_dec();
1487
- // Enter propagator
1488
- --idx[0];
1489
- for (PropCond i = 0; i < pc; i++)
1490
- *(idx[i]) = *(--idx[i+1]);
1491
- *idx[pc]=p;
1492
- // Process propagator
1493
- if (process && (pc != PC_GEN_ASSIGNED))
1494
- home->process<VTI,MED>(p,me);
1495
- }
1496
- }
1497
-
1498
- template <VarTypeId VTI, PropCond PC, class MED>
1499
- void
1500
- Variable<VTI,PC,MED>::resize(Space* home) {
1501
- assert(free() == 0);
1502
- if (idx[0] == NULL) {
1503
- // Count the one new free entry
1504
- home->n_sub += 1;
1505
- // Create fresh dependency array
1506
- free(4);
1507
- Propagator** prop = reinterpret_cast<Propagator**>
1508
- (home->alloc(4*sizeof(Propagator*))) + 4;
1509
- for (PropCond i = PC+2; i--; )
1510
- idx[i] = prop;
1511
- } else {
1512
- // Resize dependency array
1513
- int n = static_cast<int>(idx[PC+1] - idx[0]);
1514
- Propagator** prop = reinterpret_cast<Propagator**>
1515
- (home->alloc(2*n*sizeof(Propagator*))) + n;
1516
- free(n);
1517
- // Copy entries
1518
- memcpy(prop, idx[0], n*sizeof(Propagator*));
1519
- home->reuse(idx[0], n*sizeof(Propagator*));
1520
- // Update index pointers
1521
- ptrdiff_t o = prop - idx[0];
1522
- idx[0] = prop;
1523
- for (PropCond i = PC+1; i > 0; i--)
1524
- idx[i] += o;
1525
- }
1526
- }
1527
-
1528
-
1529
- /*
1530
- * Cancelling a subscription
1531
- *
1532
- */
1533
-
1534
- template <VarTypeId VTI, PropCond PC, class MED>
1535
- forceinline void
1536
- Variable<VTI,PC,MED>::cancel(Space* home, Propagator* p, PropCond pc) {
1537
- if (idx[0] != NULL) {
1538
- Propagator** f = idx[pc];
1539
- #ifdef GECODE_AUDIT
1540
- while (f < idx[pc+1])
1541
- if (*f == p)
1542
- goto found;
1543
- else
1544
- f++;
1545
- GECODE_NEVER;
1546
- found: ;
1547
- #else
1548
- while (*f != p) f++;
1549
- #endif
1550
- *f=*idx[pc];
1551
- for (PropCond i=pc; i>0; i--)
1552
- *(idx[i]++)=*(idx[i-1]);
1553
- idx[0]++;
1554
- free_inc();
1555
- home->n_sub -= 1;
1556
- }
1557
- }
1558
-
1559
- template <VarTypeId VTI, PropCond PC, class MED>
1560
- forceinline void
1561
- Variable<VTI,PC,MED>::notify(Space* home, ModEvent new_me) {
1562
- if (modified()) {
1563
- MED med;
1564
- u.free_me ^= med(new_me,modevent());
1565
- } else {
1566
- _next = static_cast<Variable<VTI,PC,MED>*>(home->vars[VTI]);
1567
- home->vars[VTI] = this;
1568
- modevent(new_me);
1569
- }
1570
- }
1571
-
1572
- template <VarTypeId VTI, PropCond PC, class MED>
1573
- forceinline void
1574
- Variable<VTI,PC,MED>::notify(Space* home) {
1575
- assert(!modified());
1576
- _next = static_cast<Variable<VTI,PC,MED>*>(home->vars[VTI]);
1577
- home->vars[VTI] = this;
1578
- modevent(ME_GEN_ASSIGNED);
1579
- }
1580
-
1581
-
1582
- /*
1583
- * PROCESSING
1584
- *
1585
- */
1586
-
1587
- template <VarTypeId VTI, PropCond PC, class MED>
1588
- forceinline void
1589
- Variable<VTI,PC,MED>::update(Variable<VTI,PC,MED>* x, Propagator**& sub) {
1590
- // this refers to the variable to be updated (clone)
1591
- // x refers to the original
1592
- // Recover from copy (also overwrites forwarding pointer)
1593
- x->u.free_me = u.free_me;
1594
- Propagator** f = x->idx[0];
1595
- int n = static_cast<int>(x->idx[PC+1] - f);
1596
- u.free_me = 1 << 4;
1597
- Propagator** t = sub + 1;
1598
- sub += n+1;
1599
- idx[0] = t;
1600
- ptrdiff_t o = t - f;
1601
- for (PropCond i = PC+1; i>0; i--)
1602
- idx[i] = x->idx[i]+o;
1603
- while ((n-4) >= 0) {
1604
- n -= 4;
1605
- t[0] = static_cast<Propagator*>(f[0]->prev());;
1606
- t[1] = static_cast<Propagator*>(f[1]->prev());;
1607
- t[2] = static_cast<Propagator*>(f[2]->prev());;
1608
- t[3] = static_cast<Propagator*>(f[3]->prev());;
1609
- t += 4; f += 4;
1610
- }
1611
- if ((n-2) >= 0) {
1612
- n -= 2;
1613
- t[0] = static_cast<Propagator*>(f[0]->prev());;
1614
- t[1] = static_cast<Propagator*>(f[1]->prev());;
1615
- t += 2; f += 2;
1616
- }
1617
- if (n > 0) {
1618
- t[0] = static_cast<Propagator*>(f[0]->prev());;
1619
- }
1620
- }
1621
-
1622
- template <VarTypeId VTI, PropCond PC, class MED>
1623
- VarTypeProcessor<VTI,PC,MED>::VarTypeProcessor(void) {
1624
- Space::vtp[VTI] = this;
1625
- }
1626
-
1627
- template <VarTypeId VTI, PropCond PC, class MED>
1628
- void
1629
- VarTypeProcessor<VTI,PC,MED>::update(VarBase* vb, Propagator**& sub) {
1630
- Variable<VTI,PC,MED>* x = static_cast<Variable<VTI,PC,MED>*>(vb);
1631
- do {
1632
- x->forward()->update(x,sub); x = x->next();
1633
- } while (x != NULL);
1634
- }
1635
-
1636
- template <VarTypeId VTI, PropCond PC, class MED>
1637
- void
1638
- VarTypeProcessor<VTI,PC,MED>::dispose(Space* home, VarBase* x) {}
1639
-
1640
- /*
1641
- * Processing a single modified variable
1642
- *
1643
- */
1644
- template <VarTypeId VTI, PropCond PC, class MED>
1645
- forceinline void
1646
- Variable<VTI,PC,MED>::process(Space* home,
1647
- PropCond pc1, PropCond pc2, ModEvent me) {
1648
- Propagator** b = idx[pc1];
1649
- Propagator** p = idx[pc2+1];
1650
- while (p-- > b)
1651
- home->process<VTI,MED>(*p,me);
1652
- }
1653
-
1654
- template <VarTypeId VTI, PropCond PC, class MED>
1655
- forceinline void
1656
- Variable<VTI,PC,MED>::process(Space* home) {
1657
- // Entries in index structure are disabled. However they
1658
- // must still work for cloning (idx[0]) and degree (idx[PC+1])
1659
- Propagator** b = idx[0]; idx[0] = NULL;
1660
- Propagator** p = idx[PC+1]; idx[PC+1] = NULL;
1661
- /*
1662
- * Decrement for p-b subscriptions
1663
- *
1664
- * Note that one would like to also decrement for the additional
1665
- * single free slot that was counted initially. However, this
1666
- * is not possible as there might be no free slot. So the number
1667
- * of subscriptions is a conservative estimate and will be corrected
1668
- * upon cloning.
1669
- */
1670
- home->n_sub -= p-b;
1671
- // Information needed to release the dependency array
1672
- unsigned int n = free() + (p-b);
1673
- Propagator** s = p-n;
1674
- while (p-- > b)
1675
- home->process<VTI,MED>(*p);
1676
- home->reuse(s,n*sizeof(Propagator*));
1677
- }
1678
-
1679
- }
1680
-
1681
- // STATISTICS: kernel-core