gecoder-with-gecode 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (634) hide show
  1. data/CHANGES +81 -0
  2. data/COPYING +17 -0
  3. data/LGPL-LICENSE +458 -0
  4. data/README +45 -0
  5. data/Rakefile +13 -0
  6. data/example/example_helper.rb +1 -0
  7. data/example/magic_sequence.rb +43 -0
  8. data/example/queens.rb +43 -0
  9. data/example/raw_bindings.rb +42 -0
  10. data/example/send_more_money.rb +43 -0
  11. data/example/send_most_money.rb +58 -0
  12. data/example/square_tiling.rb +84 -0
  13. data/example/sudoku-set.rb +110 -0
  14. data/example/sudoku.rb +61 -0
  15. data/ext/extconf.rb +29 -0
  16. data/ext/gecode-1.3.1/LICENSE +34 -0
  17. data/ext/gecode-1.3.1/Makefile.contribs +71 -0
  18. data/ext/gecode-1.3.1/Makefile.dep +3928 -0
  19. data/ext/gecode-1.3.1/Makefile.in +966 -0
  20. data/ext/gecode-1.3.1/changelog.in +1065 -0
  21. data/ext/gecode-1.3.1/configure +8590 -0
  22. data/ext/gecode-1.3.1/configure.ac +179 -0
  23. data/ext/gecode-1.3.1/configure.ac.in +175 -0
  24. data/ext/gecode-1.3.1/contribs/README +26 -0
  25. data/ext/gecode-1.3.1/contribs/graph/INSTALL +53 -0
  26. data/ext/gecode-1.3.1/contribs/graph/LICENSE +11 -0
  27. data/ext/gecode-1.3.1/contribs/graph/Makefile +167 -0
  28. data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +169 -0
  29. data/ext/gecode-1.3.1/contribs/graph/TODO +28 -0
  30. data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +82 -0
  31. data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +186 -0
  32. data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +257 -0
  33. data/ext/gecode-1.3.1/contribs/graph/configure +2160 -0
  34. data/ext/gecode-1.3.1/contribs/graph/configure.ac +33 -0
  35. data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +1226 -0
  36. data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +132 -0
  37. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +94 -0
  38. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +104 -0
  39. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +105 -0
  40. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +92 -0
  41. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +273 -0
  42. data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +311 -0
  43. data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +1 -0
  44. data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +1 -0
  45. data/ext/gecode-1.3.1/contribs/graph/graph.hh +51 -0
  46. data/ext/gecode-1.3.1/contribs/graph/graphutils.h +46 -0
  47. data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +140 -0
  48. data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +1 -0
  49. data/ext/gecode-1.3.1/contribs/graph/path.hh +116 -0
  50. data/ext/gecode-1.3.1/contribs/graph/path.icc +64 -0
  51. data/ext/gecode-1.3.1/contribs/graph/path/path.icc +139 -0
  52. data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +133 -0
  53. data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +341 -0
  54. data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +1 -0
  55. data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +105 -0
  56. data/ext/gecode-1.3.1/contribs/graph/var.icc +106 -0
  57. data/ext/gecode-1.3.1/contribs/graph/view.icc +373 -0
  58. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +162 -0
  59. data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +78 -0
  60. data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +349 -0
  61. data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +148 -0
  62. data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +337 -0
  63. data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +493 -0
  64. data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +60 -0
  65. data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +600 -0
  66. data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +135 -0
  67. data/ext/gecode-1.3.1/contribs/map/COMPILING +68 -0
  68. data/ext/gecode-1.3.1/contribs/map/LICENSE +11 -0
  69. data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +173 -0
  70. data/ext/gecode-1.3.1/contribs/map/configure +2285 -0
  71. data/ext/gecode-1.3.1/contribs/map/configure.ac +32 -0
  72. data/ext/gecode-1.3.1/contribs/map/constraints.hh +46 -0
  73. data/ext/gecode-1.3.1/contribs/map/constraints.icc +84 -0
  74. data/ext/gecode-1.3.1/contribs/map/doxygen.conf +1229 -0
  75. data/ext/gecode-1.3.1/contribs/map/doxygen.hh +33 -0
  76. data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +199 -0
  77. data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +1 -0
  78. data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +1 -0
  79. data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
  80. data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +148 -0
  81. data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
  82. data/ext/gecode-1.3.1/contribs/map/examples/map.cc +80 -0
  83. data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +155 -0
  84. data/ext/gecode-1.3.1/contribs/map/map.hh +65 -0
  85. data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +235 -0
  86. data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +771 -0
  87. data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +2 -0
  88. data/ext/gecode-1.3.1/contribs/map/var.icc +346 -0
  89. data/ext/gecode-1.3.1/contribs/map/var/imp.cc +42 -0
  90. data/ext/gecode-1.3.1/contribs/map/var/imp.icc +436 -0
  91. data/ext/gecode-1.3.1/doxygen.conf.in +1225 -0
  92. data/ext/gecode-1.3.1/doxygen.hh.in +877 -0
  93. data/ext/gecode-1.3.1/examples/all-interval-sort.cc +201 -0
  94. data/ext/gecode-1.3.1/examples/all-interval.cc +114 -0
  95. data/ext/gecode-1.3.1/examples/alpha.cc +112 -0
  96. data/ext/gecode-1.3.1/examples/baseline.cc +71 -0
  97. data/ext/gecode-1.3.1/examples/bibd.cc +173 -0
  98. data/ext/gecode-1.3.1/examples/black-hole.cc +281 -0
  99. data/ext/gecode-1.3.1/examples/cars.cc +165 -0
  100. data/ext/gecode-1.3.1/examples/crew.cc +220 -0
  101. data/ext/gecode-1.3.1/examples/crowded-chess.cc +312 -0
  102. data/ext/gecode-1.3.1/examples/donald.cc +93 -0
  103. data/ext/gecode-1.3.1/examples/eq20.cc +111 -0
  104. data/ext/gecode-1.3.1/examples/golf.cc +242 -0
  105. data/ext/gecode-1.3.1/examples/golomb.cc +141 -0
  106. data/ext/gecode-1.3.1/examples/graph-color.cc +371 -0
  107. data/ext/gecode-1.3.1/examples/grocery.cc +107 -0
  108. data/ext/gecode-1.3.1/examples/hamming.cc +107 -0
  109. data/ext/gecode-1.3.1/examples/ind-set.cc +130 -0
  110. data/ext/gecode-1.3.1/examples/knights.cc +146 -0
  111. data/ext/gecode-1.3.1/examples/langfordnum.cc +244 -0
  112. data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +93 -0
  113. data/ext/gecode-1.3.1/examples/magic-sequence.cc +108 -0
  114. data/ext/gecode-1.3.1/examples/magic-square.cc +120 -0
  115. data/ext/gecode-1.3.1/examples/money.cc +92 -0
  116. data/ext/gecode-1.3.1/examples/ortho-latin.cc +156 -0
  117. data/ext/gecode-1.3.1/examples/packing.cc +211 -0
  118. data/ext/gecode-1.3.1/examples/partition.cc +126 -0
  119. data/ext/gecode-1.3.1/examples/photo.cc +155 -0
  120. data/ext/gecode-1.3.1/examples/picture-puzzle.cc +481 -0
  121. data/ext/gecode-1.3.1/examples/queen-armies.cc +240 -0
  122. data/ext/gecode-1.3.1/examples/queens.cc +99 -0
  123. data/ext/gecode-1.3.1/examples/sports-league.cc +454 -0
  124. data/ext/gecode-1.3.1/examples/steiner.cc +148 -0
  125. data/ext/gecode-1.3.1/examples/stress-domain.cc +86 -0
  126. data/ext/gecode-1.3.1/examples/stress-element.cc +95 -0
  127. data/ext/gecode-1.3.1/examples/stress-exec.cc +74 -0
  128. data/ext/gecode-1.3.1/examples/stress-min.cc +84 -0
  129. data/ext/gecode-1.3.1/examples/stress-search.cc +72 -0
  130. data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +282 -0
  131. data/ext/gecode-1.3.1/examples/sudoku-set.cc +162 -0
  132. data/ext/gecode-1.3.1/examples/sudoku.cc +188 -0
  133. data/ext/gecode-1.3.1/examples/sudoku.icc +703 -0
  134. data/ext/gecode-1.3.1/examples/support.cc +160 -0
  135. data/ext/gecode-1.3.1/examples/support.hh +98 -0
  136. data/ext/gecode-1.3.1/examples/support.icc +187 -0
  137. data/ext/gecode-1.3.1/examples/timer.cc +47 -0
  138. data/ext/gecode-1.3.1/examples/timer.hh +72 -0
  139. data/ext/gecode-1.3.1/examples/warehouses.cc +176 -0
  140. data/ext/gecode-1.3.1/extconf.rb +8 -0
  141. data/ext/gecode-1.3.1/gecode.m4 +736 -0
  142. data/ext/gecode-1.3.1/gecode/config.icc.in +50 -0
  143. data/ext/gecode-1.3.1/gecode/int.hh +1426 -0
  144. data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +87 -0
  145. data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +292 -0
  146. data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +213 -0
  147. data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +196 -0
  148. data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +478 -0
  149. data/ext/gecode-1.3.1/gecode/int/array.cc +61 -0
  150. data/ext/gecode-1.3.1/gecode/int/array.icc +264 -0
  151. data/ext/gecode-1.3.1/gecode/int/bool.cc +187 -0
  152. data/ext/gecode-1.3.1/gecode/int/bool.hh +255 -0
  153. data/ext/gecode-1.3.1/gecode/int/bool/base.icc +123 -0
  154. data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +89 -0
  155. data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +132 -0
  156. data/ext/gecode-1.3.1/gecode/int/bool/or.icc +380 -0
  157. data/ext/gecode-1.3.1/gecode/int/branch.cc +81 -0
  158. data/ext/gecode-1.3.1/gecode/int/branch.hh +444 -0
  159. data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +83 -0
  160. data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +76 -0
  161. data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +104 -0
  162. data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +219 -0
  163. data/ext/gecode-1.3.1/gecode/int/channel.cc +62 -0
  164. data/ext/gecode-1.3.1/gecode/int/channel.hh +144 -0
  165. data/ext/gecode-1.3.1/gecode/int/channel/base.icc +60 -0
  166. data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +313 -0
  167. data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +59 -0
  168. data/ext/gecode-1.3.1/gecode/int/channel/val.icc +239 -0
  169. data/ext/gecode-1.3.1/gecode/int/count.cc +174 -0
  170. data/ext/gecode-1.3.1/gecode/int/count.hh +401 -0
  171. data/ext/gecode-1.3.1/gecode/int/count/int.icc +495 -0
  172. data/ext/gecode-1.3.1/gecode/int/count/rel.icc +100 -0
  173. data/ext/gecode-1.3.1/gecode/int/count/view.icc +332 -0
  174. data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +210 -0
  175. data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +118 -0
  176. data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +377 -0
  177. data/ext/gecode-1.3.1/gecode/int/distinct.cc +77 -0
  178. data/ext/gecode-1.3.1/gecode/int/distinct.hh +272 -0
  179. data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +73 -0
  180. data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +335 -0
  181. data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +62 -0
  182. data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +740 -0
  183. data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +96 -0
  184. data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +107 -0
  185. data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +97 -0
  186. data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +171 -0
  187. data/ext/gecode-1.3.1/gecode/int/dom.cc +81 -0
  188. data/ext/gecode-1.3.1/gecode/int/dom.hh +101 -0
  189. data/ext/gecode-1.3.1/gecode/int/dom/range.icc +85 -0
  190. data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +85 -0
  191. data/ext/gecode-1.3.1/gecode/int/element.cc +58 -0
  192. data/ext/gecode-1.3.1/gecode/int/element.hh +203 -0
  193. data/ext/gecode-1.3.1/gecode/int/element/int.icc +396 -0
  194. data/ext/gecode-1.3.1/gecode/int/element/view.icc +443 -0
  195. data/ext/gecode-1.3.1/gecode/int/exception.icc +137 -0
  196. data/ext/gecode-1.3.1/gecode/int/gcc.cc +708 -0
  197. data/ext/gecode-1.3.1/gecode/int/gcc.hh +338 -0
  198. data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +629 -0
  199. data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +504 -0
  200. data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +760 -0
  201. data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +2375 -0
  202. data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +375 -0
  203. data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +687 -0
  204. data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +236 -0
  205. data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +373 -0
  206. data/ext/gecode-1.3.1/gecode/int/int-set.cc +115 -0
  207. data/ext/gecode-1.3.1/gecode/int/int-set.icc +151 -0
  208. data/ext/gecode-1.3.1/gecode/int/linear.cc +247 -0
  209. data/ext/gecode-1.3.1/gecode/int/linear.hh +1056 -0
  210. data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +439 -0
  211. data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +422 -0
  212. data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +311 -0
  213. data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +503 -0
  214. data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +857 -0
  215. data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +264 -0
  216. data/ext/gecode-1.3.1/gecode/int/linear/post.cc +542 -0
  217. data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +255 -0
  218. data/ext/gecode-1.3.1/gecode/int/propagator.icc +194 -0
  219. data/ext/gecode-1.3.1/gecode/int/regular.cc +40 -0
  220. data/ext/gecode-1.3.1/gecode/int/regular.hh +83 -0
  221. data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +466 -0
  222. data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +172 -0
  223. data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +480 -0
  224. data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +738 -0
  225. data/ext/gecode-1.3.1/gecode/int/rel.cc +293 -0
  226. data/ext/gecode-1.3.1/gecode/int/rel.hh +526 -0
  227. data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +640 -0
  228. data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +212 -0
  229. data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +246 -0
  230. data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +188 -0
  231. data/ext/gecode-1.3.1/gecode/int/sortedness.cc +124 -0
  232. data/ext/gecode-1.3.1/gecode/int/sortedness.hh +108 -0
  233. data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +177 -0
  234. data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +243 -0
  235. data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +232 -0
  236. data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +727 -0
  237. data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +666 -0
  238. data/ext/gecode-1.3.1/gecode/int/var-imp.vis +198 -0
  239. data/ext/gecode-1.3.1/gecode/int/var.icc +590 -0
  240. data/ext/gecode-1.3.1/gecode/int/var/bool.icc +52 -0
  241. data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +65 -0
  242. data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +191 -0
  243. data/ext/gecode-1.3.1/gecode/int/var/imp.cc +361 -0
  244. data/ext/gecode-1.3.1/gecode/int/var/imp.icc +579 -0
  245. data/ext/gecode-1.3.1/gecode/int/var/int.cc +63 -0
  246. data/ext/gecode-1.3.1/gecode/int/var/int.icc +135 -0
  247. data/ext/gecode-1.3.1/gecode/int/view.icc +1219 -0
  248. data/ext/gecode-1.3.1/gecode/int/view/bool.icc +270 -0
  249. data/ext/gecode-1.3.1/gecode/int/view/constint.icc +306 -0
  250. data/ext/gecode-1.3.1/gecode/int/view/int.icc +221 -0
  251. data/ext/gecode-1.3.1/gecode/int/view/iter.icc +49 -0
  252. data/ext/gecode-1.3.1/gecode/int/view/minus.icc +285 -0
  253. data/ext/gecode-1.3.1/gecode/int/view/offset.icc +274 -0
  254. data/ext/gecode-1.3.1/gecode/int/view/print.cc +109 -0
  255. data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +215 -0
  256. data/ext/gecode-1.3.1/gecode/int/view/scale.icc +373 -0
  257. data/ext/gecode-1.3.1/gecode/iter.hh +65 -0
  258. data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +130 -0
  259. data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +208 -0
  260. data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +123 -0
  261. data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +143 -0
  262. data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +206 -0
  263. data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +127 -0
  264. data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +96 -0
  265. data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +202 -0
  266. data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +103 -0
  267. data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +138 -0
  268. data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +112 -0
  269. data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +142 -0
  270. data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +224 -0
  271. data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +71 -0
  272. data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +131 -0
  273. data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +211 -0
  274. data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +125 -0
  275. data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +91 -0
  276. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +247 -0
  277. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +227 -0
  278. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +236 -0
  279. data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +126 -0
  280. data/ext/gecode-1.3.1/gecode/kernel.hh +141 -0
  281. data/ext/gecode-1.3.1/gecode/kernel/array.icc +954 -0
  282. data/ext/gecode-1.3.1/gecode/kernel/branching.icc +233 -0
  283. data/ext/gecode-1.3.1/gecode/kernel/core.cc +417 -0
  284. data/ext/gecode-1.3.1/gecode/kernel/core.icc +1681 -0
  285. data/ext/gecode-1.3.1/gecode/kernel/exception.cc +49 -0
  286. data/ext/gecode-1.3.1/gecode/kernel/exception.icc +104 -0
  287. data/ext/gecode-1.3.1/gecode/kernel/macros.icc +98 -0
  288. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +41 -0
  289. data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +438 -0
  290. data/ext/gecode-1.3.1/gecode/kernel/memory.icc +205 -0
  291. data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +53 -0
  292. data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +680 -0
  293. data/ext/gecode-1.3.1/gecode/kernel/view.icc +583 -0
  294. data/ext/gecode-1.3.1/gecode/limits.hh +87 -0
  295. data/ext/gecode-1.3.1/gecode/minimodel.hh +942 -0
  296. data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +137 -0
  297. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +207 -0
  298. data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +191 -0
  299. data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +66 -0
  300. data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +59 -0
  301. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +103 -0
  302. data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +192 -0
  303. data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +200 -0
  304. data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +118 -0
  305. data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +241 -0
  306. data/ext/gecode-1.3.1/gecode/search.hh +745 -0
  307. data/ext/gecode-1.3.1/gecode/search/bab.cc +153 -0
  308. data/ext/gecode-1.3.1/gecode/search/bab.icc +101 -0
  309. data/ext/gecode-1.3.1/gecode/search/dfs.cc +63 -0
  310. data/ext/gecode-1.3.1/gecode/search/dfs.icc +144 -0
  311. data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +109 -0
  312. data/ext/gecode-1.3.1/gecode/search/lds.cc +237 -0
  313. data/ext/gecode-1.3.1/gecode/search/lds.icc +57 -0
  314. data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +219 -0
  315. data/ext/gecode-1.3.1/gecode/search/restart.icc +76 -0
  316. data/ext/gecode-1.3.1/gecode/search/statistics.icc +30 -0
  317. data/ext/gecode-1.3.1/gecode/search/stop.cc +58 -0
  318. data/ext/gecode-1.3.1/gecode/search/stop.icc +100 -0
  319. data/ext/gecode-1.3.1/gecode/set.hh +419 -0
  320. data/ext/gecode-1.3.1/gecode/set/array.cc +114 -0
  321. data/ext/gecode-1.3.1/gecode/set/array.icc +134 -0
  322. data/ext/gecode-1.3.1/gecode/set/branch.cc +57 -0
  323. data/ext/gecode-1.3.1/gecode/set/branch.hh +176 -0
  324. data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +72 -0
  325. data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +112 -0
  326. data/ext/gecode-1.3.1/gecode/set/cardinality.cc +49 -0
  327. data/ext/gecode-1.3.1/gecode/set/convex.cc +43 -0
  328. data/ext/gecode-1.3.1/gecode/set/convex.hh +92 -0
  329. data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +81 -0
  330. data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +51 -0
  331. data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +100 -0
  332. data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +52 -0
  333. data/ext/gecode-1.3.1/gecode/set/distinct.cc +48 -0
  334. data/ext/gecode-1.3.1/gecode/set/distinct.hh +97 -0
  335. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +151 -0
  336. data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +50 -0
  337. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +46 -0
  338. data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +157 -0
  339. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +124 -0
  340. data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +58 -0
  341. data/ext/gecode-1.3.1/gecode/set/dom.cc +224 -0
  342. data/ext/gecode-1.3.1/gecode/set/exception.icc +132 -0
  343. data/ext/gecode-1.3.1/gecode/set/int.cc +139 -0
  344. data/ext/gecode-1.3.1/gecode/set/int.hh +226 -0
  345. data/ext/gecode-1.3.1/gecode/set/int/card.cc +61 -0
  346. data/ext/gecode-1.3.1/gecode/set/int/card.icc +54 -0
  347. data/ext/gecode-1.3.1/gecode/set/int/channel.cc +100 -0
  348. data/ext/gecode-1.3.1/gecode/set/int/channel.icc +75 -0
  349. data/ext/gecode-1.3.1/gecode/set/int/match.cc +148 -0
  350. data/ext/gecode-1.3.1/gecode/set/int/match.icc +67 -0
  351. data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +109 -0
  352. data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +63 -0
  353. data/ext/gecode-1.3.1/gecode/set/int/weights.cc +182 -0
  354. data/ext/gecode-1.3.1/gecode/set/int/weights.icc +174 -0
  355. data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +148 -0
  356. data/ext/gecode-1.3.1/gecode/set/projectors.cc +109 -0
  357. data/ext/gecode-1.3.1/gecode/set/projectors.hh +319 -0
  358. data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +841 -0
  359. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +69 -0
  360. data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +66 -0
  361. data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +125 -0
  362. data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +79 -0
  363. data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +127 -0
  364. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +96 -0
  365. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +106 -0
  366. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +76 -0
  367. data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +53 -0
  368. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +306 -0
  369. data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +192 -0
  370. data/ext/gecode-1.3.1/gecode/set/propagator.icc +96 -0
  371. data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +233 -0
  372. data/ext/gecode-1.3.1/gecode/set/rel-op.cc +96 -0
  373. data/ext/gecode-1.3.1/gecode/set/rel-op.hh +267 -0
  374. data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +528 -0
  375. data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +312 -0
  376. data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +131 -0
  377. data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +198 -0
  378. data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +150 -0
  379. data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +151 -0
  380. data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +292 -0
  381. data/ext/gecode-1.3.1/gecode/set/rel.cc +201 -0
  382. data/ext/gecode-1.3.1/gecode/set/rel.hh +250 -0
  383. data/ext/gecode-1.3.1/gecode/set/rel/common.icc +109 -0
  384. data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +101 -0
  385. data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +88 -0
  386. data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +132 -0
  387. data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +142 -0
  388. data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +121 -0
  389. data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +80 -0
  390. data/ext/gecode-1.3.1/gecode/set/select.cc +88 -0
  391. data/ext/gecode-1.3.1/gecode/set/select.hh +113 -0
  392. data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +267 -0
  393. data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +59 -0
  394. data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +91 -0
  395. data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +112 -0
  396. data/ext/gecode-1.3.1/gecode/set/select/inter.icc +300 -0
  397. data/ext/gecode-1.3.1/gecode/set/sequence.cc +48 -0
  398. data/ext/gecode-1.3.1/gecode/set/sequence.hh +97 -0
  399. data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +79 -0
  400. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +83 -0
  401. data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +63 -0
  402. data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +61 -0
  403. data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +53 -0
  404. data/ext/gecode-1.3.1/gecode/set/var-imp.vis +205 -0
  405. data/ext/gecode-1.3.1/gecode/set/var.icc +1090 -0
  406. data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +192 -0
  407. data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +235 -0
  408. data/ext/gecode-1.3.1/gecode/set/var/imp.cc +127 -0
  409. data/ext/gecode-1.3.1/gecode/set/var/imp.icc +356 -0
  410. data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +256 -0
  411. data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +512 -0
  412. data/ext/gecode-1.3.1/gecode/set/var/iter.icc +47 -0
  413. data/ext/gecode-1.3.1/gecode/set/var/set.cc +99 -0
  414. data/ext/gecode-1.3.1/gecode/set/var/set.icc +282 -0
  415. data/ext/gecode-1.3.1/gecode/set/view.icc +1075 -0
  416. data/ext/gecode-1.3.1/gecode/set/view/complement.icc +525 -0
  417. data/ext/gecode-1.3.1/gecode/set/view/const.icc +651 -0
  418. data/ext/gecode-1.3.1/gecode/set/view/print.cc +120 -0
  419. data/ext/gecode-1.3.1/gecode/set/view/set.icc +217 -0
  420. data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +348 -0
  421. data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +152 -0
  422. data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +131 -0
  423. data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +157 -0
  424. data/ext/gecode-1.3.1/gecode/support/random.hh +100 -0
  425. data/ext/gecode-1.3.1/gecode/support/shared-array.hh +255 -0
  426. data/ext/gecode-1.3.1/gecode/support/sort.hh +193 -0
  427. data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +240 -0
  428. data/ext/gecode-1.3.1/gecode/support/static-stack.hh +117 -0
  429. data/ext/gecode-1.3.1/install-sh +323 -0
  430. data/ext/gecode-1.3.1/misc/debian/Makefile.am +8 -0
  431. data/ext/gecode-1.3.1/misc/debian/changelog +6 -0
  432. data/ext/gecode-1.3.1/misc/debian/control +11 -0
  433. data/ext/gecode-1.3.1/misc/debian/copyright +44 -0
  434. data/ext/gecode-1.3.1/misc/debian/gecode.info +9 -0
  435. data/ext/gecode-1.3.1/misc/debian/gecode.install +2 -0
  436. data/ext/gecode-1.3.1/misc/debian/gecode.spec +58 -0
  437. data/ext/gecode-1.3.1/misc/debian/rules +81 -0
  438. data/ext/gecode-1.3.1/misc/doxygen/back.png +0 -0
  439. data/ext/gecode-1.3.1/misc/doxygen/footer.html +3 -0
  440. data/ext/gecode-1.3.1/misc/doxygen/gecode-logo-100.png +0 -0
  441. data/ext/gecode-1.3.1/misc/doxygen/header.html +46 -0
  442. data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +460 -0
  443. data/ext/gecode-1.3.1/misc/fixproperties.sh +32 -0
  444. data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +12 -0
  445. data/ext/gecode-1.3.1/misc/gecode-search.pc.in +12 -0
  446. data/ext/gecode-1.3.1/misc/gecode.pc.in +12 -0
  447. data/ext/gecode-1.3.1/misc/genchangelog.perl +190 -0
  448. data/ext/gecode-1.3.1/misc/genlicense.perl +113 -0
  449. data/ext/gecode-1.3.1/misc/genstatistics.perl +155 -0
  450. data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +170 -0
  451. data/ext/gecode-1.3.1/misc/genvarimp.perl +666 -0
  452. data/ext/gecode-1.3.1/misc/getrevision.perl +32 -0
  453. data/ext/gecode-1.3.1/misc/makedepend.perl +66 -0
  454. data/ext/gecode-1.3.1/test/int.cc +497 -0
  455. data/ext/gecode-1.3.1/test/int.hh +119 -0
  456. data/ext/gecode-1.3.1/test/int/arithmetic.cc +262 -0
  457. data/ext/gecode-1.3.1/test/int/basic.cc +42 -0
  458. data/ext/gecode-1.3.1/test/int/bool.cc +189 -0
  459. data/ext/gecode-1.3.1/test/int/channel.cc +79 -0
  460. data/ext/gecode-1.3.1/test/int/count.cc +264 -0
  461. data/ext/gecode-1.3.1/test/int/distinct.cc +121 -0
  462. data/ext/gecode-1.3.1/test/int/dom.cc +69 -0
  463. data/ext/gecode-1.3.1/test/int/element.cc +132 -0
  464. data/ext/gecode-1.3.1/test/int/gcc.cc +592 -0
  465. data/ext/gecode-1.3.1/test/int/linear.cc +315 -0
  466. data/ext/gecode-1.3.1/test/int/minimodel.cc +451 -0
  467. data/ext/gecode-1.3.1/test/int/regular.cc +105 -0
  468. data/ext/gecode-1.3.1/test/int/rel.cc +283 -0
  469. data/ext/gecode-1.3.1/test/int/scheduling.cc +259 -0
  470. data/ext/gecode-1.3.1/test/int/sortedness.cc +272 -0
  471. data/ext/gecode-1.3.1/test/intset.cc +40 -0
  472. data/ext/gecode-1.3.1/test/log.cc +515 -0
  473. data/ext/gecode-1.3.1/test/log.hh +68 -0
  474. data/ext/gecode-1.3.1/test/set.cc +542 -0
  475. data/ext/gecode-1.3.1/test/set.hh +152 -0
  476. data/ext/gecode-1.3.1/test/set/convex.cc +94 -0
  477. data/ext/gecode-1.3.1/test/set/distinct.cc +148 -0
  478. data/ext/gecode-1.3.1/test/set/dom.cc +67 -0
  479. data/ext/gecode-1.3.1/test/set/int.cc +249 -0
  480. data/ext/gecode-1.3.1/test/set/projection.cc +333 -0
  481. data/ext/gecode-1.3.1/test/set/rel-op.cc +662 -0
  482. data/ext/gecode-1.3.1/test/set/rel.cc +198 -0
  483. data/ext/gecode-1.3.1/test/set/select.cc +108 -0
  484. data/ext/gecode-1.3.1/test/set/sequence.cc +83 -0
  485. data/ext/gecode-1.3.1/test/stress.cc +93 -0
  486. data/ext/gecode-1.3.1/test/stress.hh +74 -0
  487. data/ext/gecode-1.3.1/test/stress/distinct.cc +70 -0
  488. data/ext/gecode-1.3.1/test/stress/domain.cc +69 -0
  489. data/ext/gecode-1.3.1/test/stress/exec.cc +60 -0
  490. data/ext/gecode-1.3.1/test/stress/minsort.cc +63 -0
  491. data/ext/gecode-1.3.1/test/stress/regular.cc +112 -0
  492. data/ext/gecode-1.3.1/test/test.cc +215 -0
  493. data/ext/gecode-1.3.1/test/test.hh +107 -0
  494. data/ext/missing.cpp +328 -0
  495. data/ext/missing.h +120 -0
  496. data/ext/vararray.cpp +330 -0
  497. data/ext/vararray.h +149 -0
  498. data/lib/gecoder.rb +5 -0
  499. data/lib/gecoder/bindings.rb +34 -0
  500. data/lib/gecoder/bindings/bindings.rb +2209 -0
  501. data/lib/gecoder/interface.rb +8 -0
  502. data/lib/gecoder/interface/binding_changes.rb +313 -0
  503. data/lib/gecoder/interface/branch.rb +152 -0
  504. data/lib/gecoder/interface/constraints.rb +397 -0
  505. data/lib/gecoder/interface/constraints/bool/boolean.rb +246 -0
  506. data/lib/gecoder/interface/constraints/bool/linear.rb +29 -0
  507. data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +84 -0
  508. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +8 -0
  509. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +75 -0
  510. data/lib/gecoder/interface/constraints/int/arithmetic.rb +71 -0
  511. data/lib/gecoder/interface/constraints/int/domain.rb +78 -0
  512. data/lib/gecoder/interface/constraints/int/linear.rb +295 -0
  513. data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +72 -0
  514. data/lib/gecoder/interface/constraints/int_enum/channel.rb +100 -0
  515. data/lib/gecoder/interface/constraints/int_enum/count.rb +92 -0
  516. data/lib/gecoder/interface/constraints/int_enum/distinct.rb +69 -0
  517. data/lib/gecoder/interface/constraints/int_enum/element.rb +82 -0
  518. data/lib/gecoder/interface/constraints/int_enum/equality.rb +38 -0
  519. data/lib/gecoder/interface/constraints/int_enum/sort.rb +126 -0
  520. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +37 -0
  521. data/lib/gecoder/interface/constraints/int_var_constraints.rb +58 -0
  522. data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
  523. data/lib/gecoder/interface/constraints/set/cardinality.rb +75 -0
  524. data/lib/gecoder/interface/constraints/set/connection.rb +193 -0
  525. data/lib/gecoder/interface/constraints/set/domain.rb +109 -0
  526. data/lib/gecoder/interface/constraints/set/operation.rb +132 -0
  527. data/lib/gecoder/interface/constraints/set/relation.rb +178 -0
  528. data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
  529. data/lib/gecoder/interface/constraints/set_enum/distinct.rb +80 -0
  530. data/lib/gecoder/interface/constraints/set_enum/operation.rb +60 -0
  531. data/lib/gecoder/interface/constraints/set_enum/selection.rb +217 -0
  532. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +34 -0
  533. data/lib/gecoder/interface/constraints/set_var_constraints.rb +72 -0
  534. data/lib/gecoder/interface/enum_matrix.rb +64 -0
  535. data/lib/gecoder/interface/enum_wrapper.rb +153 -0
  536. data/lib/gecoder/interface/model.rb +251 -0
  537. data/lib/gecoder/interface/search.rb +123 -0
  538. data/lib/gecoder/interface/variables.rb +254 -0
  539. data/lib/gecoder/version.rb +4 -0
  540. data/specs/binding_changes.rb +76 -0
  541. data/specs/bool_var.rb +74 -0
  542. data/specs/branch.rb +170 -0
  543. data/specs/constraints/arithmetic.rb +266 -0
  544. data/specs/constraints/bool_enum.rb +140 -0
  545. data/specs/constraints/boolean.rb +232 -0
  546. data/specs/constraints/cardinality.rb +154 -0
  547. data/specs/constraints/channel.rb +126 -0
  548. data/specs/constraints/connection.rb +373 -0
  549. data/specs/constraints/constraint_helper.rb +180 -0
  550. data/specs/constraints/constraints.rb +74 -0
  551. data/specs/constraints/count.rb +139 -0
  552. data/specs/constraints/distinct.rb +218 -0
  553. data/specs/constraints/element.rb +106 -0
  554. data/specs/constraints/equality.rb +31 -0
  555. data/specs/constraints/int_domain.rb +69 -0
  556. data/specs/constraints/int_relation.rb +78 -0
  557. data/specs/constraints/linear.rb +332 -0
  558. data/specs/constraints/reification_sugar.rb +96 -0
  559. data/specs/constraints/selection.rb +292 -0
  560. data/specs/constraints/set_domain.rb +181 -0
  561. data/specs/constraints/set_operation.rb +285 -0
  562. data/specs/constraints/set_relation.rb +201 -0
  563. data/specs/constraints/sort.rb +175 -0
  564. data/specs/enum_matrix.rb +43 -0
  565. data/specs/enum_wrapper.rb +122 -0
  566. data/specs/int_var.rb +144 -0
  567. data/specs/logging.rb +24 -0
  568. data/specs/model.rb +190 -0
  569. data/specs/search.rb +246 -0
  570. data/specs/set_var.rb +68 -0
  571. data/specs/spec_helper.rb +93 -0
  572. data/tasks/all_tasks.rb +1 -0
  573. data/tasks/distribution.rake +129 -0
  574. data/tasks/rcov.rake +17 -0
  575. data/tasks/specs.rake +15 -0
  576. data/tasks/svn.rake +11 -0
  577. data/tasks/website.rake +51 -0
  578. data/vendor/rust/README +28 -0
  579. data/vendor/rust/bin/cxxgenerator.rb +93 -0
  580. data/vendor/rust/include/rust_checks.hh +115 -0
  581. data/vendor/rust/include/rust_conversions.hh +102 -0
  582. data/vendor/rust/rust.rb +67 -0
  583. data/vendor/rust/rust/attribute.rb +51 -0
  584. data/vendor/rust/rust/bindings.rb +172 -0
  585. data/vendor/rust/rust/class.rb +339 -0
  586. data/vendor/rust/rust/constants.rb +48 -0
  587. data/vendor/rust/rust/container.rb +110 -0
  588. data/vendor/rust/rust/cppifaceparser.rb +129 -0
  589. data/vendor/rust/rust/cwrapper.rb +72 -0
  590. data/vendor/rust/rust/cxxclass.rb +98 -0
  591. data/vendor/rust/rust/element.rb +81 -0
  592. data/vendor/rust/rust/enum.rb +63 -0
  593. data/vendor/rust/rust/function.rb +407 -0
  594. data/vendor/rust/rust/namespace.rb +61 -0
  595. data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
  596. data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
  597. data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
  598. data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
  599. data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
  600. data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
  601. data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
  602. data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
  603. data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +91 -0
  604. data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
  605. data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
  606. data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
  607. data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
  608. data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
  609. data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
  610. data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
  611. data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
  612. data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
  613. data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
  614. data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
  615. data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
  616. data/vendor/rust/rust/type.rb +98 -0
  617. data/vendor/rust/test/Makefile +4 -0
  618. data/vendor/rust/test/constants.rb +36 -0
  619. data/vendor/rust/test/cppclass.cc +45 -0
  620. data/vendor/rust/test/cppclass.hh +67 -0
  621. data/vendor/rust/test/cppclass.rb +59 -0
  622. data/vendor/rust/test/cwrapper.c +74 -0
  623. data/vendor/rust/test/cwrapper.h +41 -0
  624. data/vendor/rust/test/cwrapper.rb +56 -0
  625. data/vendor/rust/test/dummyclass.hh +31 -0
  626. data/vendor/rust/test/lib/extension-test.rb +98 -0
  627. data/vendor/rust/test/operators.cc +41 -0
  628. data/vendor/rust/test/operators.hh +39 -0
  629. data/vendor/rust/test/operators.rb +39 -0
  630. data/vendor/rust/test/test-constants.rb +43 -0
  631. data/vendor/rust/test/test-cppclass.rb +82 -0
  632. data/vendor/rust/test/test-cwrapper.rb +80 -0
  633. data/vendor/rust/test/test-operators.rb +42 -0
  634. metadata +826 -0
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ * Gabor Szokoli <szokoli@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Guido Tack, 2004
8
+ * Gabor Szokoli, 2004
9
+ *
10
+ * Last modified:
11
+ * $Date: 2005-08-10 15:18:45 +0200 (Wed, 10 Aug 2005) $ by $Author: tack $
12
+ * $Revision: 2199 $
13
+ *
14
+ * This file is part of Gecode, the generic constraint
15
+ * development environment:
16
+ * http://www.gecode.org
17
+ *
18
+ * See the file "LICENSE" for information on usage and
19
+ * redistribution of this file, and for a
20
+ * DISCLAIMER OF ALL WARRANTIES.
21
+ *
22
+ */
23
+
24
+ namespace Gecode { namespace Set {
25
+
26
+ template <class T>
27
+ forceinline
28
+ UnknownRanges<T>::UnknownRanges(void) {}
29
+
30
+ template <class T>
31
+ forceinline
32
+ UnknownRanges<T>::UnknownRanges(const T& v) : i1(v), i2(v) {
33
+ Iter::Ranges::Diff<LubRanges<T>, GlbRanges<T> >::init(i1,i2);
34
+ }
35
+
36
+ template <class T>
37
+ forceinline void
38
+ UnknownRanges<T>::init(const T& v) {
39
+ i1.init(v);
40
+ i2.init(v);
41
+ Iter::Ranges::Diff<LubRanges<T>, GlbRanges<T> >::init(i1,i2);
42
+ }
43
+
44
+ }}
45
+
46
+ // STATISTICS: set-var
47
+
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ * Christian Schulte <schulte@gecode.org>
5
+ * Gabor Szokoli <szokoli@gecode.org>
6
+ *
7
+ * Copyright:
8
+ * Guido Tack, 2004
9
+ * Christian Schulte, 2004
10
+ * Gabor Szokoli, 2004
11
+ *
12
+ * Last modified:
13
+ * $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
14
+ * $Revision: 3188 $
15
+ *
16
+ * This file is part of Gecode, the generic constraint
17
+ * development environment:
18
+ * http://www.gecode.org
19
+ *
20
+ * See the file "LICENSE" for information on usage and
21
+ * redistribution of this file, and for a
22
+ * DISCLAIMER OF ALL WARRANTIES.
23
+ *
24
+ */
25
+
26
+
27
+ #include "gecode/set.hh"
28
+
29
+ namespace Gecode {
30
+
31
+ SetVar::SetVar(Space* home)
32
+ : x(new (home) Set::SetVarImp(home)) {}
33
+
34
+ SetVar::SetVar(Space* home,int lbMin,int lbMax,int ubMin,int ubMax,
35
+ unsigned int minCard, unsigned int maxCard)
36
+ : x(new (home) Set::SetVarImp(home,lbMin,lbMax,ubMin,ubMax,
37
+ minCard,maxCard)) {
38
+ if ((lbMin < Limits::Set::int_min) ||
39
+ (lbMax > Limits::Set::int_max) ||
40
+ (ubMin < Limits::Set::int_min) ||
41
+ (ubMax > Limits::Set::int_max))
42
+ throw Set::VariableOutOfRangeDomain("SetVar");
43
+ if (maxCard > Limits::Set::card_max)
44
+ throw Set::VariableOutOfRangeCardinality("SetVar");
45
+ if (minCard > maxCard)
46
+ throw Set::VariableFailedDomain("SetVar");
47
+ }
48
+
49
+ SetVar::SetVar(Space* home, const IntSet& glb,int ubMin,int ubMax,
50
+ unsigned int minCard, unsigned int maxCard)
51
+ : x(new (home) Set::SetVarImp(home,glb,ubMin,ubMax,minCard,maxCard)) {
52
+ if ( ((glb.size() > 0) &&
53
+ ((glb.min() < Limits::Set::int_min) ||
54
+ (glb.max() > Limits::Set::int_max))) ||
55
+ (ubMin < Limits::Set::int_min) ||
56
+ (ubMax > Limits::Set::int_max))
57
+ throw Set::VariableOutOfRangeDomain("SetVar");
58
+ if (maxCard > Limits::Set::card_max)
59
+ throw Set::VariableOutOfRangeCardinality("SetVar");
60
+ if (minCard > maxCard)
61
+ throw Set::VariableFailedDomain("SetVar");
62
+ }
63
+
64
+ SetVar::SetVar(Space* home,int lbMin,int lbMax,const IntSet& lub,
65
+ unsigned int minCard, unsigned int maxCard)
66
+ : x(new (home) Set::SetVarImp(home,lbMin,lbMax,lub,minCard,maxCard)) {
67
+ if ( ((lub.size() > 0) &&
68
+ ((lub.min() < Limits::Set::int_min) ||
69
+ (lub.max() > Limits::Set::int_max))) ||
70
+ (lbMin < Limits::Set::int_min) ||
71
+ (lbMax > Limits::Set::int_max))
72
+ throw Set::VariableOutOfRangeDomain("SetVarArray");
73
+ if (maxCard > Limits::Set::card_max)
74
+ throw Set::VariableOutOfRangeCardinality("SetVar");
75
+ if (minCard > maxCard)
76
+ throw Set::VariableFailedDomain("SetVar");
77
+ }
78
+
79
+ SetVar::SetVar(Space* home,
80
+ const IntSet& glb, const IntSet& lub,
81
+ unsigned int minCard, unsigned int maxCard)
82
+ : x(new (home) Set::SetVarImp(home,glb,lub,minCard,maxCard)) {
83
+ if (((glb.size() > 0) &&
84
+ ((glb.min() < Limits::Set::int_min) ||
85
+ (glb.max() > Limits::Set::int_max))) ||
86
+ ((glb.size() > 0) &&
87
+ ((lub.min() < Limits::Set::int_min) ||
88
+ (lub.max() > Limits::Set::int_max))))
89
+ throw Set::VariableOutOfRangeDomain("SetVar");
90
+ if (maxCard > Limits::Set::card_max)
91
+ throw Set::VariableOutOfRangeCardinality("SetVar");
92
+ if (minCard > maxCard)
93
+ throw Set::VariableFailedDomain("SetVar");
94
+ }
95
+
96
+ }
97
+
98
+ // STATISTICS: set-var
99
+
@@ -0,0 +1,282 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ * Christian Schulte <schulte@gecode.org>
5
+ * Gabor Szokoli <szokoli@gecode.org>
6
+ *
7
+ * Copyright:
8
+ * Guido Tack, 2004
9
+ * Christian Schulte, 2004
10
+ * Gabor Szokoli, 2004
11
+ *
12
+ * Last modified:
13
+ * $Date: 2005-10-11 17:57:38 +0200 (Tue, 11 Oct 2005) $ by $Author: tack $
14
+ * $Revision: 2334 $
15
+ *
16
+ * This file is part of Gecode, the generic constraint
17
+ * development environment:
18
+ * http://www.gecode.org
19
+ *
20
+ * See the file "LICENSE" for information on usage and
21
+ * redistribution of this file, and for a
22
+ * DISCLAIMER OF ALL WARRANTIES.
23
+ *
24
+ */
25
+
26
+ namespace Gecode {
27
+
28
+ /*
29
+ * Constructors and access
30
+ *
31
+ */
32
+
33
+ forceinline
34
+ SetVar::SetVar(void) {
35
+ //Beware! Constructor bypassed when instance created via VarArray!
36
+ //Use init() instead!
37
+ }
38
+
39
+ forceinline void
40
+ SetVar::init(Space* home) {
41
+ x = new (home) Set::SetVarImp(home);
42
+ }
43
+
44
+ forceinline void
45
+ SetVar::init(Space* home,int lbMin,int lbMax,int ubMin,int ubMax,
46
+ unsigned int cardMin, unsigned int cardMax) {
47
+ x = new (home) Set::SetVarImp(home, lbMin,lbMax,ubMin,ubMax,
48
+ cardMin, cardMax);
49
+ }
50
+
51
+ forceinline void
52
+ SetVar::init(Space* home, const IntSet& glb,int ubMin,int ubMax,
53
+ unsigned int cardMin, unsigned int cardMax) {
54
+ x = new (home) Set::SetVarImp(home, glb, ubMin, ubMax, cardMin, cardMax);
55
+ }
56
+
57
+ forceinline void
58
+ SetVar::init(Space* home, int lbMin,int lbMax,const IntSet& lub,
59
+ unsigned int cardMin, unsigned int cardMax) {
60
+ x = new (home) Set::SetVarImp(home, lbMin, lbMax, lub, cardMin, cardMax);
61
+ }
62
+
63
+ forceinline void
64
+ SetVar::init(Space* home, const IntSet& glb, const IntSet& lub,
65
+ unsigned int cardMin, unsigned int cardMax) {
66
+ x = new (home) Set::SetVarImp(home, glb, lub, cardMin, cardMax);
67
+ }
68
+
69
+ forceinline Set::SetVarImp*
70
+ SetVar::variable(void) const {
71
+ return x;
72
+ }
73
+
74
+
75
+
76
+ /*
77
+ * Variable information
78
+ *
79
+ */
80
+
81
+ forceinline unsigned int
82
+ SetVar::glbSize(void) const { return x->glbSize(); }
83
+
84
+ forceinline unsigned int
85
+ SetVar::lubSize(void) const { return x->lubSize(); }
86
+
87
+ forceinline unsigned int
88
+ SetVar::unknownSize(void) const { return x->lubSize() - x->glbSize(); }
89
+
90
+ forceinline bool
91
+ SetVar::assigned(void) const { return x->assigned(); }
92
+
93
+ forceinline bool
94
+ SetVar::contains(int i) const { return (x->knownIn(i)); }
95
+
96
+ forceinline bool
97
+ SetVar::notContains(int i) const { return (x->knownOut(i)); }
98
+
99
+ forceinline unsigned int
100
+ SetVar::cardMin(void) const { return x->cardMin(); }
101
+
102
+ forceinline unsigned int
103
+ SetVar::cardMax(void) const { return x->cardMax(); }
104
+
105
+ forceinline int
106
+ SetVar::lubMin(void) const { return x->lubMin(); }
107
+
108
+ forceinline int
109
+ SetVar::lubMax(void) const { return x->lubMax(); }
110
+
111
+ forceinline int
112
+ SetVar::glbMin(void) const { return x->glbMin(); }
113
+
114
+ forceinline int
115
+ SetVar::glbMax(void) const { return x->glbMax(); }
116
+
117
+ /*
118
+ * Cloning
119
+ *
120
+ */
121
+
122
+ forceinline void
123
+ SetVar::update(Space* home, bool share, SetVar& y) {
124
+ x = y.x->copy(home,share);
125
+ }
126
+
127
+
128
+ /*
129
+ * Range and value iterators for set variables
130
+ *
131
+ */
132
+
133
+ forceinline
134
+ SetVarGlbRanges::SetVarGlbRanges(void) {}
135
+
136
+ forceinline
137
+ SetVarGlbRanges::SetVarGlbRanges(const SetVar& s)
138
+ : iter(s.variable()) {}
139
+
140
+ forceinline
141
+ bool
142
+ SetVarGlbRanges::operator()(void) const { return iter(); }
143
+
144
+ forceinline
145
+ void
146
+ SetVarGlbRanges::operator++(void) { ++iter; }
147
+
148
+ forceinline
149
+ int
150
+ SetVarGlbRanges::min(void) const { return iter.min(); }
151
+
152
+ forceinline
153
+ int
154
+ SetVarGlbRanges::max(void) const { return iter.max(); }
155
+
156
+ forceinline
157
+ unsigned int
158
+ SetVarGlbRanges::width(void) const { return iter.width(); }
159
+
160
+ forceinline
161
+ SetVarLubRanges::SetVarLubRanges(void) {}
162
+
163
+ forceinline
164
+ SetVarLubRanges::SetVarLubRanges(const SetVar& s)
165
+ : iter(s.variable()) {}
166
+
167
+ forceinline
168
+ bool
169
+ SetVarLubRanges::operator()(void) const { return iter(); }
170
+
171
+ forceinline
172
+ void
173
+ SetVarLubRanges::operator++(void) { ++iter; }
174
+
175
+ forceinline
176
+ int
177
+ SetVarLubRanges::min(void) const { return iter.min(); }
178
+
179
+ forceinline
180
+ int
181
+ SetVarLubRanges::max(void) const { return iter.max(); }
182
+
183
+ forceinline
184
+ unsigned int
185
+ SetVarLubRanges::width(void) const { return iter.width(); }
186
+
187
+ forceinline
188
+ SetVarUnknownRanges::SetVarUnknownRanges(void) {}
189
+
190
+ forceinline
191
+ SetVarUnknownRanges::SetVarUnknownRanges(const SetVar& s) {
192
+ Set::SetVarImp *si = s.variable();
193
+ iter.init(si);
194
+ }
195
+
196
+ forceinline
197
+ bool
198
+ SetVarUnknownRanges::operator()(void) const { return iter(); }
199
+
200
+ forceinline
201
+ void
202
+ SetVarUnknownRanges::operator++(void) { ++iter; }
203
+
204
+ forceinline
205
+ int
206
+ SetVarUnknownRanges::min(void) const { return iter.min(); }
207
+
208
+ forceinline
209
+ int
210
+ SetVarUnknownRanges::max(void) const { return iter.max(); }
211
+
212
+ forceinline
213
+ unsigned int
214
+ SetVarUnknownRanges::width(void) const { return iter.width(); }
215
+
216
+ forceinline
217
+ SetVarGlbValues::SetVarGlbValues(const SetVar& x) {
218
+ SetVarGlbRanges ivr(x);
219
+ iter.init(ivr);
220
+ }
221
+
222
+ forceinline bool
223
+ SetVarGlbValues::operator()(void) const {
224
+ return iter();
225
+ }
226
+
227
+ forceinline void
228
+ SetVarGlbValues::operator++(void) {
229
+ ++iter;
230
+ }
231
+
232
+ forceinline int
233
+ SetVarGlbValues::val(void) const {
234
+ return iter.val();
235
+ }
236
+
237
+ forceinline
238
+ SetVarLubValues::SetVarLubValues(const SetVar& x) {
239
+ SetVarLubRanges ivr(x);
240
+ iter.init(ivr);
241
+ }
242
+
243
+ forceinline bool
244
+ SetVarLubValues::operator()(void) const {
245
+ return iter();
246
+ }
247
+
248
+ forceinline void
249
+ SetVarLubValues::operator++(void) {
250
+ ++iter;
251
+ }
252
+
253
+ forceinline int
254
+ SetVarLubValues::val(void) const {
255
+ return iter.val();
256
+ }
257
+
258
+ forceinline
259
+ SetVarUnknownValues::SetVarUnknownValues(const SetVar& x) {
260
+ SetVarUnknownRanges ivr(x);
261
+ iter.init(ivr);
262
+ }
263
+
264
+ forceinline bool
265
+ SetVarUnknownValues::operator()(void) const {
266
+ return iter();
267
+ }
268
+
269
+ forceinline void
270
+ SetVarUnknownValues::operator++(void) {
271
+ ++iter;
272
+ }
273
+
274
+ forceinline int
275
+ SetVarUnknownValues::val(void) const {
276
+ return iter.val();
277
+ }
278
+
279
+ }
280
+
281
+ // STATISTICS: set-var
282
+
@@ -0,0 +1,1075 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ *
5
+ * Contributing authors:
6
+ * Christian Schulte <schulte@gecode.org>
7
+ *
8
+ * Copyright:
9
+ * Guido Tack, 2004
10
+ * Christian Schulte, 2004
11
+ *
12
+ * Last modified:
13
+ * $Date: 2006-08-24 11:25:05 +0200 (Thu, 24 Aug 2006) $ by $Author: schulte $
14
+ * $Revision: 3559 $
15
+ *
16
+ * This file is part of Gecode, the generic constraint
17
+ * development environment:
18
+ * http://www.gecode.org
19
+ *
20
+ * See the file "LICENSE" for information on usage and
21
+ * redistribution of this file, and for a
22
+ * DISCLAIMER OF ALL WARRANTIES.
23
+ *
24
+ */
25
+
26
+ #include <iostream>
27
+ #include "gecode/iter.hh"
28
+
29
+ namespace Gecode {
30
+
31
+ namespace Set {
32
+
33
+ /**
34
+ * \defgroup TaskActorSetView Set views
35
+ *
36
+ * Set propagators and branchings compute with set views.
37
+ * Set views provide views on set variable implementations,
38
+ * set constants, and integer variable implementations.
39
+ * \ingroup TaskActorSet
40
+ */
41
+
42
+ /**
43
+ * \brief %Set view for set variables
44
+ * \ingroup TaskActorSetView
45
+ */
46
+
47
+ class SetView : public VariableViewBase<SetVarImp> {
48
+ protected:
49
+ using VariableViewBase<SetVarImp>::var;
50
+ public:
51
+ /// \name Constructors and initialization
52
+ //@{
53
+ /// Default constructor
54
+ SetView(void);
55
+ /// Initialize from set variable \a x
56
+ SetView(const SetVar& x);
57
+ //@}
58
+
59
+ /// \name Value access
60
+ //@{
61
+
62
+ /// Return minimum cardinality
63
+ unsigned int cardMin(void) const;
64
+ /// Return maximum cardinality
65
+ unsigned int cardMax(void) const;
66
+ /// Return minimum of the least upper bound
67
+ int lubMin(void) const;
68
+ /// Return maximum of the least upper bound
69
+ int lubMax(void) const;
70
+ /// Return n-th smallest element of the least upper bound
71
+ int lubMinN(int n) const;
72
+ /// Return the n-th largest element of the least upper bound
73
+ int lubMaxN(int n) const;
74
+ /// Return minimum of the greatest lower bound
75
+ int glbMin(void) const;
76
+ /// Return maximum of the greatest lower bound
77
+ int glbMax(void) const;
78
+
79
+ /// Return the number of elements in the greatest lower bound
80
+ unsigned int glbSize(void) const;
81
+ /// Return the number of elements in the least upper bound
82
+ unsigned int lubSize(void) const;
83
+ /// Return the number of unknown elements
84
+ unsigned int unknownSize(void) const;
85
+ //@}
86
+
87
+ /// \name Domain tests
88
+ //@{
89
+ /// Test whether view is assigned
90
+ bool assigned(void) const;
91
+ /// Test whether \a i is in the greatest lower bound
92
+ bool contains(int i) const;
93
+ /// Test whether \a i is not in the least upper bound
94
+ bool notContains(int i) const;
95
+ //@}
96
+
97
+
98
+ /// \name Domain update by value
99
+ //@{
100
+ /// Restrict cardinality to be greater than or equal to \a m
101
+ ModEvent cardMin(Space* home, unsigned int m);
102
+ /// Restrict cardinality to be less than or equal to \a m
103
+ ModEvent cardMax(Space* home, unsigned int m);
104
+ /**
105
+ * \brief Update greatest lower bound to include all elements
106
+ * between and including \a i and \a j
107
+ */
108
+ ModEvent include(Space* home,int i,int j);
109
+ /**
110
+ * \brief Restrict least upper bound to not contain all elements
111
+ * between and including \a i and \a j
112
+ */
113
+ ModEvent exclude(Space* home,int i,int j);
114
+ /// Update greatest lower bound to contain \a i
115
+ ModEvent include(Space* home,int i);
116
+ /// Restrict least upper bound to not contain \a i
117
+ ModEvent exclude(Space* home,int i);
118
+ /**
119
+ * \brief Update least upper bound to contain at most all elements
120
+ * between and including \a i and \a j
121
+ */
122
+ ModEvent intersect(Space* home,int i,int j);
123
+ /// Update least upper bound to contain at most the element \a i
124
+ ModEvent intersect(Space* home,int i);
125
+ //@}
126
+
127
+ /// \name Domain update by range iterator
128
+ //@{
129
+
130
+ /// Remove range sequence described by \a i from least upper bound
131
+ template <class I> ModEvent excludeI(Space* home, I& i);
132
+ /// Include range sequence described by \a i in greatest lower bound
133
+ template <class I> ModEvent includeI(Space* home, I& i);
134
+ /// Intersect least upper bound with range sequence described by \a i
135
+ template <class I> ModEvent intersectI(Space* home, I& iter);
136
+ //@}
137
+
138
+ /// \name Cloning
139
+ //@{
140
+ /// Update this view to be a clone of view \a x
141
+ void update(Space* home, bool share, SetView& x);
142
+ //@}
143
+ };
144
+
145
+ }
146
+
147
+ /**
148
+ * \brief Traits class for views and variable implementations
149
+ *
150
+ * This class specializes the ViewVarTraits for SetView.
151
+ * \ingroup TaskActorSetView
152
+ */
153
+ template<>
154
+ class ViewVarTraits<Set::SetView> {
155
+ public:
156
+ /// The variable type of a SetView
157
+ typedef Set::SetVarImp Var;
158
+ };
159
+
160
+ // Forward declarations for friends
161
+ namespace Set { class ConstantView; }
162
+ bool same(const Set::ConstantView&, const Set::ConstantView&);
163
+ bool before(const Set::ConstantView&, const Set::ConstantView&);
164
+
165
+ namespace Set {
166
+
167
+ /**
168
+ * \brief Constant view
169
+ *
170
+ * A constant set view \f$x\f$ for a set \f$s\f$ provides operations such
171
+ * that \f$x\f$ behaves like \f$s\f$.
172
+ * \ingroup TaskActorSetView
173
+ */
174
+ class ConstantView : public ConstantViewBase {
175
+ friend class LubRanges<ConstantView>;
176
+ friend class GlbRanges<ConstantView>;
177
+ friend bool Gecode::same(const Gecode::Set::ConstantView&,
178
+ const Gecode::Set::ConstantView&);
179
+ friend bool Gecode::before(const Gecode::Set::ConstantView&,
180
+ const Gecode::Set::ConstantView&);
181
+ private:
182
+ int *ranges;
183
+ unsigned int size;
184
+ unsigned int domSize;
185
+ public:
186
+ /// \name Constructors and initialization
187
+ //@{
188
+ /// Default constructor
189
+ ConstantView(void);
190
+ /// Construct with \a s as the domain
191
+ ConstantView(Space* home, const IntSet& s);
192
+ //@}
193
+
194
+ /// \name Value access
195
+ //@{
196
+ /// Return minimum cardinality
197
+ unsigned int cardMin(void) const;
198
+ /// Return maximum cardinality
199
+ unsigned int cardMax(void) const;
200
+ /// Return minimum of the least upper bound
201
+ int lubMin(void) const;
202
+ /// Return maximum of the least upper bound
203
+ int lubMax(void) const;
204
+ /// Return n-th smallest element of the least upper bound
205
+ int lubMinN(int n) const;
206
+ /// Return the n-th largest element of the least upper bound
207
+ int lubMaxN(int n) const;
208
+ /// Return minimum of the greatest lower bound
209
+ int glbMin(void) const;
210
+ /// Return maximum of the greatest lower bound
211
+ int glbMax(void) const;
212
+
213
+ /// Return the number of elements in the greatest lower bound
214
+ unsigned int glbSize(void) const;
215
+ /// Return the number of elements in the least upper bound
216
+ unsigned int lubSize(void) const;
217
+ /// Return the number of unknown elements
218
+ unsigned int unknownSize(void) const;
219
+ //@}
220
+
221
+ /// \name Domain tests
222
+ //@{
223
+ /// Test whether view is assigned
224
+ bool assigned(void) const;
225
+ /// Test whether \a i is in the greatest lower bound
226
+ bool contains(int i) const;
227
+ /// Test whether \a i is not in the least upper bound
228
+ bool notContains(int i) const;
229
+ //@}
230
+
231
+
232
+ /// \name Domain update by value
233
+ //@{
234
+ /// Restrict cardinality to be greater than or equal to \a m
235
+ ModEvent cardMin(Space* home, unsigned int m);
236
+ /// Restrict cardinality to be less than or equal to \a m
237
+ ModEvent cardMax(Space* home, unsigned int m);
238
+ /**
239
+ * \brief Update greatest lower bound to include all elements
240
+ * between and including \a i and \a j
241
+ */
242
+ ModEvent include(Space* home,int i,int j);
243
+ /**
244
+ * \brief Restrict least upper bound to not contain all elements
245
+ * between and including \a i and \a j
246
+ */
247
+ ModEvent exclude(Space* home,int i,int j);
248
+ /// Update greatest lower bound to contain \a i
249
+ ModEvent include(Space* home,int i);
250
+ /// Restrict least upper bound to not contain \a i
251
+ ModEvent exclude(Space* home,int i);
252
+ /**
253
+ * \brief Update least upper bound to contain at most all elements
254
+ * between and including \a i and \a j
255
+ */
256
+ ModEvent intersect(Space* home,int i,int j);
257
+ /// Update least upper bound to contain at most the element \a i
258
+ ModEvent intersect(Space* home,int i);
259
+ //@}
260
+
261
+ /// \name Domain update by range iterator
262
+ //@{
263
+
264
+ /// Remove range sequence described by \a i from least upper bound
265
+ template <class I> ModEvent excludeI(Space* home, I& i);
266
+ /// Include range sequence described by \a i in greatest lower bound
267
+ template <class I> ModEvent includeI(Space* home, I& i);
268
+ /// Intersect least upper bound with range sequence described by \a i
269
+ template <class I> ModEvent intersectI(Space* home, I& iter);
270
+ //@}
271
+
272
+ /// \name Propagator modification events
273
+ //@{
274
+ /// Return modification event of propagator \a p for view
275
+ static ModEvent pme(const Propagator* p);
276
+ /// Translate modification event \a me to propagator modification event for view
277
+ static PropModEvent pme(ModEvent);
278
+ //@}
279
+
280
+ /// \name Dependencies
281
+ //@{
282
+ /**
283
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
284
+ *
285
+ * In case \a process is false, the propagator is just subscribed but
286
+ * not processed for execution (this must be used when creating
287
+ * subscriptions during propagation).
288
+ */
289
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
290
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
291
+ void cancel(Space* home, Propagator* p, PropCond pc);
292
+ //@}
293
+
294
+ /// \name Cloning
295
+ //@{
296
+ /// Update this view to be a clone of view \a x
297
+ void update(Space* home, bool share, ConstantView& x);
298
+ //@}
299
+ };
300
+
301
+ }
302
+
303
+ /** \name View comparison
304
+ * \relates Gecode::Set::ConstantView
305
+ */
306
+ //@{
307
+ /// Test whether views \a x and \a y are the same
308
+ bool same(const Set::ConstantView& x, const Set::ConstantView& y);
309
+ /// Test whether view \a x comes before \a y (arbitrary order)
310
+ bool before(const Set::ConstantView& x, const Set::ConstantView& y);
311
+ //@}
312
+
313
+ /**
314
+ * \brief Traits class for views and variable implementations
315
+ *
316
+ * This class specializes the ViewVarTraits for ConstantView.
317
+ * \ingroup TaskActorSetView
318
+ */
319
+ template<>
320
+ class ViewVarTraits<Set::ConstantView> {
321
+ public:
322
+ /// The variable type of a ConstantView
323
+ typedef VarBase Var;
324
+ };
325
+
326
+ namespace Set {
327
+
328
+ /**
329
+ * \brief Constant view for the empty set
330
+ *
331
+ * A constant set view \f$x\f$ for the empty set provides operations such
332
+ * that \f$x\f$ behaves like the empty set.
333
+ * \ingroup TaskActorSetView
334
+ */
335
+
336
+ class EmptyView : public ConstantViewBase {
337
+ public:
338
+ /// \name Constructors and initialization
339
+ //@{
340
+ /// Default constructor
341
+ EmptyView(void);
342
+ //@}
343
+
344
+ /// \name Value access
345
+ //@{
346
+
347
+ /// Return minimum cardinality
348
+ unsigned int cardMin(void) const;
349
+ /// Return maximum cardinality
350
+ unsigned int cardMax(void) const;
351
+ /// Return minimum of the least upper bound
352
+ int lubMin(void) const;
353
+ /// Return maximum of the least upper bound
354
+ int lubMax(void) const;
355
+ /// Return n-th smallest element of the least upper bound
356
+ int lubMinN(int n) const;
357
+ /// Return the n-th largest element of the least upper bound
358
+ int lubMaxN(int n) const;
359
+ /// Return minimum of the greatest lower bound
360
+ int glbMin(void) const;
361
+ /// Return maximum of the greatest lower bound
362
+ int glbMax(void) const;
363
+
364
+ /// Return the number of elements in the greatest lower bound
365
+ unsigned int glbSize(void) const;
366
+ /// Return the number of elements in the least upper bound
367
+ unsigned int lubSize(void) const;
368
+ /// Return the number of unknown elements
369
+ unsigned int unknownSize(void) const;
370
+ //@}
371
+
372
+ /// \name Domain tests
373
+ //@{
374
+ /// Test whether view is assigned
375
+ bool assigned(void) const;
376
+ /// Test whether \a i is in the greatest lower bound
377
+ bool contains(int i) const;
378
+ /// Test whether \a i is not in the least upper bound
379
+ bool notContains(int i) const;
380
+ //@}
381
+
382
+
383
+ /// \name Domain update by value
384
+ //@{
385
+ /// Restrict cardinality to be greater than or equal to \a m
386
+ ModEvent cardMin(Space* home, unsigned int m);
387
+ /// Restrict cardinality to be less than or equal to \a m
388
+ ModEvent cardMax(Space* home, unsigned int m);
389
+ /**
390
+ * \brief Update greatest lower bound to include all elements
391
+ * between and including \a i and \a j
392
+ */
393
+ ModEvent include(Space* home,int i,int j);
394
+ /**
395
+ * \brief Restrict least upper bound to not contain all elements
396
+ * between and including \a i and \a j
397
+ */
398
+ ModEvent exclude(Space* home,int i,int j);
399
+ /// Update greatest lower bound to contain \a i
400
+ ModEvent include(Space* home,int i);
401
+ /// Restrict least upper bound to not contain \a i
402
+ ModEvent exclude(Space* home,int i);
403
+ /**
404
+ * \brief Update least upper bound to contain at most all elements
405
+ * between and including \a i and \a j
406
+ */
407
+ ModEvent intersect(Space* home,int i,int j);
408
+ /// Update least upper bound to contain at most the element \a i
409
+ ModEvent intersect(Space* home,int i);
410
+ //@}
411
+
412
+ /// \name Domain update by range iterator
413
+ //@{
414
+
415
+ /// Remove range sequence described by \a i from least upper bound
416
+ template <class I> ModEvent excludeI(Space* home, I& i);
417
+ /// Include range sequence described by \a i in greatest lower bound
418
+ template <class I> ModEvent includeI(Space* home, I& i);
419
+ /// Intersect least upper bound with range sequence described by \a i
420
+ template <class I> ModEvent intersectI(Space* home, I& iter);
421
+ //@}
422
+
423
+ /// \name Propagator modification events
424
+ //@{
425
+ /// Return modification event of propagator \a p for view
426
+ static ModEvent pme(const Propagator* p);
427
+ /// Translate modification event \a me to propagator modification event for view
428
+ static PropModEvent pme(ModEvent);
429
+ //@}
430
+
431
+ /// \name Dependencies
432
+ //@{
433
+ /**
434
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
435
+ *
436
+ * In case \a process is false, the propagator is just subscribed but
437
+ * not processed for execution (this must be used when creating
438
+ * subscriptions during propagation).
439
+ */
440
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
441
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
442
+ void cancel(Space* home, Propagator* p, PropCond pc);
443
+ //@}
444
+
445
+ /// \name Cloning
446
+ //@{
447
+ /// Update this view to be a clone of view \a x
448
+ void update(Space* home, bool share, EmptyView& x);
449
+ //@}
450
+ };
451
+
452
+ }
453
+
454
+ /** \name View comparison
455
+ * \relates Gecode::Set::EmptyView
456
+ */
457
+ //@{
458
+ /// Test whether views \a x and \a y are the same
459
+ bool same(const Set::EmptyView& x, const Set::EmptyView& y);
460
+ /// Test whether view \a x comes before \a y (arbitrary order)
461
+ bool before(const Set::EmptyView& x, const Set::EmptyView& y);
462
+ //@}
463
+
464
+ /**
465
+ * \brief Traits class for views and variable implementations
466
+ *
467
+ * This class specializes the ViewVarTraits for EmptyView.
468
+ * \ingroup TaskActorSetView
469
+ */
470
+ template<>
471
+ class ViewVarTraits<Set::EmptyView> {
472
+ public:
473
+ /// The variable type of an EmptyView
474
+ typedef VarBase Var;
475
+ };
476
+
477
+ namespace Set {
478
+
479
+
480
+ /**
481
+ * \brief Constant view for the universe
482
+ *
483
+ * A constant set view \f$x\f$ for the universe provides operations such
484
+ * that \f$x\f$ behaves like the universe.
485
+ * \ingroup TaskActorSetView
486
+ */
487
+
488
+ class UniverseView : public ConstantViewBase {
489
+ public:
490
+ /// \name Constructors and initialization
491
+ //@{
492
+ /// Default constructor
493
+ UniverseView(void);
494
+ //@}
495
+
496
+ /// \name Value access
497
+ //@{
498
+
499
+ /// Return minimum cardinality
500
+ unsigned int cardMin(void) const;
501
+ /// Return maximum cardinality
502
+ unsigned int cardMax(void) const;
503
+ /// Return minimum of the least upper bound
504
+ int lubMin(void) const;
505
+ /// Return maximum of the least upper bound
506
+ int lubMax(void) const;
507
+ /// Return n-th smallest element of the least upper bound
508
+ int lubMinN(int n) const;
509
+ /// Return the n-th largest element of the least upper bound
510
+ int lubMaxN(int n) const;
511
+ /// Return minimum of the greatest lower bound
512
+ int glbMin(void) const;
513
+ /// Return maximum of the greatest lower bound
514
+ int glbMax(void) const;
515
+
516
+ /// Return the number of elements in the greatest lower bound
517
+ unsigned int glbSize(void) const;
518
+ /// Return the number of elements in the least upper bound
519
+ unsigned int lubSize(void) const;
520
+ /// Return the number of unknown elements
521
+ unsigned int unknownSize(void) const;
522
+ //@}
523
+
524
+ /// \name Domain tests
525
+ //@{
526
+ /// Test whether view is assigned
527
+ bool assigned(void) const;
528
+ /// Test whether \a i is in the greatest lower bound
529
+ bool contains(int i) const;
530
+ /// Test whether \a i is not in the least upper bound
531
+ bool notContains(int i) const;
532
+ //@}
533
+
534
+
535
+ /// \name Domain update by value
536
+ //@{
537
+ /// Restrict cardinality to be greater than or equal to \a m
538
+ ModEvent cardMin(Space* home, unsigned int m);
539
+ /// Restrict cardinality to be less than or equal to \a m
540
+ ModEvent cardMax(Space* home, unsigned int m);
541
+ /**
542
+ * \brief Update greatest lower bound to include all elements
543
+ * between and including \a i and \a j
544
+ */
545
+ ModEvent include(Space* home,int i,int j);
546
+ /**
547
+ * \brief Restrict least upper bound to not contain all elements
548
+ * between and including \a i and \a j
549
+ */
550
+ ModEvent exclude(Space* home,int i,int j);
551
+ /// Update greatest lower bound to contain \a i
552
+ ModEvent include(Space* home,int i);
553
+ /// Restrict least upper bound to not contain \a i
554
+ ModEvent exclude(Space* home,int i);
555
+ /**
556
+ * \brief Update least upper bound to contain at most all elements
557
+ * between and including \a i and \a j
558
+ */
559
+ ModEvent intersect(Space* home,int i,int j);
560
+ /// Update least upper bound to contain at most the element \a i
561
+ ModEvent intersect(Space* home,int i);
562
+ //@}
563
+
564
+ /// \name Domain update by range iterator
565
+ //@{
566
+
567
+ /// Remove range sequence described by \a i from least upper bound
568
+ template <class I> ModEvent excludeI(Space* home, I& i);
569
+ /// Include range sequence described by \a i in greatest lower bound
570
+ template <class I> ModEvent includeI(Space* home, I& i);
571
+ /// Intersect least upper bound with range sequence described by \a i
572
+ template <class I> ModEvent intersectI(Space* home, I& iter);
573
+ //@}
574
+
575
+ /// \name Propagator modification events
576
+ //@{
577
+ /// Return modification event of propagator \a p for view
578
+ static ModEvent pme(const Propagator* p);
579
+ /// Translate modification event \a me to propagator modification event for view
580
+ static PropModEvent pme(ModEvent);
581
+ //@}
582
+
583
+ /// \name Dependencies
584
+ //@{
585
+ /**
586
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
587
+ *
588
+ * In case \a process is false, the propagator is just subscribed but
589
+ * not processed for execution (this must be used when creating
590
+ * subscriptions during propagation).
591
+ */
592
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
593
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
594
+ void cancel(Space* home, Propagator* p, PropCond pc);
595
+ //@}
596
+
597
+ /// \name Cloning
598
+ //@{
599
+ /// Update this view to be a clone of view \a x
600
+ void update(Space* home, bool share, UniverseView& x);
601
+ //@}
602
+ };
603
+
604
+ }
605
+
606
+ /** \name View comparison
607
+ * \relates Gecode::Set::UniverseView
608
+ */
609
+ //@{
610
+ /// Test whether views \a x and \a y are the same
611
+ bool same(const Set::UniverseView& x, const Set::UniverseView& y);
612
+ /// Test whether view \a x comes before \a y (arbitrary order)
613
+ bool before(const Set::UniverseView& x, const Set::UniverseView& y);
614
+ //@}
615
+
616
+ /**
617
+ * \brief Traits class for views and variable implementations
618
+ *
619
+ * This class specializes the ViewVarTraits for UniverseView.
620
+ * \ingroup TaskActorSetView
621
+ */
622
+ template<>
623
+ class ViewVarTraits<Set::UniverseView> {
624
+ public:
625
+ /// The variable type of a UniverseView
626
+ typedef VarBase Var;
627
+ };
628
+
629
+ namespace Set {
630
+
631
+
632
+
633
+ /**
634
+ * \brief Singleton set view
635
+ *
636
+ * A singleton set view \f$s\f$ for an integer view \f$x\f$ provides
637
+ * operations such that \f$s\f$ behaves like the singleton set \f$\{x\}\f$.
638
+ * \ingroup TaskActorSetView
639
+ */
640
+
641
+ class SingletonView :
642
+ public DerivedViewBase<Gecode::Int::IntView> {
643
+ protected:
644
+ using DerivedViewBase<Gecode::Int::IntView>::view;;
645
+
646
+ /// Convert set variable PropCond \a pc to a PropCond for integer variables
647
+ static PropCond pc_settoint(PropCond pc);
648
+ /// Convert integer variable ModEvent \a me to a ModEvent for set variables
649
+ static ModEvent me_inttoset(ModEvent me);
650
+
651
+ public:
652
+ /// \name Constructors and initialization
653
+ //@{
654
+ /// Default constructor
655
+ SingletonView(void);
656
+ /// Initialize with integer view \a x
657
+ SingletonView(Gecode::Int::IntView& x);
658
+ //@}
659
+
660
+ /// \name Value access
661
+ //@{
662
+
663
+ /// Return minimum cardinality
664
+ unsigned int cardMin(void) const;
665
+ /// Return maximum cardinality
666
+ unsigned int cardMax(void) const;
667
+ /// Return minimum of the least upper bound
668
+ int lubMin(void) const;
669
+ /// Return maximum of the least upper bound
670
+ int lubMax(void) const;
671
+ /// Return n-th smallest element of the least upper bound
672
+ int lubMinN(int n) const;
673
+ /// Return the n-th largest element of the least upper bound
674
+ int lubMaxN(int n) const;
675
+ /// Return minimum of the greatest lower bound
676
+ int glbMin(void) const;
677
+ /// Return maximum of the greatest lower bound
678
+ int glbMax(void) const;
679
+
680
+ /// Return the number of elements in the greatest lower bound
681
+ unsigned int glbSize(void) const;
682
+ /// Return the number of elements in the least upper bound
683
+ unsigned int lubSize(void) const;
684
+ /// Return the number of unknown elements
685
+ unsigned int unknownSize(void) const;
686
+ //@}
687
+
688
+ /// \name Domain tests
689
+ //@{
690
+ /// Test whether view is assigned
691
+ bool assigned(void) const;
692
+ /// Test whether \a i is in the greatest lower bound
693
+ bool contains(int i) const;
694
+ /// Test whether \a i is not in the least upper bound
695
+ bool notContains(int i) const;
696
+ //@}
697
+
698
+
699
+ /// \name Domain update by value
700
+ //@{
701
+ /// Restrict cardinality to be greater than or equal to \a m
702
+ ModEvent cardMin(Space* home, unsigned int m);
703
+ /// Restrict cardinality to be less than or equal to \a m
704
+ ModEvent cardMax(Space* home, unsigned int m);
705
+ /**
706
+ * \brief Update greatest lower bound to include all elements
707
+ * between and including \a i and \a j
708
+ */
709
+ ModEvent include(Space* home,int i,int j);
710
+ /**
711
+ * \brief Restrict least upper bound to not contain all elements
712
+ * between and including \a i and \a j
713
+ */
714
+ ModEvent exclude(Space* home,int i,int j);
715
+ /// Update greatest lower bound to contain \a i
716
+ ModEvent include(Space* home,int i);
717
+ /// Restrict least upper bound to not contain \a i
718
+ ModEvent exclude(Space* home,int i);
719
+ /**
720
+ * \brief Update least upper bound to contain at most all elements
721
+ * between and including \a i and \a j
722
+ */
723
+ ModEvent intersect(Space* home,int i,int j);
724
+ /// Update least upper bound to contain at most the element \a i
725
+ ModEvent intersect(Space* home,int i);
726
+ //@}
727
+
728
+ /// \name Domain update by range iterator
729
+ //@{
730
+
731
+ /// Remove range sequence described by \a i from least upper bound
732
+ template <class I> ModEvent excludeI(Space* home, I& i);
733
+ /// Include range sequence described by \a i in greatest lower bound
734
+ template <class I> ModEvent includeI(Space* home, I& i);
735
+ /// Intersect least upper bound with range sequence described by \a i
736
+ template <class I> ModEvent intersectI(Space* home, I& iter);
737
+ //@}
738
+
739
+ /// \name Propagator modification events
740
+ //@{
741
+ /// Return modification event of propagator \a p for view
742
+ static ModEvent pme(const Propagator* p);
743
+ /// Translate modification event \a me to propagator modification event for view
744
+ static PropModEvent pme(ModEvent);
745
+ //@}
746
+
747
+ /// \name Dependencies
748
+ //@{
749
+ /**
750
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
751
+ *
752
+ * In case \a process is false, the propagator is just subscribed but
753
+ * not processed for execution (this must be used when creating
754
+ * subscriptions during propagation).
755
+ */
756
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
757
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
758
+ void cancel(Space* home, Propagator* p, PropCond pc);
759
+ //@}
760
+
761
+
762
+ /// \name Cloning
763
+ //@{
764
+ /// Update this view to be a clone of view \a x
765
+ void update(Space* home, bool share, SingletonView& x);
766
+ //@}
767
+ };
768
+
769
+ }
770
+
771
+ /** \name View comparison
772
+ * \relates Gecode::Set::SingletonView
773
+ */
774
+ //@{
775
+ /// Test whether views \a x and \a y are the same
776
+ bool same(const Set::SingletonView& x, const Set::SingletonView& y);
777
+ /// Test whether view \a x comes before \a y (arbitrary order)
778
+ bool before(const Set::SingletonView& x, const Set::SingletonView& y);
779
+ //@}
780
+
781
+ /**
782
+ * \brief Traits class for views and variable implementations
783
+ *
784
+ * This class specializes the ViewVarTraits for SingletonView.
785
+ * \ingroup TaskActorSetView
786
+ */
787
+ template<>
788
+ class ViewVarTraits<Set::SingletonView> {
789
+ public:
790
+ /// The variable type of a SingletonView
791
+ typedef Int::IntVarImp Var;
792
+ };
793
+
794
+ namespace Set {
795
+
796
+
797
+ /**
798
+ * \brief Complement set view
799
+ *
800
+ * A complement set view \f$s\f$ for a set view \f$t\f$ provides
801
+ * operations such that \f$s\f$ behaves like the complement of \f$\{t\}\f$.
802
+ * The complement is defined in terms of the set universe.
803
+ * \ingroup TaskActorSetView
804
+ */
805
+
806
+ template <class View>
807
+ class ComplementView
808
+ : public DerivedViewBase<View> {
809
+ protected:
810
+ using DerivedViewBase<View>::view;
811
+
812
+ public:
813
+ /// Negate the propagation condition \a pc
814
+ static PropCond pc_negateset(PropCond pc);
815
+ /// Negate the modification event \a me
816
+ static ModEvent me_negateset(ModEvent me);
817
+
818
+ /// \name Constructors and initialization
819
+ //@{
820
+ /// Default constructor
821
+ ComplementView(void);
822
+ /// Initialize with set view x
823
+ ComplementView(View& x);
824
+ //@}
825
+
826
+ /// \name Value access
827
+ //@{
828
+
829
+ /// Return minimum cardinality
830
+ unsigned int cardMin(void) const;
831
+ /// Return maximum cardinality
832
+ unsigned int cardMax(void) const;
833
+ /// Return minimum of the least upper bound
834
+ int lubMin(void) const;
835
+ /// Return maximum of the least upper bound
836
+ int lubMax(void) const;
837
+ /// Return n-th smallest element of the least upper bound
838
+ int lubMinN(int n) const;
839
+ /// Return the n-th largest element of the least upper bound
840
+ int lubMaxN(int n) const;
841
+ /// Return minimum of the greatest lower bound
842
+ int glbMin(void) const;
843
+ /// Return maximum of the greatest lower bound
844
+ int glbMax(void) const;
845
+
846
+ /// Return the number of elements in the greatest lower bound
847
+ unsigned int glbSize(void) const;
848
+ /// Return the number of elements in the least upper bound
849
+ unsigned int lubSize(void) const;
850
+ /// Return the number of unknown elements
851
+ unsigned int unknownSize(void) const;
852
+ //@}
853
+
854
+ /// \name Domain tests
855
+ //@{
856
+ /// Test whether view is assigned
857
+ bool assigned(void) const;
858
+ /// Test whether \a i is in the greatest lower bound
859
+ bool contains(int i) const;
860
+ /// Test whether \a i is not in the least upper bound
861
+ bool notContains(int i) const;
862
+ //@}
863
+
864
+
865
+ /// \name Domain update by value
866
+ //@{
867
+ /// Restrict cardinality to be greater than or equal to \a m
868
+ ModEvent cardMin(Space* home, unsigned int m);
869
+ /// Restrict cardinality to be less than or equal to \a m
870
+ ModEvent cardMax(Space* home, unsigned int m);
871
+ /**
872
+ * \brief Update greatest lower bound to include all elements
873
+ * between and including \a i and \a j
874
+ */
875
+ ModEvent include(Space* home,int i,int j);
876
+ /**
877
+ * \brief Restrict least upper bound to not contain all elements
878
+ * between and including \a i and \a j
879
+ */
880
+ ModEvent exclude(Space* home,int i,int j);
881
+ /// Update greatest lower bound to contain \a i
882
+ ModEvent include(Space* home,int i);
883
+ /// Restrict least upper bound to not contain \a i
884
+ ModEvent exclude(Space* home,int i);
885
+ /**
886
+ * \brief Update least upper bound to contain at most all elements
887
+ * between and including \a i and \a j
888
+ */
889
+ ModEvent intersect(Space* home,int i,int j);
890
+ /// Update least upper bound to contain at most the element \a i
891
+ ModEvent intersect(Space* home,int i);
892
+ //@}
893
+
894
+ /// \name Domain update by range iterator
895
+ //@{
896
+
897
+ /// Remove range sequence described by \a i from least upper bound
898
+ template <class I> ModEvent excludeI(Space* home, I& i);
899
+ /// Include range sequence described by \a i in greatest lower bound
900
+ template <class I> ModEvent includeI(Space* home, I& i);
901
+ /// Intersect least upper bound with range sequence described by \a i
902
+ template <class I> ModEvent intersectI(Space* home, I& iter);
903
+ //@}
904
+
905
+ /// \name Propagator modification events
906
+ //@{
907
+ /// Return modification event of propagator \a p for view
908
+ static ModEvent pme(const Propagator* p);
909
+ /// Translate modification event \a me to propagator modification event for view
910
+ static PropModEvent pme(ModEvent);
911
+ //@}
912
+
913
+ /// \name Dependencies
914
+ //@{
915
+ /**
916
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
917
+ *
918
+ * In case \a process is false, the propagator is just subscribed but
919
+ * not processed for execution (this must be used when creating
920
+ * subscriptions during propagation).
921
+ */
922
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
923
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
924
+ void cancel(Space* home, Propagator* p, PropCond pc);
925
+ //@}
926
+
927
+
928
+ /// \name Cloning
929
+ //@{
930
+ /// Update this view to be a clone of view \a x
931
+ void update(Space* home, bool share, ComplementView& x);
932
+ //@}
933
+ };
934
+
935
+ }
936
+
937
+ /** \name View comparison
938
+ * \relates Gecode::Set::ComplementView
939
+ */
940
+ //@{
941
+ /// Test whether views \a x and \a y are the same
942
+ template <class View>
943
+ bool same(const Set::ComplementView<View>& x,
944
+ const Set::ComplementView<View>& y);
945
+ /// Test whether view \a x comes before \a y (arbitrary order)
946
+ template <class View>
947
+ bool before(const Set::ComplementView<View>& x,
948
+ const Set::ComplementView<View>& y);
949
+ //@}
950
+
951
+
952
+ /**
953
+ * \brief Traits class for views and variable implementations
954
+ *
955
+ * This class specializes the ViewVarTraits for ComplementView.
956
+ * \ingroup TaskActorSetView
957
+ */
958
+ template <class View>
959
+ class ViewVarTraits<Set::ComplementView<View> > {
960
+ public:
961
+ /// The variable type of a ComplementView
962
+ typedef typename ViewVarTraits<View>::Var Var;
963
+ };
964
+
965
+ namespace Set {
966
+
967
+ /**
968
+ * \brief Complement set view specialized for complement set views
969
+ *
970
+ * A complement set view \f$s\f$ for a complement set view for a set
971
+ * view \f$t\f$ provides operations such that \f$s\f$ behaves like
972
+ * \f$\{t\}\f$. This eliminates double negation.
973
+ * \ingroup TaskActorSetView
974
+ */
975
+ template <class View>
976
+ class ComplementView<ComplementView<View> > : public View {
977
+ public:
978
+ /// \name Constructors and initialization
979
+ //@{
980
+ /// Default constructor
981
+ ComplementView(void);
982
+ /// Initialize with set view x
983
+ ComplementView(ComplementView<View>& x);
984
+ //@}
985
+ };
986
+
987
+ }
988
+
989
+ /** \name View comparison
990
+ * \relates Gecode::Set::ComplementView
991
+ */
992
+ //@{
993
+ /// Test whether views \a x and \a y are the same
994
+ template <class View>
995
+ bool same(const Set::ComplementView<Set::ComplementView<View> >& x,
996
+ const Set::ComplementView<Set::ComplementView<View> >& y);
997
+ /// Test whether view \a x comes before \a y (arbitrary order)
998
+ template <class View>
999
+ bool before(const Set::ComplementView<Set::ComplementView<View> >& x,
1000
+ const Set::ComplementView<Set::ComplementView<View> >& y);
1001
+ //@}
1002
+
1003
+
1004
+ /**
1005
+ * \brief Traits class for views and variable implementations
1006
+ *
1007
+ * This class specializes the ViewVarTraits for double-negated
1008
+ * ComplementView.
1009
+ * \ingroup TaskActorSetView
1010
+ */
1011
+ template <class View>
1012
+ class ViewVarTraits<Set::ComplementView<Set::ComplementView<View> > > {
1013
+ public:
1014
+ /// The variable type of a ComplementView
1015
+ typedef typename ViewVarTraits<View>::Var Var;
1016
+ };
1017
+
1018
+ }
1019
+
1020
+ #include "gecode/set/view/set.icc"
1021
+ #include "gecode/set/view/const.icc"
1022
+ #include "gecode/set/view/singleton.icc"
1023
+ #include "gecode/set/view/complement.icc"
1024
+
1025
+ /**
1026
+ * \brief Print set variable view
1027
+ * \relates Gecode::Set::SetView
1028
+ */
1029
+ GECODE_SET_EXPORT std::ostream&
1030
+ operator<<(std::ostream&, const Gecode::Set::SetView&);
1031
+
1032
+
1033
+ /**
1034
+ * \brief Print empty set view
1035
+ * \relates Gecode::Set::EmptyView
1036
+ */
1037
+ GECODE_SET_EXPORT std::ostream&
1038
+ operator<<(std::ostream&, const Gecode::Set::EmptyView&);
1039
+
1040
+ /**
1041
+ * \brief Print universe set view
1042
+ * \relates Gecode::Set::UniverseView
1043
+ */
1044
+ GECODE_SET_EXPORT std::ostream&
1045
+ operator<<(std::ostream&, const Gecode::Set::UniverseView&);
1046
+
1047
+ /**
1048
+ * \brief Print set constant view
1049
+ * \relates Gecode::Set::ConstantView
1050
+ */
1051
+ GECODE_SET_EXPORT std::ostream&
1052
+ operator<<(std::ostream&, const Gecode::Set::ConstantView&);
1053
+
1054
+ /**
1055
+ * \brief Print singelton set view
1056
+ * \relates Gecode::Set::SingletonView
1057
+ */
1058
+ GECODE_SET_EXPORT std::ostream&
1059
+ operator<<(std::ostream&, const Gecode::Set::SingletonView&);
1060
+
1061
+ /**
1062
+ * \brief Print set complement view
1063
+ * \relates Gecode::Set::ComplementView
1064
+ */
1065
+ template <class View>
1066
+ std::ostream&
1067
+ operator<<(std::ostream&, const Gecode::Set::ComplementView<View>&);
1068
+
1069
+ inline std::ostream&
1070
+ operator<<(std::ostream& os, const Gecode::SetVar& x) {
1071
+ Gecode::Set::SetView vx(x);
1072
+ return os << vx;
1073
+ }
1074
+
1075
+ // STATISTICS: set-var