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,2375 +0,0 @@
1
- /*
2
- * Main authors:
3
- * Patrick Pekczynski <pekczynski@ps.uni-sb.de>
4
- *
5
- * Copyright:
6
- * Patrick Pekczynski, 2005
7
- *
8
- * Last modified:
9
- * $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
10
- * $Revision: 3512 $
11
- *
12
- * This file is part of Gecode, the generic constraint
13
- * development environment:
14
- * http://www.gecode.org
15
- *
16
- * See the file "LICENSE" for information on usage and
17
- * redistribution of this file, and for a
18
- * DISCLAIMER OF ALL WARRANTIES.
19
- *
20
- */
21
-
22
- namespace Gecode { namespace Int { namespace GCC {
23
-
24
- /**
25
- * \brief Bounds constraint (BC) type
26
- *
27
- * If BC = UBC, then we argue about the Upper Bounds Constraint
28
- * else we use the functions for the Lower Bounds Constraint
29
- */
30
- enum BC {UBC = 1, LBC = 0};
31
-
32
- class Edge;
33
- /// Base class for nodes in the variable-value-graph
34
- class VVGNode{
35
- private:
36
- /// stores all incident edges on the node
37
- Edge* e;
38
- /// returns the first edge
39
- Edge* fst;
40
- /// returns the last edge
41
- Edge* lst;
42
- /// single incoming edge used for storing a path in the algorithms
43
- Edge* ie;
44
- /// Mark as matching edge in LBC
45
- bool lm;
46
- /// Mark as matching edge in UBC
47
- bool um;
48
- /// Explicit node type
49
- bool type;
50
- public:
51
- /// \name Constructors and initialization
52
- //@{
53
- /// Default constructor
54
- VVGNode(void);
55
- //@}
56
- /// Destructor
57
- virtual ~VVGNode(void){};
58
- /// Create a new node
59
- void* operator new(size_t, void*);
60
-
61
- /// \name Access
62
- //@{
63
- /// return reference to the incident edges
64
- Edge** adj(void);
65
- /// return pointer to the first incident edge
66
- Edge* first(void);
67
- /// return pointer to the last incident edge
68
- Edge* last(void);
69
- /// return pointer to the node's inedge
70
- Edge* inedge(void);
71
- /// return the type of the node
72
- bool get_type(void);
73
- /// access the matching flag of the node
74
- template <BC>
75
- bool get_match_flag(void);
76
- /// get the information on the node (either var-index or value)
77
- virtual int get_info(void) = 0;
78
- /// test whether the node is matched
79
- virtual bool is_matched(BC) = 0;
80
-
81
- /// check whether a node has been removed from the graph
82
- virtual bool removed(void) = 0;
83
- //@}
84
-
85
- /// \name Update
86
- //@{
87
- /// set the first edge pointer to \a p
88
- void first(Edge* p);
89
- /// set the last edge pointer to \a p
90
- void last(Edge* p);
91
- /// set the inedge pointer to \a p
92
- void inedge(Edge* p);
93
- /// set the node type to \a t
94
- void set_type(bool t);
95
- /// set the matching flag to \a f
96
- template <BC>
97
- void set_match_flag(bool f);
98
- /// set the node information to \a i
99
- virtual void set_info(int i) = 0;
100
- //@}
101
- };
102
-
103
- /// %Variable Node
104
- class VarNode : public VVGNode{
105
- private:
106
- /// stores the matching edge on this node in the UBC
107
- Edge* ubm;
108
- /// stores the matching edge on this node in the LBC
109
- Edge* lbm;
110
-
111
- public:
112
- /// stores the variable index of the node
113
- unsigned int var;
114
- /// stores the number of incident edges on the node
115
- unsigned int noe;
116
-
117
- /// stores the variable index of the node
118
- unsigned int xindex;
119
-
120
- /// \name Constructors and initialization
121
- //@{
122
- /// Creates a variable node with index i
123
- VarNode(int i, int oidx);
124
- //@}
125
-
126
- /// \name Access
127
- //@{
128
- /// return the matching edge on the node
129
- template <BC>
130
- Edge* get_match(void);
131
- /// return the variable index of the node
132
- int get_info(void);
133
- /// returns whether the node is still matchable
134
- bool is_matched(BC);
135
- /// tests whether the node is matched or not
136
- template <BC>
137
- bool matched(void);
138
-
139
- /// check for removal from graph
140
- bool removed(void);
141
- //@}
142
-
143
- /// \name Update
144
- //@{
145
- /// set the node info to \a i
146
- void set_info(int i);
147
- /// set the pointer of the matching edge to m
148
- template <BC>
149
- void set_match(Edge* m);
150
- /// match the node
151
- template <BC>
152
- void match(void);
153
- /// unmatch the node
154
- template <BC>
155
- void unmatch(void);
156
- //@}
157
- };
158
-
159
- /// Value node
160
- class ValNode : public VVGNode{
161
- private:
162
- /// minimal required occurence of the value as stored in k
163
- int _klb;
164
- /// maximal required occurence of the value as stored in k
165
- int _kub;
166
- /// index to acces the value via cardinality array k
167
- int _kidx;
168
- /// stores the current number of occurences of the value
169
- int _kcount;
170
-
171
-
172
- /// store numbre of conflicting matching edges
173
- int noc;
174
-
175
- /**
176
- * \brief Minimal capacity of the value node
177
- *
178
- * Stores who often the value node can be matched in a LBC-matching
179
- */
180
- int lb;
181
- int ublow;
182
- /**
183
- * \brief Maximal capacity of the value node
184
- *
185
- * Stores who often the value node can be matched in a UBC-matching
186
- */
187
-
188
- int ub;
189
-
190
- public:
191
- /// stores the value of the node
192
- int val;
193
- /// stores the index of the node
194
- int idx;
195
- /// stores the number of incident edges on the node
196
- int noe;
197
-
198
- /// \name Constructors and destructors
199
- //@{
200
- /**
201
- * \brief Constructor for value node
202
- *
203
- * with minimal capacity \a min,
204
- * maximal capacity \a max,
205
- * the value \a value and the index \a k_access in \a k
206
- */
207
- ValNode(int min, int max, int value, int kidx, int kshift, int count);
208
- //@}
209
-
210
- /// \name Access
211
- //@{
212
-
213
- /// set the max cap for LBC
214
- void set_maxlow(int i);
215
- /// get max cap for LBC
216
- int get_maxlow(void);
217
-
218
-
219
- /// Mark the value node as conflicting in case of variable cardinalities
220
- void card_conflict(int c);
221
- /// Check whether the value node is conflicting
222
- int card_conflict(void);
223
- /// Reduce the conflict counter
224
- void red_conflict(void);
225
-
226
- /// check for removal from graph
227
- bool removed(void);
228
-
229
- /// increases the value counter
230
- void inc(void);
231
- /// returns the current number of occurences of the value
232
- int kcount(void);
233
- /// returns the number of incident matching edges on a value node
234
- template <BC>
235
- int incid_match(void);
236
- /// returns the index in cardinality array k
237
- int kindex(void);
238
- /// return the node information
239
- int get_info(void);
240
- /// returns \a true if the node is matched in BC, \a false otherwise
241
- template <BC>
242
- bool matched(void);
243
- /// tests whether the node is a sink
244
- bool sink(void);
245
- /// tests whether the node is a source
246
- bool source(void);
247
- /// return the minimal node capacity as stored in \a k
248
- int kmin(void);
249
- /// return the maximal node capacity as stored in \a k
250
- int kmax(void);
251
- /// return minimal or maximal capacity
252
- template <BC>
253
- int kbound(void);
254
-
255
- /// returns whether the node is still matchable
256
- bool is_matched(BC);
257
- //@}
258
-
259
- /// \name Update
260
- //@{
261
- void kcount(int);
262
- /// changes the index in the cardinality array k
263
- void kindex(int);
264
- /// decrease the node-capacity
265
- template <BC>
266
- void dec(void);
267
- /// increase the node-capacity
268
- template <BC>
269
- void inc(void);
270
- /// return the the node-capacity
271
- template <BC>
272
- int cap(void);
273
- /// set the node-capacity to \a c
274
- template <BC>
275
- void set_cap(int c);
276
- /// match the node
277
- template <BC>
278
- void match(void);
279
- /// unmatch the node
280
- template <BC>
281
- void unmatch(void);
282
- /// node reset to original capacity values
283
- void reset(void);
284
- /// set the node infomration to \a i
285
- void set_info(int i);
286
- /// set the minimal k-capacity to min
287
- void set_kmin(int min);
288
- /// set the maximal k-capacity to max
289
- void set_kmax(int max);
290
- //@}
291
- };
292
-
293
- /// Class for edges \f$ e(x,v) \f$ in the variable-value-graph
294
- class Edge{
295
- private:
296
- /// pointer to the variable node
297
- VarNode* x;
298
- /// pointer to the value node
299
- ValNode* v;
300
- /// pointer to the next edge incident on the same variable node
301
- Edge* next_edge;
302
- /// pointer to the previous edge incident on the same variable node
303
- Edge* prev_edge;
304
- /// pointer to the next edge on the same value node
305
- Edge* next_vedge;
306
- /// pointer to the previous edge on the same value node
307
- Edge* prev_vedge;
308
- /**
309
- * \brief stores whether the edge is used in LBC
310
- * Flag storing whether the edge is used in any maximum LBC matching
311
- * in the variable-value-graph
312
- */
313
- bool mrklb;
314
- /**
315
- * \brief stores whether the edge is used in UBC
316
- * Flag storing whether the edge is used in any maximum UBC matching
317
- * in the variable-value-graph
318
- */
319
- bool mrkub;
320
- /// stores whether the edge is matched in LBC matching
321
- bool um;
322
- /// stores whether the edge is matched in UBC matching
323
- bool lm;
324
- /// stores whether the edge has been deleted during syncronization
325
- bool deleted; // del
326
-
327
- public:
328
- /// \name Constructors
329
- //@{
330
- /**
331
- * \brief Construct edge \f$e(x,v)\f$ from variable node \a x
332
- * and value node \a y
333
- */
334
- Edge(VarNode* x, ValNode* v);
335
- /// Create a new edge in memory
336
- void* operator new(size_t, void*);
337
- //@}
338
-
339
- /// \name Access
340
- //@{
341
- /**
342
- * \brief return whether the edge is used
343
- *
344
- * An edge can be used in a matching on the graph,
345
- * a path on the graph or a cycle in the graph.
346
- *
347
- */
348
- template <BC>
349
- bool used(void);
350
- /// return whether the edge is matched
351
- template <BC>
352
- bool matched(void);
353
- /// return whether the edge has been deleted from the graph
354
- bool is_deleted(void);
355
- /**
356
- * \brief return a pointer to the next edge
357
- * If \a t is false the function returns the next edge incident on \a x
358
- * otherwise it returns the next edge incident on \a v
359
- */
360
- Edge* next(bool t) const;
361
- /// return the pointer to the next edge incident on \a x
362
- Edge* next(void) const;
363
- /// return the pointer to the previous edge incident on \a x
364
- Edge* prev(void) const;
365
- /// return the pointer to the next edge incident on \a v
366
- Edge* vnext(void) const;
367
- /// return the pointer to the previous edge incident on \a v
368
- Edge* vprev(void) const;
369
- /// return the pointer to the variable node \a x of this edge
370
- VarNode* getVar(void);
371
- /// return the pointer to the value node \a v of this edge
372
- ValNode* getVal(void);
373
- /**
374
- * \brief return pointer to \a x if \a t = true otherwise return \a v
375
- *
376
- */
377
- VVGNode* getMate(bool t);
378
- //@}
379
-
380
- /// Update
381
- //@{
382
- /// Mark the edge as used
383
- template <BC>
384
- void use(void);
385
- /// Mark the edge as unused
386
- template <BC>
387
- void free(void);
388
- /**
389
- * \brief Reset the edge ( free the edge, and unmatch
390
- * the edge including its end-nodes
391
- *
392
- */
393
- template <BC>
394
- void reset(void);
395
- /// Match the edge
396
- template <BC>
397
- void match(void);
398
- /// Unmatch the edge and the incident nodes
399
- template <BC>
400
- void unmatch(void);
401
- /// Unmatch the edge and ( \a x if t=false, \a v otherwise )
402
- template <BC>
403
- void unmatch(bool t);
404
- /// Unlink the edge from the linked list of edges
405
- void unlink(void);
406
- /// Mark the edge as deleted during synchronization
407
- void del_edge(void);
408
- /// Insert the edge again
409
- void insert_edge(void);
410
- /// return the reference to the next edge incident on \a x
411
- Edge** next_ref(void);
412
- /// return the reference to the previous edge incident on \a x
413
- Edge** prev_ref(void);
414
- /// return the reference to the next edge incident on \a v
415
- Edge** vnext_ref(void);
416
- /// return the reference to the previous edge incident on \a v
417
- Edge** vprev_ref(void);
418
- //@}
419
- };
420
-
421
- /// Debugging: print a variable node
422
- inline std::ostream&
423
- operator<<(std::ostream& os, VarNode* v) {
424
- os << v->var<<":{";
425
- for (Edge* e = v->first(); e != NULL; e = e->next()) {
426
- os << e->getVal()->val<<",";
427
- }
428
- os << "}(";
429
- os << v->xindex << ") ";
430
- return os;
431
- }
432
-
433
- /// Debugging: print a value node
434
- inline std::ostream&
435
- operator<<(std::ostream& os, ValNode* v) {
436
- os << v->val<<":{";
437
- for (Edge* e = v->first(); e != NULL; e = e->vnext()) {
438
- os << e->getVar()->var<<",";
439
- }
440
- os << "} ";
441
- return os;
442
- }
443
-
444
- /**
445
- * \brief Variable-value-graph used during propagation
446
- *
447
- */
448
- template <class View, class Card, bool isView>
449
- class VarValGraph{
450
- private:
451
- /// failure flag
452
- bool fail;
453
- /// Allocated memory for nodes and edges
454
- char* mem;
455
- /// Problem variables
456
- ViewArray<View>& x;
457
- /// Copy keeping track of removed variables
458
- ViewArray<View>& y;
459
- /// Occurences
460
- ViewArray<Card>& k;
461
- /// Variable partition representing the problem variables
462
- VarNode** vars;
463
- /**
464
- * \brief Value partition
465
- * For each value
466
- * \f$ v_i\in V=\left(\bigcup_\{0, \dots, |x|-1\}\right) D_i \f$
467
- * in the domains of the
468
- * problem variables there is a node in the graph.
469
- */
470
- ValNode** vals; // value partition De
471
- /// the edges connecting the variable and the value partition
472
- Edge* edges; // edges e
473
- /// cardinality of the variable partition
474
- int n_var;
475
- /**
476
- * \brief cardinality of the value partition
477
- *
478
- * Computed as \f$ |V| = \left(\bigcup_\{0, \dots, |x|-1\}\right) D_i \f$
479
- */
480
- int n_val;
481
- /// the number of edges in the graph
482
- int n_edge;
483
- /// total number of nodes in the graph
484
- int node_size;
485
- /**
486
- * \brief The sum over the minimal capacities of all value nodes
487
- *
488
- * \f$sum_min = \sum_{v_i \in V} l_i= k[i].min() \f$
489
- */
490
- int sum_min;
491
- /**
492
- * \brief The sum over the maximal capacities of all value nodes
493
- *
494
- * \f$sum_max = \sum_{v_i \in V} l_i= k[i].max() \f$
495
- */
496
- int sum_max;
497
- public:
498
- /// \name Constructors and Destructors
499
- //@{
500
- VarValGraph(ViewArray<View>&, ViewArray<View>&, ViewArray<Card>&,
501
- int , int , int );
502
- /// Destructor
503
- ~VarValGraph(void);
504
- //@}
505
- /// \name Graph-interface
506
- //@{
507
- /**
508
- * \brief Check whether propagation failed
509
- * This is actually needed to cope with failures
510
- * occuring in functions returing only a boolean value
511
- * and not an ExecStatus.
512
- */
513
- bool failed(void);
514
- /**
515
- * \brief Set the failure flag of the graph
516
- */
517
- void failed(bool b);
518
-
519
- /**
520
- * \brief Check whether minimum requirements shrink variable domains
521
- *
522
- */
523
- bool min_require(Space* home);
524
-
525
- /**
526
- * \brief Synchronization of the graph
527
- *
528
- * If the graph has already been constructed and some edges have
529
- * been removed during propagation \fn sync removes those edges
530
- * that do not longer belong to the graph associated with the current
531
- * variable domains.
532
- */
533
- bool sync(void);
534
-
535
- /// Print graph information for debugging
536
- void print_graph(void);
537
- /// Print matching information for debugging
538
- template <BC>
539
- void print_matching(void);
540
- /// Gather matching information
541
- void print_match(void);
542
-
543
- /// Print edge information
544
- void print_edges(void);
545
-
546
- /// Allocate memory for the graph
547
- void* operator new(size_t t);
548
- /// Free the memory for the graph
549
- void operator delete(void* p);
550
-
551
- /**
552
- * \brief Remove all those edges from the graph
553
- * that do not belong
554
- * to any possible maximum matching on the graph
555
- *
556
- */
557
-
558
- template <BC>
559
- bool narrow(Space*);
560
-
561
- /** \brief Compute a maximum matching M on the graph
562
- *
563
- * - If BC=UBC then \f$|M|= |X|\f$
564
- * - If BC=LBC then \f$|M|= \sum_{i\in \{ 0, \dots, |X|-1\}}
565
- * k[i].min()\f$
566
- */
567
- template <BC>
568
- bool maximum_matching(void);
569
-
570
- /// Compute possible free alternating paths in the graph
571
- template <BC>
572
- void free_alternating_paths(void);
573
- /// Compute possible strongly connected components of the graph
574
- template <BC>
575
- void strongly_connected_components(void);
576
- /**
577
- * \brief Test whether the current maximal matching on the graph
578
- * can be augmented by an alternating path starting and ending with
579
- * a free node.
580
- */
581
- template <BC>
582
- bool augmenting_path(VVGNode*);
583
-
584
- protected:
585
- /**
586
- * \brief Perform depth-first search on the graph
587
- *
588
- * Depth first search used to compute the
589
- * strongly connected components of the graph.
590
- */
591
- template <BC>
592
- void dfs(VVGNode*,
593
- bool[], bool[], int[],
594
- Support::StaticStack<VVGNode*>&,
595
- Support::StaticStack<VVGNode*>&,
596
- int&);
597
-
598
- //@}
599
- };
600
-
601
- forceinline
602
- VVGNode::VVGNode(void){} //no-op
603
-
604
- forceinline void*
605
- VVGNode::operator new(size_t n, void* p){
606
- return p;
607
- }
608
-
609
- forceinline Edge**
610
- VVGNode::adj(void){
611
- return &e;
612
- }
613
-
614
- forceinline Edge*
615
- VVGNode::first(void){
616
- return fst;
617
- }
618
-
619
- forceinline Edge*
620
- VVGNode::last(void){
621
- return lst;
622
- }
623
-
624
- forceinline void
625
- VVGNode::first(Edge* p){
626
- fst = p;
627
- }
628
-
629
- forceinline void
630
- VVGNode::last(Edge* p){
631
- lst = p;
632
- }
633
-
634
- forceinline bool
635
- VVGNode::get_type(void){
636
- return type;
637
- }
638
-
639
- forceinline void
640
- VVGNode::set_type(bool b){
641
- type = b;
642
- }
643
-
644
- forceinline Edge*
645
- VVGNode::inedge(void){
646
- return ie;
647
- }
648
-
649
- forceinline void
650
- VVGNode::inedge(Edge* p){
651
- ie = p;
652
- }
653
-
654
- template <BC direction>
655
- forceinline void
656
- VVGNode::set_match_flag(bool b){
657
- if (direction == UBC) {
658
- um = b;
659
- } else {
660
- lm = b;
661
- }
662
- }
663
-
664
- template <BC direction>
665
- forceinline bool
666
- VVGNode::get_match_flag(void){
667
- if (direction == UBC) {
668
- return um;
669
- } else {
670
- return lm;
671
- }
672
- }
673
-
674
-
675
- /// Variable Node
676
-
677
- forceinline bool
678
- VarNode::removed(void) {
679
- return noe == 0;
680
- }
681
-
682
-
683
-
684
- forceinline
685
- VarNode::VarNode(int x, int orig_idx) :
686
- ubm(NULL), lbm(NULL), var(x), noe(0), xindex(orig_idx){
687
- first(NULL);
688
- last(NULL);
689
- inedge(NULL);
690
- unmatch<LBC>();
691
- unmatch<UBC>();
692
- set_type(false);
693
- }
694
-
695
- forceinline bool
696
- VarNode::is_matched(BC d) {
697
- if (d == UBC) {
698
- return matched<UBC>();
699
- } else {
700
- return matched<LBC>();
701
- }
702
- }
703
-
704
- template <BC direction>
705
- forceinline bool
706
- VarNode::matched(void){
707
- return get_match_flag<direction>();
708
- }
709
-
710
- template <BC direction>
711
- forceinline void
712
- VarNode::match(void){
713
- set_match_flag<direction>(true);
714
- }
715
-
716
- template <BC direction>
717
- forceinline void
718
- VarNode::unmatch(void){
719
- set_match_flag<direction>(false);
720
- set_match<direction>(NULL);
721
- }
722
-
723
- template <BC direction>
724
- forceinline void
725
- VarNode::set_match(Edge* p){
726
- if (direction == UBC) {
727
- ubm = p;
728
- } else {
729
- lbm = p;
730
- }
731
- }
732
-
733
- template <BC direction>
734
- forceinline Edge*
735
- VarNode::get_match(void){
736
- if (direction == UBC) {
737
- return ubm;
738
- } else {
739
- return lbm;
740
- }
741
- }
742
-
743
- forceinline void
744
- VarNode::set_info(int i){
745
- var = i;
746
- }
747
-
748
- forceinline int
749
- VarNode::get_info(void){
750
- return var;
751
- }
752
-
753
- /// Value Node
754
-
755
- forceinline void
756
- ValNode::set_maxlow(int i){
757
- assert(i >= lb);
758
- ublow = i;
759
- }
760
-
761
- forceinline int
762
- ValNode::get_maxlow(void) {
763
- if (_klb == _kub) {
764
- assert(ublow == lb);
765
- }
766
-
767
- return ublow;
768
- }
769
-
770
-
771
- forceinline void
772
- ValNode::card_conflict(int c){
773
- noc = c;
774
- }
775
-
776
- forceinline void
777
- ValNode::red_conflict(void){
778
- noc--;
779
- assert(noc >= 0);
780
- }
781
-
782
- forceinline int
783
- ValNode::card_conflict(void){
784
- return noc;
785
- }
786
-
787
- forceinline bool
788
- ValNode::removed(void) {
789
- return noe == 0;
790
- }
791
-
792
- forceinline bool
793
- ValNode::is_matched(BC d) {
794
- if (d == UBC) {
795
- return matched<UBC>();
796
- } else {
797
- return ublow == 0;
798
- }
799
- }
800
-
801
- forceinline void
802
- ValNode::reset(void){
803
- lb = _klb;
804
- ublow = _kub;
805
- ub = _kub;
806
- noe = 0;
807
- }
808
-
809
- template <BC direction>
810
- forceinline int
811
- ValNode::kbound(void){
812
- if (direction == UBC) {
813
- return _kub;
814
- } else {
815
- return _klb;
816
- }
817
- }
818
-
819
- forceinline int
820
- ValNode::kmax(void){
821
- return _kub;
822
- }
823
-
824
- forceinline int
825
- ValNode::kmin(void){
826
- return _klb;
827
- }
828
-
829
- forceinline void
830
- ValNode::set_kmin(int klb){
831
- _klb = klb;
832
- }
833
-
834
- forceinline void
835
- ValNode::set_kmax(int kub){
836
- _kub = kub;
837
- }
838
-
839
- template <BC direction>
840
- forceinline int
841
- ValNode::cap(void){
842
- if (direction == UBC) {
843
- return ub;
844
- } else {
845
- return lb;
846
- }
847
- }
848
-
849
- template <BC direction>
850
- forceinline void
851
- ValNode::dec(void){
852
- if (direction == UBC) {
853
- ub--;
854
- } else {
855
- lb--;
856
- ublow--;
857
- }
858
- }
859
-
860
- template <BC direction>
861
- forceinline void
862
- ValNode::inc(void){
863
- if (direction == UBC) {
864
- ub++;
865
- } else {
866
- lb++;
867
- ublow++;
868
- }
869
- }
870
-
871
- template <BC direction>
872
- forceinline void
873
- ValNode::match(void){
874
- dec<direction>();
875
- }
876
-
877
- template <BC direction>
878
- forceinline void
879
- ValNode::unmatch(void){
880
- inc<direction>();
881
- }
882
-
883
- template <BC direction>
884
- forceinline bool
885
- ValNode::matched(void){
886
- return ( cap<direction>() == 0);
887
- }
888
-
889
- forceinline
890
- ValNode::ValNode(int min, int max, int value,
891
- int kidx, int kshift, int count) :
892
- _klb(min), _kub(max), _kidx(kidx), _kcount(count),
893
- noc(0),
894
- lb(min), ublow(max), ub(max),
895
- val(value), idx(kshift), noe(0) {
896
- first(NULL);
897
- last(NULL);
898
- inedge(NULL);
899
- Edge** vadjacent = adj();
900
- *vadjacent = NULL;
901
- set_type(true);
902
- }
903
-
904
- template<BC direction>
905
- forceinline void
906
- ValNode::set_cap(int c){
907
- if (direction == UBC) {
908
- ub = c;
909
- } else {
910
- lb = c;
911
- // ublow = c;
912
- }
913
- }
914
-
915
- forceinline void
916
- ValNode::set_info(int i){
917
- idx = i;
918
- }
919
-
920
- forceinline int
921
- ValNode::get_info(void){
922
- return idx;
923
- }
924
-
925
- forceinline void
926
- ValNode::inc(void) {
927
- _kcount++;
928
- }
929
-
930
- forceinline int
931
- ValNode::kcount(void) {
932
- return _kcount;
933
- }
934
-
935
- forceinline void
936
- ValNode::kcount(int c) {
937
- _kcount = c;
938
- }
939
-
940
- forceinline void
941
- ValNode::kindex(int i){
942
- _kidx = i;
943
- }
944
-
945
- forceinline int
946
- ValNode::kindex(void){
947
- return _kidx;
948
- }
949
-
950
- /// Returs the number of incident matching edges on the node
951
- template <BC direction>
952
- forceinline int
953
- ValNode::incid_match(void){
954
- if (direction == LBC) {
955
- // std::cout << "LBC: "<< _kub <<"-"<<ublow <<"+"<<_kcount<<"\n";
956
- return _kub - ublow + _kcount;
957
- } else {
958
- // std::cout << "UBC: "<< _kub <<"-"<<ub <<"+"<<_kcount<<"\n";
959
- return _kub - ub + _kcount;
960
- }
961
- }
962
-
963
-
964
- forceinline bool
965
- ValNode::sink(void){
966
- // there are only incoming edges
967
- // in case of the UBC-matching
968
- bool is_sink = false;
969
- is_sink = (_kub - ub == noe);
970
- return is_sink;
971
- }
972
-
973
- forceinline bool
974
- ValNode::source(void){
975
- // there are only incoming edges
976
- // in case of the UBC-matching
977
- bool is_sink = false;
978
- is_sink = (_klb - lb == noe);
979
- return is_sink;
980
- }
981
-
982
- /// Edge
983
- /// Debugging: print an edge
984
- inline std::ostream&
985
- operator<<(std::ostream& os, Edge* e){
986
- if (e== NULL) {
987
- os << "(N)";
988
- } else {
989
- os << "e("<<e->getVar()->var<<","<<e->getVal()->val<<")";
990
- }
991
- return os;
992
- }
993
-
994
-
995
- forceinline void
996
- Edge::unlink(void){
997
- // unlink from variable side
998
- Edge* p = prev_edge;
999
- Edge* n = next_edge;
1000
-
1001
- if (p != NULL) {
1002
- Edge** pnext = p->next_ref();
1003
- *pnext = n;
1004
- }
1005
-
1006
- if (n != NULL) {
1007
- Edge** nprev = n->prev_ref();
1008
- *nprev = p;
1009
- }
1010
-
1011
- if (this == x->first()) {
1012
- Edge** ref = x->adj();
1013
- *ref = n;
1014
- x->first(n);
1015
- }
1016
-
1017
- if (this == x->last()) {
1018
- x->last(p);
1019
- }
1020
-
1021
- // unlink from value side
1022
- Edge* pv = prev_vedge;
1023
- Edge* nv = next_vedge;
1024
-
1025
- if (pv != NULL) {
1026
- Edge** pvnext = pv->vnext_ref();
1027
- *pvnext = nv;
1028
- }
1029
-
1030
- if (nv != NULL) {
1031
- Edge** nvprev = nv->vprev_ref();
1032
- *nvprev = pv;
1033
- }
1034
-
1035
- if (this == v->first()) {
1036
- Edge** ref = v->adj();
1037
- *ref = nv;
1038
- v->first(nv);
1039
- }
1040
-
1041
- if (this == v->last()) {
1042
- v->last(pv);
1043
- }
1044
- }
1045
-
1046
- forceinline
1047
- Edge::Edge(VarNode* var, ValNode* val) :
1048
- x(var), v(val),
1049
- next_edge(NULL), prev_edge(NULL),
1050
- next_vedge(NULL), prev_vedge(NULL),
1051
- mrklb(false), mrkub(false),
1052
- um(false), lm(false), deleted(false) {};
1053
-
1054
- forceinline void*
1055
- Edge::operator new(size_t, void* p){ //why is there no argument?
1056
- return p;
1057
- }
1058
-
1059
- template <BC direction>
1060
- forceinline void
1061
- Edge::use(void){
1062
- if (direction == UBC) {
1063
- mrkub = true;
1064
- } else {
1065
- mrklb = true;
1066
- }
1067
- }
1068
-
1069
- template <BC direction>
1070
- forceinline void
1071
- Edge::free(void){
1072
- /// the failure is here, capacity is not increased for value nodes
1073
- if (direction == UBC) {
1074
- mrkub = false;
1075
- } else {
1076
- mrklb = false;
1077
- }
1078
- }
1079
-
1080
- template <BC direction>
1081
- forceinline void
1082
- Edge::reset(void){
1083
- this->free<direction>();
1084
- this->unmatch<direction>();
1085
- }
1086
-
1087
- template <BC direction>
1088
- forceinline bool
1089
- Edge::used(void){
1090
- if (direction == UBC){
1091
- return mrkub;
1092
- } else {
1093
- return mrklb;
1094
- }
1095
- }
1096
-
1097
- forceinline Edge*
1098
- Edge::next(void) const{
1099
- return next_edge;
1100
- }
1101
-
1102
- forceinline Edge*
1103
- Edge::next(bool t) const{
1104
- if (t) {
1105
- return next_vedge;
1106
- } else {
1107
- return next_edge;
1108
- }
1109
- }
1110
-
1111
- forceinline Edge*
1112
- Edge::vnext(void) const{
1113
- return next_vedge;
1114
- }
1115
-
1116
- forceinline Edge**
1117
- Edge::vnext_ref(void) {
1118
- return &next_vedge;
1119
- }
1120
-
1121
- forceinline Edge*
1122
- Edge::prev(void) const{
1123
- return prev_edge;
1124
- }
1125
-
1126
- forceinline Edge**
1127
- Edge::prev_ref(void) {
1128
- return &prev_edge;
1129
- }
1130
-
1131
- forceinline Edge*
1132
- Edge::vprev(void) const{
1133
- return prev_vedge;
1134
- }
1135
-
1136
- forceinline Edge**
1137
- Edge::vprev_ref(void) {
1138
- return &prev_vedge;
1139
- }
1140
-
1141
- forceinline Edge**
1142
- Edge::next_ref(void){
1143
- return &next_edge;
1144
- }
1145
- forceinline VarNode*
1146
- Edge::getVar(void){
1147
- assert(x != NULL);
1148
- return x;
1149
- }
1150
-
1151
- forceinline ValNode*
1152
- Edge::getVal(void){
1153
- assert(v != NULL);
1154
- return v;
1155
- }
1156
-
1157
- forceinline VVGNode*
1158
- Edge::getMate(bool type){
1159
- if (type) {
1160
- return x;
1161
- } else {
1162
- return v;
1163
- }
1164
- }
1165
-
1166
- template <BC direction>
1167
- forceinline void
1168
- Edge::unmatch(void){
1169
- if (direction == UBC) {
1170
- um = false;
1171
- } else {
1172
- lm = false;
1173
- }
1174
- x->unmatch<direction>();
1175
- v->unmatch<direction>();
1176
- }
1177
-
1178
- template <BC direction>
1179
- forceinline void
1180
- Edge::unmatch(bool node){
1181
- if (direction == UBC) {
1182
- um = false;
1183
- } else {
1184
- lm = false;
1185
- }
1186
- if (node) {
1187
- v->template unmatch<direction>();
1188
- } else {
1189
- x->template unmatch<direction>();
1190
- }
1191
- }
1192
-
1193
- template <BC direction>
1194
- forceinline void
1195
- Edge::match(void){
1196
- if (direction == UBC) {
1197
- um = true;
1198
- x->template match<direction>();
1199
- x->template set_match<direction>(this);
1200
- v->template match<direction>();
1201
- } else {
1202
- lm = true;
1203
- x->template match<direction>();
1204
- x->template set_match<direction>(this);
1205
- assert(x->template matched<direction>());
1206
- v->template match<direction>();
1207
- // assert(v->template matched<direction>());
1208
- }
1209
- }
1210
-
1211
- template <BC direction>
1212
- forceinline bool
1213
- Edge::matched(void){
1214
- if (direction == UBC) {
1215
- return um;
1216
- } else {
1217
- return lm;
1218
- }
1219
- }
1220
-
1221
- forceinline void
1222
- Edge::del_edge(void){
1223
- deleted = true;
1224
- }
1225
-
1226
- forceinline void
1227
- Edge::insert_edge(void){
1228
- deleted = false;
1229
- }
1230
-
1231
-
1232
- forceinline bool
1233
- Edge::is_deleted(void){
1234
- return deleted;
1235
- }
1236
-
1237
- /**
1238
- * \brief Constructor for the variable-value-graph
1239
- *
1240
- * The variable parition is initialized with the variables from \a x,
1241
- * the value partition is initialized with the values from \a v,
1242
- * where \f$ \forall v_i\in V:\f$ \a val_idx[i] is the
1243
- * index of \f$ v_i\f$ in \f$ k \f$. \a nov denotes the cardinality of the
1244
- * value partition in the graph, \a noe the number of edges in the
1245
- * graph, \a min_occ the sum over the minimal occurences
1246
- * of all values and \a max_occ the sum over the maximal occurences
1247
- * of all values.
1248
- **/
1249
-
1250
- template <class View, class Card, bool isView>
1251
- VarValGraph<View, Card, isView>::VarValGraph(ViewArray<View>& xref,
1252
- ViewArray<View>& yref,
1253
- ViewArray<Card>& kref,
1254
- int noe,
1255
- int smin, int smax)
1256
- : fail(false),
1257
- x(xref),
1258
- y(yref),
1259
- k(kref),
1260
- n_var(x.size()),
1261
- n_val(k.size()),
1262
- n_edge(noe),
1263
- node_size(n_var + n_val),
1264
- sum_min(smin),
1265
- sum_max(smax) {
1266
-
1267
- //memory allocation
1268
- size_t edge_size = sizeof(Edge) * n_edge;
1269
- size_t var_size = sizeof(VarNode) * n_var;
1270
- size_t var_ptr_size = sizeof(VarNode*) * n_var;
1271
- size_t val_size = sizeof(ValNode) * n_val;
1272
- size_t val_ptr_size = sizeof(ValNode*) * n_val;
1273
- size_t size = edge_size + var_size + var_ptr_size +
1274
- val_size + val_ptr_size;
1275
-
1276
- mem = reinterpret_cast<char*>
1277
- (Memory::malloc(size));
1278
- edges = reinterpret_cast<Edge*>
1279
- (mem);
1280
- VarNode* vars_ptr = reinterpret_cast<VarNode*>
1281
- (mem + edge_size);
1282
- ValNode* vals_ptr = reinterpret_cast<ValNode*>
1283
- (mem + edge_size + var_size);
1284
- vars = reinterpret_cast<VarNode**>
1285
- (mem + edge_size + var_size + val_size);
1286
- vals = reinterpret_cast<ValNode**>
1287
- (mem + edge_size + var_size + val_size + var_ptr_size);
1288
-
1289
- for (int i = n_val; i--; ){
1290
- int kmi = k[i].min();
1291
- int kma = k[i].max();
1292
- int kc = k[i].counter();
1293
- if (kc != kma) {
1294
- if (kmi >= kc) {
1295
- kmi -=kc;
1296
- assert(kmi >=0);
1297
- } else {
1298
- kmi = 0;
1299
- }
1300
- kma -= kc;
1301
- assert (kma > 0);
1302
- vals[i] = new (vals_ptr + i)
1303
- ValNode(kmi, kma, k[i].card(), i, i + n_var, kc);
1304
- } else {
1305
- vals[i] = new (vals_ptr + i)
1306
- ValNode(0, 0, k[i].card(), i, i + n_var, kc);
1307
- }
1308
- }
1309
-
1310
- for (int i = n_var; i--; ){
1311
-
1312
- vars[i] = new (vars_ptr + i) VarNode(i, i);
1313
- VarNode* vrn = vars[i];
1314
- // get the space for the edges of the varnode
1315
- Edge** xadjacent = vrn->adj();
1316
-
1317
- ViewValues<View> xiter(x[i]);
1318
- int j = 0;
1319
- for (; xiter(); ++xiter){
1320
- int v = xiter.val();
1321
- // get the correct index for the value
1322
- while(vals[j]->val < v){
1323
- j++;
1324
- }
1325
- ValNode* vln = vals[j];
1326
- *xadjacent = new (edges) Edge(vars_ptr + i, vals_ptr + j);
1327
- vrn->noe++;
1328
- if (vrn->first() == NULL) {
1329
- vrn->first(*xadjacent);
1330
- }
1331
- Edge* oldprev = vrn->last();
1332
- vrn->last(*xadjacent);
1333
- Edge** newprev = vrn->last()->prev_ref();
1334
- *newprev = oldprev;
1335
-
1336
- if (vln->first() == NULL) {
1337
- vln->first(*xadjacent);
1338
- vln->last(*xadjacent);
1339
- vln->noe++;
1340
- } else {
1341
- Edge* old = vln->first();
1342
- vln->first(*xadjacent);
1343
- Edge** newnext = vln->first()->vnext_ref();
1344
- *newnext = old;
1345
- Edge** setprev = old->vprev_ref();
1346
- *setprev = vln->first();
1347
- vln->noe++;
1348
- }
1349
- edges++;
1350
- xadjacent = (*xadjacent)->next_ref();
1351
- }
1352
- *xadjacent = NULL;
1353
- }
1354
- }
1355
-
1356
- template <class View, class Card, bool isView>
1357
- forceinline bool
1358
- VarValGraph<View, Card, isView>::failed(void){
1359
- return fail;
1360
- }
1361
-
1362
- template <class View, class Card, bool isView>
1363
- forceinline void
1364
- VarValGraph<View, Card, isView>::failed(bool b){
1365
- fail = b;
1366
- }
1367
-
1368
-
1369
-
1370
- template <class View, class Card, bool isView>
1371
- inline bool
1372
- VarValGraph<View, Card, isView>::min_require(Space* home){
1373
- bool modified = false;
1374
- for (int i = n_val; i--; ) {
1375
- ValNode* vln = vals[i];
1376
- if (vln->noe > 0) {
1377
- if (k[i].min() == vln->noe) {
1378
- // all variable nodes reachable from vln should be equal to vln->val
1379
- for (Edge* e = vln->first(); e != NULL; e = e->vnext()) {
1380
- VarNode* vrn = e->getVar();
1381
- int vi = vrn->get_info();
1382
- for (Edge* f = vrn->first(); f != NULL; f = f->next()) {
1383
- if (f != e) {
1384
- ValNode* w = f->getVal();
1385
- w->noe--;
1386
- vrn->noe--;
1387
- f->del_edge();
1388
- f->unlink();
1389
- }
1390
- }
1391
- assert(vrn->noe == 1);
1392
- modified |= x[vi].modified();
1393
-
1394
- x[vi].eq(home, vln->val);
1395
- vars[vi] = vars[--n_var];
1396
- vars[vi]->set_info(vi);
1397
-
1398
- int n = x.size();
1399
- x[vi] = x[--n];
1400
- // x[vi].index(vi);
1401
- x.size(n);
1402
-
1403
- node_size--;
1404
- vln->noe--;
1405
- }
1406
-
1407
-
1408
- int vidx = vln->kindex();
1409
- if (isView)
1410
- k[vidx].eq(home, k[vidx].min());
1411
-
1412
- k[vidx].counter(k[vidx].min());
1413
- modified |= k[vidx].modified();
1414
-
1415
- vln->template set_cap<UBC>(0);
1416
- vln->template set_cap<LBC>(0);
1417
- vln->set_maxlow(0);
1418
-
1419
- if (sum_min && sum_min >= k[vidx].min()) {
1420
- sum_min -= k[vidx].min();
1421
- }
1422
- assert(sum_min >=0);
1423
-
1424
- if (sum_max && sum_max >= k[vidx].max()) {
1425
- sum_max -= k[vidx].max();
1426
- }
1427
- assert(sum_max >=0);
1428
- }
1429
- } else {
1430
- vals[i]->template set_cap<UBC>(0);
1431
- vals[i]->template set_cap<LBC>(0);
1432
- vals[i]->set_maxlow(0);
1433
- vals[i]->set_kmax(0);
1434
- vals[i]->set_kmin(0);
1435
-
1436
- }
1437
-
1438
- if (isView) {
1439
- if (k[i].counter() == 0) {
1440
- ModEvent klq = k[i].lq(home, vals[i]->noe);
1441
- if (me_failed(klq)) {
1442
- failed(true);
1443
- }
1444
- }
1445
- modified |= k[i].modified() && k[i].max() != vals[i]->noe;
1446
- }
1447
- }
1448
-
1449
- for (int i = n_val; i--; ) {
1450
- vals[i]->set_info(n_var + i);
1451
- }
1452
-
1453
- return modified;
1454
- }
1455
-
1456
- template <class View, class Card, bool isView>
1457
- inline bool
1458
- VarValGraph<View, Card, isView>::sync(void){
1459
- GECODE_AUTOARRAY(VVGNode*, re, node_size);
1460
- int n_re = 0;
1461
-
1462
- // synchronize cardinality variables
1463
- if (isView) {
1464
- for (int i = n_val; i--; ) {
1465
- ValNode* v = vals[i];
1466
- int inc_ubc = v->template incid_match<UBC>();
1467
- int inc_lbc = v->template incid_match<LBC>();
1468
- if (v->noe == 0) {
1469
- inc_ubc = 0;
1470
- inc_lbc = 0;
1471
- }
1472
- int rm = v->kmax() - k[i].max();
1473
- // the cardinality bounds have been modified
1474
- if (k[i].max() < v->kmax() || k[i].min() > v->kmin()) {
1475
- if (k[i].max() != k[i].counter() || k[i].max() == 0) {
1476
- // update the bounds
1477
- v->set_kmax(k[i].max());
1478
- v->set_kmin(k[i].min());
1479
-
1480
- //everything is fine
1481
- if (inc_ubc <= k[i].max()) {
1482
- // adjust capacities
1483
- v->template set_cap<UBC>(k[i].max() - (inc_ubc));
1484
- v->set_maxlow(k[i].max() - (inc_lbc));
1485
- if (v->kmin() == v->kmax()) {
1486
- v->template set_cap<LBC>(k[i].max() - (inc_lbc));
1487
- }
1488
- } else {
1489
- // set cap to max and resolve conflicts on view side
1490
- // set to full capacity for later rescheduling
1491
- if (v->template cap<UBC>()) {
1492
- v->template set_cap<UBC>(k[i].max());
1493
- }
1494
- v->set_maxlow(k[i].max() - (inc_lbc));
1495
- if (v->kmin() == v->kmax()) {
1496
- v->template set_cap<LBC>(k[i].max() - (inc_lbc));
1497
- }
1498
- v->card_conflict(rm);
1499
- }
1500
- }
1501
- }
1502
- if (inc_lbc < k[i].min() && v->noe > 0) {
1503
-
1504
- v->template set_cap<LBC>(k[i].min() - inc_lbc);
1505
- re[n_re] = v;
1506
- n_re++;
1507
- }
1508
- }
1509
-
1510
- for (int i = n_var; i--; ) {
1511
- Edge* mub = vars[i]->template get_match<UBC>();
1512
- if (mub != NULL) {
1513
- ValNode* vu = mub->getVal();
1514
- if (! (vars[i]->noe == 1) ) {
1515
- if (vu->card_conflict()) {
1516
- vu->red_conflict();
1517
- mub->template unmatch<UBC>(vars[i]->get_type());
1518
- re[n_re] = vars[i];
1519
- n_re++;
1520
- }
1521
- }
1522
- }
1523
- }
1524
- }
1525
-
1526
- // go on with synchronization
1527
- assert(x.size() == n_var);
1528
- for (int i = n_var; i--; ) {
1529
-
1530
- VarNode* vrn = vars[i];
1531
- if(x[i].size() != vrn->noe){
1532
- // if the variable is already assigned
1533
- if (x[i].assigned()) {
1534
- int v = x[i].val();
1535
- ValNode* rv = NULL;
1536
- int rv_idx = 0;
1537
- Edge* mub = vrn->template get_match<UBC>();
1538
- if (mub != NULL) {
1539
- if (v != mub->getVal()->val) {
1540
- mub->template unmatch<UBC>();
1541
- re[n_re] = vars[i];
1542
- n_re++;
1543
- }
1544
- }
1545
-
1546
- Edge* mlb = vrn->template get_match<LBC>();
1547
- if (mlb != NULL) {
1548
- ValNode* vln = mlb->getVal();
1549
- if (v != vln->val) {
1550
- mlb->template unmatch<LBC>();
1551
- int nom = vln->template incid_match<LBC>();
1552
- // less values than required
1553
- bool cond = nom < vln->kmin();
1554
- if (cond) {
1555
- re[n_re] = vln;
1556
- n_re++;
1557
- }
1558
- }
1559
- }
1560
-
1561
- for (Edge* e = vrn->first(); e != NULL; e = e->next()){
1562
- ValNode* vln = e->getVal();
1563
- if (vln->val != v) {
1564
- vrn->noe--;
1565
- e->getVal()->noe--;
1566
- e->del_edge();
1567
- e->unlink();
1568
- } else {
1569
- rv = e->getVal();
1570
- rv_idx = rv->kindex();
1571
- }
1572
- }
1573
- } else {
1574
-
1575
- // delete the edge
1576
- ViewValues<View> xiter(x[i]);
1577
- Edge* mub = vrn->template get_match<UBC>();
1578
- Edge* mlb = vrn->template get_match<LBC>();
1579
- Edge** p = vrn->adj();
1580
- Edge* e = *p;
1581
- do {
1582
- // search the edge that has to be deleted
1583
- while (e != NULL && e->getVal()->val < xiter.val()) {
1584
- // Skip edge
1585
- e->getVal()->noe--;
1586
- vrn->noe--;
1587
- e->del_edge();
1588
- e->unlink();
1589
- e = e ->next();
1590
- *p = e;
1591
- }
1592
-
1593
- assert(xiter.val() == e->getVal()->val);
1594
-
1595
- // This edge must be kept
1596
- e->template free<UBC>();
1597
- e->template free<LBC>();
1598
- ++xiter;
1599
- p = e->next_ref();
1600
- e = e->next();
1601
- } while (xiter());
1602
- *p = NULL;
1603
- while (e) {
1604
- e->getVar()->noe--;
1605
- e->getVal()->noe--;
1606
- e->del_edge();
1607
- e->unlink();
1608
- e = e->next();
1609
- }
1610
-
1611
- if (mub != NULL){
1612
- if (mub->is_deleted()) {
1613
- mub->template unmatch<UBC>();
1614
- re[n_re] = vars[i];
1615
- n_re++;
1616
- }
1617
- }
1618
-
1619
- //lower bound matching can be zero
1620
- if (mlb != NULL) {
1621
- if (mlb->is_deleted()) {
1622
- ValNode* vln = mlb->getVal();
1623
- mlb->template unmatch<LBC>();
1624
- int nom = vln->template incid_match<LBC>();
1625
- bool cond = nom < vln->kmin();
1626
- if (cond) {
1627
- re[n_re] = vln;
1628
- n_re++;
1629
- }
1630
- }
1631
- }
1632
- }
1633
- }
1634
- vars[i]->set_info(i);
1635
- }
1636
-
1637
- for (int i = n_val; i--; ) {
1638
- if (k[i].min() > vals[i]->noe && k[i].counter() == 0) {
1639
- failed(true);
1640
- return false;
1641
- }
1642
- vals[i]->set_info(n_var + i);
1643
- }
1644
-
1645
- if (n_re == 0) {
1646
- // no repair needed
1647
- return true;
1648
- } else {
1649
- // start repair
1650
-
1651
- bool repaired = true;
1652
- while (n_re ) {
1653
- n_re--;
1654
- assert(re[n_re] != NULL);
1655
- if (!(re[n_re]->removed())) {
1656
- if (!(re[n_re]->get_type())) {
1657
- VarNode* vrn = reinterpret_cast<VarNode*> (re[n_re]);
1658
- if (!vrn->template matched<UBC>()) {
1659
- repaired &= augmenting_path<UBC>(vrn);
1660
- }
1661
- } else {
1662
- assert(re[n_re]->get_type());
1663
- ValNode* vln = reinterpret_cast<ValNode*> (re[n_re]);
1664
- while(!vln->template matched<LBC>()) {
1665
- repaired &= augmenting_path<LBC>(vln);
1666
- if (!repaired) {
1667
- break;
1668
- }
1669
- }
1670
- }
1671
- }
1672
- }
1673
- return repaired;
1674
- }
1675
- }
1676
-
1677
- template <class View, class Card, bool isView> template <BC direction>
1678
- inline bool
1679
- VarValGraph<View, Card, isView>::narrow(Space* home){
1680
-
1681
- bool shared = false;
1682
- for (int i = n_var; i--; ) {
1683
- VarNode* vrn = vars[i];
1684
- if (vrn->noe == 1) {
1685
- Edge* e = vrn->first();
1686
- shared |= x[i].modified();
1687
- ValNode* v = e->getVal();
1688
- e->template free<direction>();
1689
- x[i].eq(home, v->val);
1690
- v->inc();
1691
- }
1692
- }
1693
- for (int i = n_val; i--; ) {
1694
- ValNode* v = vals[i];
1695
- if (isView) {
1696
- if (k[i].counter() == 0) {
1697
- ModEvent klq = k[i].lq(home, v->noe);
1698
- if (me_failed(klq)) {
1699
- failed(true);
1700
- return false;
1701
- }
1702
- }
1703
- }
1704
-
1705
- if (v->noe > 0) {
1706
-
1707
- if (isView) {
1708
- ModEvent klq = k[i].lq(home, v->noe);
1709
- if (me_failed(klq)) {
1710
- failed(true);
1711
- return false;
1712
- }
1713
- }
1714
-
1715
- // If the maximum number of occurences of a value is reached
1716
- // it cannot be consumed by another view
1717
-
1718
- if (v->kcount() == v->kmax()) {
1719
- int vidx = v->kindex();
1720
-
1721
- k[i].counter(v->kcount());
1722
- // std::cout << "eq on : " << v->val<<"\n";
1723
- if (isView) {
1724
- if (!k[i].assigned()) {
1725
- ModEvent me = k[i].eq(home, k[i].counter());
1726
- if (me_failed(me)) {
1727
- failed(true);
1728
- return false;
1729
- }
1730
- }
1731
- }
1732
-
1733
- bool delall = false;
1734
- if (v->card_conflict() &&
1735
- v->noe > v->kmax()) {
1736
- delall = true;
1737
-
1738
- }
1739
-
1740
- for (Edge* e = v->last(); e != NULL; e = e->vprev()) {
1741
- VarNode* vrn = e->getVar();
1742
- if (vrn->noe == 1) {
1743
- vrn->noe--;
1744
- v->noe--;
1745
- int vi= vrn->get_info();
1746
-
1747
- int n = x.size();
1748
- x[vi] = x[--n];
1749
- // x[vi].index(vi);
1750
- x.size(n);
1751
-
1752
- vars[vi] = vars[--n_var];
1753
- vars[vi]->set_info(vi);
1754
- node_size--;
1755
- e->del_edge();
1756
- e->unlink();
1757
-
1758
- } else {
1759
- if (delall) {
1760
- x[vrn->get_info()].nq(home, v->val);
1761
- vrn->noe--;
1762
- v->noe--;
1763
- e->del_edge();
1764
- e->unlink();
1765
- }
1766
- }
1767
- }
1768
- v->template set_cap<UBC>(0);
1769
- v->template set_cap<LBC>(0);
1770
- v->set_maxlow(0);
1771
- if (sum_min && sum_min >= k[vidx].min()) {
1772
- sum_min -= k[vidx].min();
1773
- }
1774
- assert(sum_min >=0);
1775
-
1776
- if (sum_max && sum_max >= k[vidx].max()) {
1777
- sum_max -= k[vidx].max();
1778
- }
1779
- assert(sum_max >=0);
1780
-
1781
- } else {
1782
- int cur = v->kcount();
1783
- if (cur > 0) {
1784
- v->kcount(0);
1785
- }
1786
- }
1787
- }
1788
- }
1789
- for (int i = n_var; i--; )
1790
- vars[i]->set_info(i);
1791
-
1792
- for (int i = n_val; i--; ) {
1793
- if (vals[i]->noe == 0) {
1794
- vals[i]->template set_cap<UBC>(0);
1795
- vals[i]->template set_cap<LBC>(0);
1796
- vals[i]->set_maxlow(0);
1797
- }
1798
- vals[i]->set_info(n_var + i);
1799
- }
1800
-
1801
- for (int i = n_var; i--; )
1802
- if (vars[i]->noe > 1)
1803
- for (Edge* e = vars[i]->first(); e != NULL; e = e->next()) {
1804
- bool keepedge = false;
1805
- keepedge = (e->template matched<direction>() ||
1806
- e->template used<direction>());
1807
- if (!keepedge) {
1808
- ValNode* v = e->getVal();
1809
- shared |= x[i].modified();
1810
- x[i].nq(home, v->val);
1811
- } else {
1812
- e->template free<direction>();
1813
- }
1814
- }
1815
- return shared;
1816
- }
1817
-
1818
- template <class View, class Card, bool isView> template <BC direction>
1819
- inline bool
1820
- VarValGraph<View, Card, isView>::maximum_matching(void){
1821
-
1822
- int required_size = 0;
1823
- int card_match = 0;
1824
-
1825
- if (direction == UBC) {
1826
- required_size = n_var;
1827
- } else {
1828
- required_size = sum_min;
1829
- }
1830
-
1831
- // find an intial matching in O(n*d)
1832
- // greedy algorithm
1833
-
1834
- for (int i = n_val; i--; ){
1835
- ValNode* vln = vals[i];
1836
- for (Edge* e = vln->first(); e != NULL ; e = e->vnext()) {
1837
- VarNode* vrn = e->getVar();
1838
- if (!vrn->template matched<direction>() &&
1839
- !vln->template matched<direction>()) {
1840
- e->template match<direction>();
1841
- card_match++;
1842
- }
1843
- }
1844
- }
1845
-
1846
- if (card_match < required_size) {
1847
- if (direction == LBC) {
1848
- // collect free value nodes
1849
- GECODE_AUTOARRAY(ValNode*, free, n_val);
1850
- int f = 0;
1851
- // find failed nodes
1852
- for (int i = n_val; i--; ) {
1853
- ValNode* vln = vals[i];
1854
- if (!vln->template matched<direction>()) {
1855
- free[f++] = vln;
1856
- }
1857
- }
1858
-
1859
- for (int i = 0; i < f; i++) {
1860
- while(!free[i]->template matched<direction>()) {
1861
- if (augmenting_path<direction>(free[i])) {
1862
- card_match++;
1863
- } else {
1864
- break;
1865
- }
1866
- }
1867
- }
1868
- } else {
1869
- GECODE_AUTOARRAY(VarNode*, free, n_var);
1870
- int f = 0;
1871
- // find failed nodes
1872
- for (int i = n_var; i--; ) {
1873
- VarNode* vrn = vars[i];
1874
- if (!vrn->template matched<direction>()) {
1875
- free[f++] = vrn;
1876
- }
1877
- }
1878
-
1879
- for (int i = 0; i < f; i++) {
1880
- if (!free[i]->template matched<direction>()) {
1881
- if (augmenting_path<direction>(free[i])) {
1882
- card_match++;
1883
- }
1884
- }
1885
- }
1886
- }
1887
- }
1888
- return (card_match >= required_size);
1889
- }
1890
-
1891
- template <class View, class Card, bool isView> template<BC direction>
1892
- inline bool
1893
- VarValGraph<View, Card, isView>::augmenting_path(VVGNode* v){
1894
- Support::StaticStack<VVGNode*> ns(node_size);
1895
- GECODE_AUTOARRAY(bool, visited, node_size);
1896
- GECODE_AUTOARRAY(Edge*, start, node_size);
1897
-
1898
- // augmenting path starting in a free var node
1899
- assert(!v->is_matched(direction));
1900
-
1901
- // keep track of the nodes that have already been visited
1902
- VVGNode* sn = v;
1903
-
1904
- // mark the start partition
1905
- bool sp = sn->get_type();
1906
-
1907
- // nodes in sp only follow free edges
1908
- // nodes in V - sp only follow matched edges
1909
-
1910
- for (int i = node_size; i--; ){
1911
- visited[i] = false;
1912
- }
1913
-
1914
- for (int i = node_size; i--; ){
1915
- if (i >= n_var) {
1916
- vals[i - n_var]->inedge(NULL);
1917
- start[i] = vals[i - n_var]->first();
1918
- } else {
1919
- vars[i]->inedge(NULL);
1920
- start[i] = vars[i]->first();
1921
- }
1922
- }
1923
-
1924
- v->inedge(NULL);
1925
- ns.push(v);
1926
- visited[v->get_info()] = true;
1927
- while (!ns.empty()) {
1928
- VVGNode* v = ns.top();
1929
- Edge* e = NULL;
1930
- if (v->get_type() == sp) {
1931
- // follow next free edge
1932
- e = start[v->get_info()];
1933
- while (e != NULL && e->template matched<direction>()) {
1934
- e = e->next(v->get_type());
1935
- }
1936
- } else {
1937
- e = start[v->get_info()];
1938
- while (e != NULL && !e->template matched<direction>()) {
1939
- e = e->next(v->get_type());
1940
- }
1941
- start[v->get_info()] = e;
1942
- }
1943
- if (e != NULL) {
1944
- start[v->get_info()] = e->next(v->get_type());
1945
- VVGNode* w = e->getMate(v->get_type());
1946
- if (!visited[w->get_info()]) {
1947
- // unexplored path
1948
- if (!w->is_matched(direction) && w->get_type() != sp) {
1949
- if (v->inedge() != NULL) {
1950
- // augmenting path of length l > 1
1951
- e->template match<direction>();
1952
- break;
1953
- } else {
1954
- // augmenting path of length l = 1
1955
- e->template match<direction>();
1956
- ns.pop();
1957
- return true;
1958
- }
1959
- } else {
1960
- w->inedge(e);
1961
- visited[w->get_info()] = true;
1962
- // find matching edge m incident with w
1963
- ns.push(w);
1964
- }
1965
- }
1966
- } else {
1967
- // tried all outgoing edges without finding an augmenting path
1968
- ns.pop();
1969
- }
1970
- }
1971
-
1972
- bool pathfound = false;
1973
- if (!ns.empty()) {
1974
- pathfound = true;
1975
- }
1976
-
1977
- while (!ns.empty()) {
1978
- VVGNode* t = ns.top();
1979
- if (t != sn) {
1980
- Edge* in = t->inedge();
1981
- if (t->get_type() != sp) {
1982
- assert(in != NULL);
1983
- in->template match<direction>();
1984
- } else {
1985
- // avoid defects
1986
- if (!sp) {
1987
- in->template unmatch<direction>(!sp);
1988
- } else {
1989
- in->template unmatch<direction>();
1990
- }
1991
- }
1992
- ns.pop();
1993
- } else {
1994
- ns.pop();
1995
- }
1996
- }
1997
- return pathfound;
1998
- }
1999
-
2000
- template <class View, class Card, bool isView> template<BC direction>
2001
- inline void
2002
- VarValGraph<View, Card, isView>::free_alternating_paths(void){
2003
- Support::StaticStack<VVGNode*> ns(node_size);
2004
- GECODE_AUTOARRAY(bool, visited, node_size);
2005
- // keep track of the nodes that have already been visited
2006
- for (int i = node_size; i--; ){
2007
- visited[i] = false;
2008
- }
2009
-
2010
- if (direction == LBC) {
2011
- // after a maximum matching on the value nodes there still can be
2012
- // free value nodes, hence we have to consider ALL nodes whether
2013
- // they are the starting point of an even alternating path in G
2014
- for (int i = n_var; i--; ){
2015
- if(!vars[i]->is_matched(LBC)){
2016
- // unmatched var-node
2017
- ns.push(vars[i]);
2018
- visited[vars[i]->get_info()] = true;
2019
- }
2020
- }
2021
- for (int i = n_val; i--; ){
2022
- if(!vals[i]->is_matched(LBC)){
2023
- // unmatched val-node
2024
- ns.push(vals[i]);
2025
- visited[vals[i]->get_info()] = true;
2026
- }
2027
- }
2028
-
2029
- } else {
2030
- // clearly, after a maximum matching on the x variables
2031
- // corresponding to a set cover on x there are NO free var nodes
2032
- // std::cout << "alt_path for ubm: \n";
2033
- // after max_match_ub there can only be free val-nodes
2034
- for (int i = n_val; i--; ){
2035
- if(!vals[i]->is_matched(UBC)){
2036
- // still capacities left
2037
- ns.push(vals[i]);
2038
- visited[vals[i]->get_info()] = true;
2039
- }
2040
- }
2041
- }
2042
-
2043
- while(!ns.empty()){
2044
- VVGNode* node = ns.top();
2045
- ns.pop();
2046
- if (node->get_type()) {
2047
- // ValNode
2048
- ValNode* vln = reinterpret_cast<ValNode*> (node);
2049
- for (Edge* cur = vln->first(); cur != NULL; cur = cur->vnext()){
2050
- VarNode* mate = cur->getVar();
2051
- bool follow = false;
2052
- switch (direction) {
2053
- // edges in M_l are directed from values to variables
2054
- case LBC: {
2055
- follow = cur->template matched<direction>();
2056
- break;
2057
- }
2058
- case UBC: {
2059
- follow = !cur->template matched<direction>();
2060
- break;
2061
- default: GECODE_NEVER;
2062
- }
2063
- }
2064
- if (follow) {
2065
- // mark the edge
2066
- cur->template use<direction>();
2067
- if (!visited[mate->get_info()]) {
2068
- ns.push(mate);
2069
- visited[mate->get_info()] = true;
2070
- }
2071
- }
2072
- }
2073
- } else {
2074
- // VarNode
2075
- VarNode* vrn = reinterpret_cast<VarNode*> (node);
2076
- switch (direction) {
2077
- // after LBC-matching we can follow every unmatched edge
2078
- case LBC: {
2079
- for (Edge* cur = vrn->first(); cur != NULL; cur = cur->next()){
2080
- ValNode* mate = cur->getVal();
2081
- if (!cur->template matched<LBC>()) {
2082
- cur->template use<LBC>();
2083
- if (!visited[mate->get_info()]) {
2084
- ns.push(mate);
2085
- visited[mate->get_info()] = true;
2086
- }
2087
- }
2088
- }
2089
- break;
2090
- }
2091
- // after ub-matching we can only follow a matched edge
2092
- case UBC: {
2093
- Edge* cur = vrn->template get_match<UBC>();
2094
- if (cur != NULL) {
2095
- cur->template use<UBC>();
2096
- ValNode* mate = cur->getVal();
2097
- if (!visited[mate->get_info()]) {
2098
- ns.push(mate);
2099
- visited[mate->get_info()] = true;
2100
- }
2101
- }
2102
- break;
2103
- }
2104
- default: GECODE_NEVER;
2105
- }
2106
- }
2107
- }
2108
- }
2109
-
2110
- template <class View, class Card, bool isView> template <BC direction>
2111
- inline void
2112
- VarValGraph<View, Card, isView>::dfs(VVGNode* v,
2113
- bool inscc[],
2114
- bool in_unfinished[],
2115
- int dfsnum[],
2116
- Support::StaticStack<VVGNode*>& roots,
2117
- Support::StaticStack<VVGNode*>& unfinished,
2118
- int& count){
2119
- count++;
2120
- int v_index = v->get_info();
2121
- dfsnum[v_index] = count;
2122
- inscc[v_index] = true;
2123
- in_unfinished[v_index] = true;
2124
-
2125
- unfinished.push(v);
2126
- roots.push(v);
2127
- for (Edge* e = v->first(); e != NULL; e = e->next(v->get_type())) {
2128
- bool condition = false;
2129
- // LBC-matching
2130
- if (direction == LBC) {
2131
- // ValNode
2132
- if (v->get_type()) {
2133
- condition = e->template matched<LBC>();
2134
- } else {
2135
- condition = !e->template matched<LBC>();
2136
- }
2137
- // UBC - matching
2138
- } else {
2139
- if (v->get_type()) {
2140
- // in an upper bound matching a valnode only can follow unmatched edges
2141
- condition = !e->template matched<UBC>();
2142
- } else {
2143
- condition = e->template matched<UBC>();
2144
- }
2145
- }
2146
- if (condition) {
2147
- VVGNode* w = e->getMate(v->get_type());
2148
- int w_index = w->get_info();
2149
-
2150
- assert(w_index < node_size);
2151
- if (!inscc[w_index]) {
2152
- // w is an uncompleted scc
2153
- w->inedge(e);
2154
- dfs<direction>(w, inscc, in_unfinished, dfsnum,
2155
- roots, unfinished, count);
2156
- } else {
2157
- if (in_unfinished[w_index]) {
2158
- // even alternating cycle found mark the edge closing the cycle,
2159
- // completing the scc
2160
- e->template use<direction>();
2161
- // if w belongs to an scc we detected earlier
2162
- // merge components
2163
- assert(roots.top()->get_info() < node_size);
2164
- while (dfsnum[roots.top()->get_info()] > dfsnum[w_index]) {
2165
- roots.pop();
2166
- }
2167
- }
2168
- }
2169
- }
2170
- }
2171
-
2172
- if (v == roots.top()) {
2173
- while (v != unfinished.top()) {
2174
- // w belongs to the scc with root v
2175
- VVGNode* w = unfinished.top();
2176
- Edge* ie = w->inedge();
2177
- ie->template use<direction>();
2178
- in_unfinished[w->get_info()] = false;
2179
- unfinished.pop();
2180
- }
2181
- assert(v == unfinished.top());
2182
- in_unfinished[v_index] = false;
2183
- roots.pop();
2184
- unfinished.pop();
2185
- }
2186
- }
2187
-
2188
- template <class View, class Card, bool isView> template <BC direction>
2189
- inline void
2190
- VarValGraph<View, Card, isView>::strongly_connected_components(void){
2191
- GECODE_AUTOARRAY(bool, inscc, node_size);
2192
- GECODE_AUTOARRAY(bool, in_unfinished, node_size);
2193
- GECODE_AUTOARRAY(int, dfsnum, node_size);
2194
-
2195
- for (int i = node_size; i--; ) {
2196
- inscc[i] = false;
2197
- in_unfinished[i] = false;
2198
- dfsnum[i] = 0;
2199
- }
2200
-
2201
- int count = 0;
2202
- Support::StaticStack<VVGNode*> roots(node_size);
2203
- Support::StaticStack<VVGNode*> unfinished(node_size);
2204
-
2205
- for (int i = n_var; i--; ) {
2206
- dfs<direction>(vars[i], inscc, in_unfinished, dfsnum,
2207
- roots, unfinished, count);
2208
- }
2209
- }
2210
-
2211
-
2212
- template <class View, class Card, bool isView>
2213
- void
2214
- VarValGraph<View, Card, isView>::print_match(void) {
2215
- print_matching<UBC>();
2216
- print_matching<LBC>();
2217
- }
2218
-
2219
-
2220
- template <class View, class Card, bool isView>
2221
- void
2222
- VarValGraph<View, Card, isView>::print_edges(void) {
2223
- for (int i = 0; i < n_var; i++) {
2224
- std::cout << vars[i]->var<<": ";
2225
- for (Edge* e = vars[i]->first(); e != NULL; e = e->next()) {
2226
- bool ml = e->template matched<LBC>();
2227
- bool ul = e->template used<LBC>();
2228
- bool mu = e->template matched<UBC>();
2229
- bool uu = e->template used<UBC>();
2230
- bool condition = (ml || ul || mu || uu);
2231
- if (ml) {
2232
- std::cout << e->getVal()->val<<" mL, ";
2233
- }
2234
- if (ul) {
2235
- std::cout << e->getVal()->val<<" uL, ";
2236
- }
2237
- if (mu) {
2238
- std::cout << e->getVal()->val<<" mU, ";
2239
- }
2240
- if (uu) {
2241
- std::cout << e->getVal()->val<<" uU, ";
2242
- }
2243
- if (!condition) {
2244
- std::cout << e->getVal()->val<<" x ";
2245
- }
2246
- }
2247
- std::cout <<"\n";
2248
- }
2249
- std::cout <<"\n";
2250
- }
2251
-
2252
- // for debugging purposes
2253
- template <class View, class Card, bool isView> template <BC direction>
2254
- void
2255
- VarValGraph<View, Card, isView>::print_matching(void) {
2256
- if (direction == UBC) {
2257
- std::cout << "UBM - check:\n";
2258
- } else {
2259
- std::cout << "LBM - check:\n";
2260
- }
2261
-
2262
- for (int i = 0; i < n_var; i++ ){
2263
- std::cout << vars[i]->var <<" ";
2264
- if (vars[i]->template matched<direction>()) {
2265
- if (vars[i]->template get_match<direction>() == NULL) {
2266
- std::cout << "N ";
2267
- } else {
2268
- std::cout << vars[i]->template get_match<direction>() << " ";
2269
- std::cout << vars[i]->template get_match<direction>()->getVal()->val << " ";
2270
- }
2271
- }
2272
- std::cout << " <==" << vars[i] <<"\n";
2273
- }
2274
- std::cout <<"\n";
2275
-
2276
- for (int i = 0; i < n_val; i++ ){
2277
- if (vals[i]->template matched<direction>()) {
2278
- std::cout << "X ";
2279
- } else {
2280
- std::cout << "- ";
2281
- }
2282
- std::cout << vals[i]->template cap<direction>() << " ";
2283
- std::cout << vals[i]->get_maxlow() << " ";
2284
- std::cout << vals[i]->val << " <==";
2285
- for (Edge* e = vals[i]->first(); e != NULL; e = e->vnext()) {
2286
- if (e->template matched<direction>()) {
2287
- std::cout << e->getVar()->var << ",";
2288
- }
2289
- }
2290
- std::cout <<"\n";
2291
- }
2292
- std::cout <<"\n";
2293
- }
2294
-
2295
- template <class View, class Card, bool isView>
2296
- void
2297
- VarValGraph<View, Card, isView>::print_graph(void) {
2298
- std::cout << "Graph-size = "<<node_size<<" ";
2299
- std::cout << "sum_min ="<<sum_min << " & "
2300
- << "sum_max ="<<sum_max << "\n";
2301
- std::cout << "X-Partition: \n";
2302
- for (int i = 0; i < n_var; i++) {
2303
- VarNode* vrn = vars[i];
2304
- std::cout << "X("<<vars[i]->get_info()<<") ";
2305
- std::cout << "["<<vrn->xindex <<"]";
2306
- std::cout << "|"<<vrn->noe <<"|";
2307
- std::cout << "{";
2308
- for (Edge* e = vrn->first(); e != NULL; e = e->next()){
2309
- assert(e != NULL);
2310
- assert(e->getVal() != NULL);
2311
- std::cout << e->getVal()->val<<",";
2312
- }
2313
- std::cout <<"}\t";
2314
- std::cout << "F"<<vrn->first() << ", L" << vrn->last() << " ";
2315
- std::cout <<"\n";
2316
- }
2317
- std::cout <<"\n";
2318
-
2319
- std::cout << "V-Partition: \n";
2320
- for (int i = 0; i < n_val; i++) {
2321
- ValNode* vln = vals[i];
2322
- std::cout << vln->val <<" ";
2323
- std::cout << "V(" << i << ") ";
2324
- std::cout << "k(" << vln->kmin() << "," <<vln->kmax() << ") ";
2325
- std::cout << "c(" << vln->template cap<LBC>() << ","
2326
- << vln->template cap<UBC>() << ") ";
2327
- std::cout << "ublow: "<<vln->get_maxlow() <<" ";
2328
- std::cout << "|"<<vln->noe <<"|";
2329
- std::cout << "{";
2330
- if (vln->noe == 0 || vln->first() == NULL) {
2331
- std::cout << "EMPTY";
2332
- } else {
2333
- for(Edge* c = vln->first(); c != NULL; c = c->vnext()){
2334
- assert(c != NULL);
2335
- assert(c->getVar() != NULL);
2336
- std::cout << c->getVar()->var << ",";
2337
- }
2338
- }
2339
- std::cout <<"}\t";
2340
- std::cout <<"\t";
2341
- if (vln->noe == 0 || vln->first() == NULL) {
2342
- std::cout <<"no-ptr";
2343
- } else {
2344
- std::cout << "F"<<vln->first() << ", L" <<vln->last() << " ";
2345
- }
2346
- std::cout <<"\n";
2347
- }
2348
- std::cout <<"\n";
2349
- }
2350
-
2351
-
2352
- template <class View, class Card, bool isView>
2353
- forceinline
2354
- VarValGraph<View, Card, isView>::~VarValGraph(void){
2355
- Memory::free(mem);
2356
- }
2357
-
2358
- template <class View, class Card, bool isView>
2359
- forceinline void*
2360
- VarValGraph<View, Card, isView>::operator new(size_t t){
2361
- return Memory::malloc(t);
2362
- }
2363
-
2364
- template <class View, class Card, bool isView>
2365
- forceinline void
2366
- VarValGraph<View, Card, isView>::operator delete(void* p){
2367
- Memory::free(p);
2368
- }
2369
-
2370
-
2371
- }}}
2372
-
2373
- // STATISTICS: int-prop
2374
-
2375
-