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,63 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2002
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-09-26 13:46:01 +0200 (Tue, 26 Sep 2006) $ by $Author: tack $
10
+ * $Revision: 3703 $
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
+ #include "gecode/int.hh"
23
+
24
+ namespace Gecode {
25
+
26
+ IntVar::IntVar(Space* home, int min, int max)
27
+ : var(new (home) Int::IntVarImp(home,min,max)) {
28
+ if ((min < Limits::Int::int_min) || (max > Limits::Int::int_max))
29
+ throw Int::VariableOutOfRangeDomain("IntVar::IntVar");
30
+ if (min > max)
31
+ throw Int::VariableEmptyDomain("IntVar::IntVar");
32
+ }
33
+
34
+ IntVar::IntVar(Space* home, const IntSet& ds)
35
+ : var(new (home) Int::IntVarImp(home,ds)) {
36
+ if ((ds.min() < Limits::Int::int_min) || (ds.max() > Limits::Int::int_max))
37
+ throw Int::VariableOutOfRangeDomain("IntVar::IntVar");
38
+ if (ds.size() == 0)
39
+ throw Int::VariableEmptyDomain("IntVar::IntVar");
40
+ }
41
+
42
+ void
43
+ IntVar::init(Space* home, int min, int max) {
44
+ if ((min < Limits::Int::int_min) || (max > Limits::Int::int_max))
45
+ throw Int::VariableOutOfRangeDomain("IntVar::init");
46
+ if (min > max)
47
+ throw Int::VariableEmptyDomain("IntVar::init");
48
+ var = new (home) Int::IntVarImp(home,min,max);
49
+ }
50
+
51
+ void
52
+ IntVar::init(Space* home, const IntSet& ds) {
53
+ if ((ds.min() < Limits::Int::int_min) || (ds.max() > Limits::Int::int_max))
54
+ throw Int::VariableOutOfRangeDomain("IntVar::init");
55
+ if (ds.size() == 0)
56
+ throw Int::VariableEmptyDomain("IntVar::init");
57
+ var = new (home) Int::IntVarImp(home,ds);
58
+ }
59
+
60
+ }
61
+
62
+ // STATISTICS: int-var
63
+
@@ -0,0 +1,135 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2002
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-09-21 11:35:18 +0200 (Thu, 21 Sep 2006) $ by $Author: schulte $
10
+ * $Revision: 3686 $
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 {
23
+
24
+ forceinline
25
+ IntVar::IntVar(void) {}
26
+
27
+
28
+ inline
29
+ IntVar::IntVar(const IntVar& x)
30
+ : var(x.var) {}
31
+ inline
32
+ IntVar::IntVar(const Int::IntView& x)
33
+ : var(x.variable()) {}
34
+
35
+
36
+
37
+ forceinline Int::IntVarImp*
38
+ IntVar::variable(void) const {
39
+ return var;
40
+ }
41
+
42
+
43
+ forceinline int
44
+ IntVar::val(void) const {
45
+ return var->val();
46
+ }
47
+ forceinline int
48
+ IntVar::min(void) const {
49
+ return var->min();
50
+ }
51
+ forceinline int
52
+ IntVar::med(void) const {
53
+ return var->med();
54
+ }
55
+ forceinline int
56
+ IntVar::max(void) const {
57
+ return var->max();
58
+ }
59
+
60
+
61
+ forceinline unsigned int
62
+ IntVar::degree(void) const {
63
+ return var->degree();
64
+ }
65
+ forceinline unsigned int
66
+ IntVar::width(void) const {
67
+ return var->width();
68
+ }
69
+ forceinline unsigned int
70
+ IntVar::size(void) const {
71
+ return var->size();
72
+ }
73
+
74
+
75
+
76
+ forceinline bool
77
+ IntVar::assigned(void) const {
78
+ return var->assigned();
79
+ }
80
+ forceinline bool
81
+ IntVar::range(void) const {
82
+ return var->range();
83
+ }
84
+ forceinline bool
85
+ IntVar::in(int n) const {
86
+ return var->in(n);
87
+ }
88
+
89
+
90
+ forceinline void
91
+ IntVar::update(Space* home, bool share, IntVar& x) {
92
+ var = x.var->copy(home,share);
93
+ }
94
+
95
+ /*
96
+ * Range iterator
97
+ *
98
+ */
99
+ forceinline
100
+ IntVarRanges::IntVarRanges(void) {}
101
+
102
+ forceinline
103
+ IntVarRanges::IntVarRanges(const IntVar& x)
104
+ : Int::IntVarImpFwd(x.variable()) {}
105
+
106
+ forceinline void
107
+ IntVarRanges::init(const IntVar& x) {
108
+ Int::IntVarImpFwd::init(x.variable());
109
+ }
110
+
111
+
112
+ /*
113
+ * Value iterator
114
+ *
115
+ */
116
+
117
+ forceinline
118
+ IntVarValues::IntVarValues(void) {}
119
+
120
+ forceinline
121
+ IntVarValues::IntVarValues(const IntVar& x) {
122
+ IntVarRanges r(x);
123
+ Iter::Ranges::ToValues<IntVarRanges>::init(r);
124
+ }
125
+
126
+ forceinline void
127
+ IntVarValues::init(const IntVar& x) {
128
+ IntVarRanges r(x);
129
+ Iter::Ranges::ToValues<IntVarRanges>::init(r);
130
+ }
131
+
132
+ }
133
+
134
+ // STATISTICS: int-var
135
+
@@ -0,0 +1,1219 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Christian Schulte, 2005
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-08-24 11:25:05 +0200 (Thu, 24 Aug 2006) $ by $Author: schulte $
10
+ * $Revision: 3559 $
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
+ #include "gecode/iter.hh"
23
+
24
+ #include <iostream>
25
+
26
+ #if (-17 / 7) == -2
27
+ #define GECODE_INT_RND_TWDS_ZERO 1
28
+ #else
29
+ #define GECODE_INT_RND_TWDS_ZERO 0
30
+ #endif
31
+
32
+ namespace Gecode { namespace Int {
33
+
34
+ /**
35
+ * \brief Range iterator for integer views
36
+ *
37
+ * This class provides (by specialization) a range iterator
38
+ * for all integer views.
39
+ *
40
+ * Note that this template class serves only as a specification
41
+ * of the interface of the various specializations.
42
+ *
43
+ * \ingroup TaskActorInt
44
+ */
45
+ template <class View>
46
+ class ViewRanges {
47
+ public:
48
+ /// \name Constructors and initialization
49
+ //@{
50
+ /// Default constructor
51
+ ViewRanges(void);
52
+ /// Initialize with ranges for view \a x
53
+ ViewRanges(const View& x);
54
+ /// Initialize with ranges for view \a x
55
+ void init(const View& x);
56
+ //@}
57
+
58
+ /// \name Iteration control
59
+ //@{
60
+ /// Test whether iterator is still at a range or done
61
+ bool operator()(void) const;
62
+ /// Move iterator to next range (if possible)
63
+ void operator++(void);
64
+ //@}
65
+
66
+ /// \name Range access
67
+ //@{
68
+ /// Return smallest value of range
69
+ int min(void) const;
70
+ /// Return largest value of range
71
+ int max(void) const;
72
+ /// Return width of range (distance between minimum and maximum)
73
+ unsigned int width(void) const;
74
+ //@}
75
+ };
76
+
77
+ /**
78
+ * \brief Value iterator for integer views
79
+ *
80
+ * This class provides a value iterator for all
81
+ * integer views.
82
+ *
83
+ * \ingroup TaskActorInt
84
+ */
85
+ template <class View>
86
+ class ViewValues
87
+ : public Iter::Ranges::ToValues<ViewRanges<View> > {
88
+ public:
89
+ /// \name Constructors and initialization
90
+ //@{
91
+ /// Default constructor
92
+ ViewValues(void);
93
+ /// Initialize with values for \a x
94
+ ViewValues(const View& x);
95
+ /// Initialize with values \a x
96
+ void init(const View& x);
97
+ //@}
98
+ };
99
+
100
+ }}
101
+
102
+ #include "gecode/int/view/iter.icc"
103
+
104
+ namespace Gecode {
105
+
106
+ namespace Int {
107
+
108
+ /**
109
+ * \defgroup TaskActorIntView Integer views
110
+ *
111
+ * Integer propagators and branchings compute with integer views.
112
+ * Integer views provide views on integer variable implementations,
113
+ * integer constants, and also allow to scale, translate, and negate
114
+ * variables. Additionally, a special Boolean view is provided that
115
+ * offers convenient and efficient operations for Boolean (0/1)
116
+ * views.
117
+ * \ingroup TaskActorInt
118
+ */
119
+
120
+ /**
121
+ * \brief Integer view for integer variables
122
+ * \ingroup TaskActorIntView
123
+ */
124
+ class IntView : public VariableViewBase<IntVarImp> {
125
+ protected:
126
+ using VariableViewBase<IntVarImp>::var;
127
+ public:
128
+ /// \name Constructors and initialization
129
+ //@{
130
+ /// Default constructor
131
+ IntView(void);
132
+ /// Initialize from integer variable \a x
133
+ IntView(const IntVar& x);
134
+ //@}
135
+
136
+ /// \name Value access
137
+ //@{
138
+ /// Return minimum of domain
139
+ int min(void) const;
140
+ /// Return maximum of domain
141
+ int max(void) const;
142
+ /// Return median of domain
143
+ int med(void) const;
144
+ /// Return assigned value (only if assigned)
145
+ int val(void) const;
146
+
147
+ /// Return size (cardinality) of domain
148
+ unsigned int size(void) const;
149
+ /// Return width of domain (distance between maximum and minimum)
150
+ unsigned int width(void) const;
151
+ /// Return regret of domain minimum (distance to next larger value)
152
+ unsigned int regret_min(void) const;
153
+ /// Return regret of domain maximum (distance to next smaller value)
154
+ unsigned int regret_max(void) const;
155
+ //@}
156
+
157
+ /// \name Domain tests
158
+ //@{
159
+ /// Test whether domain is a range
160
+ bool range(void) const;
161
+ /// Test whether view is assigned
162
+ bool assigned(void) const;
163
+
164
+ /// Test whether \a n is contained in domain
165
+ bool in(int n) const;
166
+ /// Test whether \a n is contained in domain
167
+ bool in(double n) const;
168
+ //@}
169
+
170
+ /// \name Domain update by value
171
+ //@{
172
+ /// Restrict domain values to be less or equal than \a n
173
+ ModEvent lq(Space* home, int n);
174
+ /// Restrict domain values to be less or equal than \a n
175
+ ModEvent lq(Space* home, double n);
176
+
177
+ /// Restrict domain values to be less than \a n
178
+ ModEvent le(Space* home, int n);
179
+ /// Restrict domain values to be less than \a n
180
+ ModEvent le(Space* home, double n);
181
+
182
+ /// Restrict domain values to be greater or equal than \a n
183
+ ModEvent gq(Space* home, int n);
184
+ /// Restrict domain values to be greater or equal than \a n
185
+ ModEvent gq(Space* home, double n);
186
+
187
+ /// Restrict domain values to be greater than \a n
188
+ ModEvent gr(Space* home, int n);
189
+ /// Restrict domain values to be greater than \a n
190
+ ModEvent gr(Space* home, double n);
191
+
192
+ /// Restrict domain values to be different from \a n
193
+ ModEvent nq(Space* home, int n);
194
+ /// Restrict domain values to be different from \a n
195
+ ModEvent nq(Space* home, double n);
196
+
197
+ /// Restrict domain values to be equal to \a n
198
+ ModEvent eq(Space* home, int n);
199
+ /// Restrict domain values to be equal to \a n
200
+ ModEvent eq(Space* home, double n);
201
+ //@}
202
+
203
+ /// \name Domain update by range iterator
204
+ //@{
205
+ /// Replace domain by range sequence described by \a i
206
+ template <class I> ModEvent narrow(Space* home, I& i);
207
+ /// Intersect domain with range sequence described by \a i
208
+ template <class I> ModEvent inter(Space* home, I& i);
209
+ /// Remove from domain the range sequence described by \a i
210
+ template <class I> ModEvent minus(Space* home, I& i);
211
+ //@}
212
+
213
+ /// \name Cloning
214
+ //@{
215
+ /// Update this view to be a clone of view \a x
216
+ void update(Space* home, bool share, IntView& x);
217
+ //@}
218
+ };
219
+
220
+ }
221
+
222
+ /**
223
+ * \brief Traits class for views and variable implementations
224
+ *
225
+ * This class specializes the ViewVarTraits for IntView
226
+ * \ingroup TaskActorIntView
227
+ */
228
+ template<>
229
+ class ViewVarTraits<Int::IntView> {
230
+ public:
231
+ /// The variable type of an IntView
232
+ typedef Int::IntVarImp Var;
233
+ };
234
+
235
+ namespace Int {
236
+
237
+ /**
238
+ * \brief Minus integer view
239
+ *
240
+ * A minus integer view \f$m\f$ for an integer view \f$x\f$ provides
241
+ * operations such that \f$m\f$ behaves as \f$-x\f$.
242
+ * \ingroup TaskActorIntView
243
+ */
244
+ class MinusView : public DerivedViewBase<IntView> {
245
+ protected:
246
+ using DerivedViewBase<IntView>::view;
247
+ public:
248
+ /// \name Constructors and initialization
249
+ //@{
250
+ /// Default constructor
251
+ MinusView(void);
252
+ /// Initialize with integer view \a x
253
+ MinusView(const IntView& x);
254
+ /// Initialize with integer view \a x
255
+ void init(const IntView& x);
256
+ //@}
257
+
258
+ /// \name Value access
259
+ //@{
260
+ /// Return minimum of domain
261
+ int min(void) const;
262
+ /// Return maximum of domain
263
+ int max(void) const;
264
+ /// Return median of domain
265
+ int med(void) const;
266
+ /// Return assigned value (only if assigned)
267
+ int val(void) const;
268
+
269
+ /// Return size (cardinality) of domain
270
+ unsigned int size(void) const;
271
+ /// Return width of domain (distance between maximum and minimum)
272
+ unsigned int width(void) const;
273
+ /// Return regret of domain minimum (distance to next larger value)
274
+ unsigned int regret_min(void) const;
275
+ /// Return regret of domain maximum (distance to next smaller value)
276
+ unsigned int regret_max(void) const;
277
+ //@}
278
+
279
+ /// \name Domain tests
280
+ //@{
281
+ /// Test whether domain is a range
282
+ bool range(void) const;
283
+ /// Test whether view is assigned
284
+ bool assigned(void) const;
285
+
286
+ /// Test whether \a n is contained in domain
287
+ bool in(int n) const;
288
+ /// Test whether \a n is contained in domain
289
+ bool in(double n) const;
290
+ //@}
291
+
292
+ /// \name Domain update by value
293
+ //@{
294
+ /// Restrict domain values to be less or equal than \a n
295
+ ModEvent lq(Space* home, int n);
296
+ /// Restrict domain values to be less or equal than \a n
297
+ ModEvent lq(Space* home, double n);
298
+ /// Restrict domain values to be less than \a n
299
+ ModEvent le(Space* home, int n);
300
+ /// Restrict domain values to be less than \a n
301
+ ModEvent le(Space* home, double n);
302
+ /// Restrict domain values to be greater or equal than \a n
303
+ ModEvent gq(Space* home, int n);
304
+ /// Restrict domain values to be greater or equal than \a n
305
+ ModEvent gq(Space* home, double n);
306
+ /// Restrict domain values to be greater than \a n
307
+ ModEvent gr(Space* home, int n);
308
+ /// Restrict domain values to be greater than \a n
309
+ ModEvent gr(Space* home, double n);
310
+ /// Restrict domain values to be different from \a n
311
+ ModEvent nq(Space* home, int n);
312
+ /// Restrict domain values to be different from \a n
313
+ ModEvent nq(Space* home, double n);
314
+ /// Restrict domain values to be equal to \a n
315
+ ModEvent eq(Space* home, int n);
316
+ /// Restrict domain values to be equal to \a n
317
+ ModEvent eq(Space* home, double n);
318
+ //@}
319
+
320
+ /// \name Domain update by range iterator
321
+ //@{
322
+ /// Replace domain by range sequence described by \a i
323
+ template <class I> ModEvent narrow(Space* home, I& i);
324
+ /// Intersect domain with range sequence described by \a i
325
+ template <class I> ModEvent inter(Space* home, I& i);
326
+ /// Remove from domain the range sequence described by \a i
327
+ template <class I> ModEvent minus(Space* home, I& i);
328
+ //@}
329
+
330
+ /// \name Propagator modification events
331
+ //@{
332
+ /// Return modification event of propagator \a p for view
333
+ static ModEvent pme(const Propagator* p);
334
+ /// Translate modification event \a me to propagator modification event for view
335
+ static PropModEvent pme(ModEvent me);
336
+ //@}
337
+
338
+ /// \name Dependencies
339
+ //@{
340
+ /**
341
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
342
+ *
343
+ * In case \a process is false, the propagator is just subscribed but
344
+ * not processed for execution (this must be used when creating
345
+ * subscriptions during propagation).
346
+ */
347
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
348
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
349
+ void cancel(Space* home, Propagator* p, PropCond pc);
350
+ //@}
351
+
352
+ /// \name Cloning
353
+ //@{
354
+ /// Update this view to be a clone of view \a x
355
+ void update(Space* home, bool share, MinusView& x);
356
+ //@}
357
+ };
358
+
359
+ }
360
+
361
+ /** \name View comparison
362
+ * \relates Gecode::Int::MinusView
363
+ */
364
+ //@{
365
+ /// Test whether views \a x and \a y are the same
366
+ bool same(const Int::MinusView& x, const Int::MinusView& y);
367
+ /// Test whether view \a x comes before \a y (arbitrary order)
368
+ bool before(const Int::MinusView& x, const Int::MinusView& y);
369
+ //@}
370
+
371
+ /**
372
+ * \brief Traits class for views and variable implementations
373
+ *
374
+ * This class specializes the ViewVarTraits for MinusView.
375
+ * \ingroup TaskActorIntView
376
+ */
377
+ template<>
378
+ class ViewVarTraits<Int::MinusView> {
379
+ public:
380
+ /// The variable type of a MinusView
381
+ typedef Int::IntVarImp Var;
382
+ };
383
+
384
+
385
+ namespace Int {
386
+
387
+ /**
388
+ * \brief Offset integer view
389
+ *
390
+ * An offset integer view \f$o\f$ for an integer view \f$x\f$ and
391
+ * an integer \f$c\f$ provides operations such that \f$o\f$
392
+ * behaves as \f$x+c\f$.
393
+ * \ingroup TaskActorIntView
394
+ */
395
+ class OffsetView : public DerivedViewBase<IntView> {
396
+ protected:
397
+ /// Offset
398
+ int c;
399
+ using DerivedViewBase<IntView>::view;
400
+ public:
401
+ /// \name Constructors and initialization
402
+ //@{
403
+ /// Default constructor
404
+ OffsetView(void);
405
+ /// Initialize with integer view \a x and offset \a c
406
+ OffsetView(const IntView& x, int c);
407
+ /// Initialize with integer view \a x and offset \a c
408
+ void init(const IntView& x, int c);
409
+ /// Return offset
410
+ int offset(void) const;
411
+ //@}
412
+
413
+ /// \name Value access
414
+ //@{
415
+ /// Return minimum of domain
416
+ int min(void) const;
417
+ /// Return maximum of domain
418
+ int max(void) const;
419
+ /// Return median of domain
420
+ int med(void) const;
421
+ /// Return assigned value (only if assigned)
422
+ int val(void) const;
423
+
424
+ /// Return size (cardinality) of domain
425
+ unsigned int size(void) const;
426
+ /// Return width of domain (distance between maximum and minimum)
427
+ unsigned int width(void) const;
428
+ /// Return regret of domain minimum (distance to next larger value)
429
+ unsigned int regret_min(void) const;
430
+ /// Return regret of domain maximum (distance to next smaller value)
431
+ unsigned int regret_max(void) const;
432
+ //@}
433
+
434
+ /// \name Domain tests
435
+ //@{
436
+ /// Test whether domain is a range
437
+ bool range(void) const;
438
+ /// Test whether view is assigned
439
+ bool assigned(void) const;
440
+
441
+ /// Test whether \a n is contained in domain
442
+ bool in(int n) const;
443
+ /// Test whether \a n is contained in domain
444
+ bool in(double n) const;
445
+ //@}
446
+
447
+ /// \name Domain update by value
448
+ //@{
449
+ /// Restrict domain values to be less or equal than \a n
450
+ ModEvent lq(Space* home, int n);
451
+ /// Restrict domain values to be less or equal than \a n
452
+ ModEvent lq(Space* home, double n);
453
+ /// Restrict domain values to be less than \a n
454
+ ModEvent le(Space* home, int n);
455
+ /// Restrict domain values to be less than \a n
456
+ ModEvent le(Space* home, double n);
457
+ /// Restrict domain values to be greater or equal than \a n
458
+ ModEvent gq(Space* home, int n);
459
+ /// Restrict domain values to be greater or equal than \a n
460
+ ModEvent gq(Space* home, double n);
461
+ /// Restrict domain values to be greater than \a n
462
+ ModEvent gr(Space* home, int n);
463
+ /// Restrict domain values to be greater than \a n
464
+ ModEvent gr(Space* home, double n);
465
+ /// Restrict domain values to be different from \a n
466
+ ModEvent nq(Space* home, int n);
467
+ /// Restrict domain values to be different from \a n
468
+ ModEvent nq(Space* home, double n);
469
+ /// Restrict domain values to be equal to \a n
470
+ ModEvent eq(Space* home, int n);
471
+ /// Restrict domain values to be equal to \a n
472
+ ModEvent eq(Space* home, double n);
473
+ //@}
474
+
475
+ /// \name Domain update by range iterator
476
+ //@{
477
+ /// Replace domain by range sequence described by \a i
478
+ template <class I> ModEvent narrow(Space* home, I& i);
479
+ /// Intersect domain with range sequence described by \a i
480
+ template <class I> ModEvent inter(Space* home, I& i);
481
+ /// Remove from domain the range sequence described by \a i
482
+ template <class I> ModEvent minus(Space* home, I& i);
483
+ //@}
484
+
485
+ /// \name Propagator modification events
486
+ //@{
487
+ /// Return modification event of propagator \a p for view
488
+ static ModEvent pme(const Propagator* p);
489
+ /// Translate modification event \a me to propagator modification event for view
490
+ static PropModEvent pme(ModEvent me);
491
+ //@}
492
+
493
+ /// \name Dependencies
494
+ //@{
495
+ /**
496
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
497
+ *
498
+ * In case \a process is false, the propagator is just subscribed but
499
+ * not processed for execution (this must be used when creating
500
+ * subscriptions during propagation).
501
+ */
502
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
503
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
504
+ void cancel(Space* home, Propagator* p, PropCond pc);
505
+ //@}
506
+
507
+ /// \name Cloning
508
+ //@{
509
+ /// Update this view to be a clone of view \a x
510
+ void update(Space* home, bool share, OffsetView& x);
511
+ //@}
512
+ };
513
+
514
+ }
515
+
516
+ /** \name View comparison
517
+ * \relates Gecode::Int::OffsetView
518
+ */
519
+ //@{
520
+ /// Test whether views \a x and \a y are the same
521
+ bool same(const Int::OffsetView& x, const Int::OffsetView& y);
522
+ /// Test whether view \a x comes before \a y (arbitrary order)
523
+ bool before(const Int::OffsetView& x, const Int::OffsetView& y);
524
+ //@}
525
+
526
+ /**
527
+ * \brief Traits class for views and variable implementations
528
+ *
529
+ * This class specializes the ViewVarTraits for OffsetView.
530
+ * \ingroup TaskActorIntView
531
+ */
532
+ template<>
533
+ class ViewVarTraits<Int::OffsetView> {
534
+ public:
535
+ /// The variable type of an OffsetView
536
+ typedef Int::IntVarImp Var;
537
+ };
538
+
539
+
540
+
541
+ namespace Int {
542
+
543
+ /**
544
+ * \brief Scale integer view (template)
545
+ *
546
+ * A scale integer view \f$s\f$ for an integer view \f$x\f$ and
547
+ * a non-negative integer \f$a\f$ provides operations such that \f$s\f$
548
+ * behaves as \f$a\cdot x\f$.
549
+ *
550
+ * The precision of a scale integer view is defined by the value types
551
+ * \a Val and \a UnsVal. \a Val can be either \c int or \c double where
552
+ * \a UnsVal must be the unsigned variant of \a Val (that is, if \a Val
553
+ * is \c int, then \a UnsVal must be \c unsigned \c int; if \a Val is
554
+ * \c double, then \a UnsVal must be \c double as well). The range which is
555
+ * allowed for the two types is defined by the values in
556
+ * Gecode::Limits.
557
+ *
558
+ * Note that scale integer views currently do not provide operations
559
+ * for updating domains by range iterators.
560
+ *
561
+ * The template is not to be used directly (as it is very clumsy). Use
562
+ * the following instead:
563
+ * - IntScaleView for scale views with integer precision
564
+ * - DoubleScaleView for scale views with double precision
565
+ *
566
+ * \ingroup TaskActorIntView
567
+ */
568
+ template <class Val, class UnsVal>
569
+ class ScaleView : public DerivedViewBase<IntView> {
570
+ protected:
571
+ /// Scale factor
572
+ int a;
573
+ using DerivedViewBase<IntView>::view;
574
+
575
+ /// \name Support functions for division
576
+ //@{
577
+ /// Return \f$\lfloor x/a\rfloor\f$
578
+ int floor_div(double x) const;
579
+ /// Return \f$\lceil x/a\rceil\f$
580
+ int ceil_div(double x) const;
581
+ /// Return \f$x/a\f$ and set \a exact to true if \a x is multiple of \a a
582
+ int exact_div(double x, bool& exact) const;
583
+ #if GECODE_INT_RND_TWDS_ZERO
584
+ /// Return \f$\lfloor x/a\rfloor\f$
585
+ int floor_div(int) const;
586
+ /// Return \f$\lceil x/a\rceil\f$
587
+ int ceil_div(int) const;
588
+ /// Return \f$x/a\f$ and set \a exact to true if \a x is multiple of \a a
589
+ int exact_div(int, bool&) const;
590
+ #endif
591
+ //@}
592
+
593
+ public:
594
+ /// \name Constructors and initialization
595
+ //@{
596
+ /// Default constructor
597
+ ScaleView(void);
598
+ /// Initialize as \f$b\cdot y\f$
599
+ ScaleView(int b, const IntView& y);
600
+ /// Initialize as \f$b\cdot y\f$
601
+ void init(int b, const IntView& y);
602
+ /// Return scale factor of scale view
603
+ int scale(void) const;
604
+ //@}
605
+
606
+
607
+ /// \name Value access
608
+ //@{
609
+ /// Return minimum of domain
610
+ Val min(void) const;
611
+ /// Return maximum of domain
612
+ Val max(void) const;
613
+ /// Return median of domain
614
+ Val med(void) const;
615
+ /// Return assigned value (only if assigned)
616
+ Val val(void) const;
617
+
618
+ /// Return size (cardinality) of domain
619
+ UnsVal size(void) const;
620
+ /// Return width of domain (distance between maximum and minimum)
621
+ UnsVal width(void) const;
622
+ /// Return regret of domain minimum (distance to next larger value)
623
+ UnsVal regret_min(void) const;
624
+ /// Return regret of domain maximum (distance to next smaller value)
625
+ UnsVal regret_max(void) const;
626
+ //@}
627
+
628
+ /// \name Domain tests
629
+ //@{
630
+ /// Test whether domain is a range
631
+ bool range(void) const;
632
+ /// Test whether view is assigned
633
+ bool assigned(void) const;
634
+ /// Test whether \a n is contained in domain
635
+ bool in(Val n) const;
636
+ //@}
637
+
638
+ /// \name Domain update by value
639
+ //@{
640
+ /// Restrict domain values to be less or equal than \a n
641
+ ModEvent lq(Space* home, Val n);
642
+ /// Restrict domain values to be less than \a n
643
+ ModEvent le(Space* home, Val n);
644
+ /// Restrict domain values to be greater or equal than \a n
645
+ ModEvent gq(Space* home, Val n);
646
+ /// Restrict domain values to be greater than \a n
647
+ ModEvent gr(Space* home, Val n);
648
+ /// Restrict domain values to be different from \a n
649
+ ModEvent nq(Space* home, Val n);
650
+ /// Restrict domain values to be equal to \a n
651
+ ModEvent eq(Space* home, Val n);
652
+ //@}
653
+
654
+ /// \name Propagator modification events
655
+ //@{
656
+ /// Return modification event of propagator \a p for view
657
+ static ModEvent pme(const Propagator* p);
658
+ /// Translate modification event \a me to propagator modification event for view
659
+ static PropModEvent pme(ModEvent me);
660
+ //@}
661
+
662
+ /// \name Dependencies
663
+ //@{
664
+ /**
665
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
666
+ *
667
+ * In case \a process is false, the propagator is just subscribed but
668
+ * not processed for execution (this must be used when creating
669
+ * subscriptions during propagation).
670
+ */
671
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
672
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
673
+ void cancel(Space* home, Propagator* p, PropCond pc);
674
+ //@}
675
+
676
+ /// \name Cloning
677
+ //@{
678
+ /// Update this view to be a clone of view \a x
679
+ void update(Space* home, bool share, ScaleView<Val,UnsVal>& x);
680
+ //@}
681
+ };
682
+
683
+ /**
684
+ * \brief Integer-precision integer scale view
685
+ * \ingroup TaskActorIntView
686
+ */
687
+ typedef ScaleView<int,unsigned int> IntScaleView;
688
+
689
+ /**
690
+ * \brief Double-precision integer scale view
691
+ * \ingroup TaskActorIntView
692
+ */
693
+ typedef ScaleView<double,double> DoubleScaleView;
694
+
695
+ }
696
+
697
+ /** \name View comparison
698
+ * \relates Gecode::Int::ScaleView
699
+ */
700
+ //@{
701
+ /// Test whether views \a x and \a y are the same
702
+ template <class Val, class UnsVal>
703
+ bool same(const Int::ScaleView<Val,UnsVal>& x,
704
+ const Int::ScaleView<Val,UnsVal>& y);
705
+ /// Test whether view \a x comes before \a y (arbitrary order)
706
+ template <class Val, class UnsVal>
707
+ bool before(const Int::ScaleView<Val,UnsVal>& x,
708
+ const Int::ScaleView<Val,UnsVal>& y);
709
+ //@}
710
+
711
+
712
+ /**
713
+ * \brief Traits class for views and variable implementations
714
+ *
715
+ * This class specializes the ViewVarTraits for ScaleView.
716
+ * \ingroup TaskActorIntView
717
+ */
718
+ template <class Val, class UnsVal>
719
+ class ViewVarTraits<Int::ScaleView<Val,UnsVal> > {
720
+ public:
721
+ /// The variable type of a ScaleView
722
+ typedef Int::IntVarImp Var;
723
+ };
724
+
725
+
726
+
727
+ namespace Int {
728
+
729
+ /**
730
+ * \brief Constant integer view
731
+ *
732
+ * An constant integer view \f$x\f$ for an integer \f$c\f$ provides
733
+ * operations such that \f$x\f$ behaves as a view assigned to \f$c\f$.
734
+ * \ingroup TaskActorIntView
735
+ */
736
+ class ConstIntView : public ConstantViewBase {
737
+ protected:
738
+ int x;
739
+ public:
740
+ /// \name Constructors and initialization
741
+ //@{
742
+ /// Default constructor
743
+ ConstIntView(void);
744
+ /// Initialize with integer value \a n
745
+ ConstIntView(int n);
746
+ /// Initialize with integer value \a n
747
+ void init(int n);
748
+ //@}
749
+
750
+ /// \name Value access
751
+ //@{
752
+ /// Return minimum of domain
753
+ int min(void) const;
754
+ /// Return maximum of domain
755
+ int max(void) const;
756
+ /// Return median of domain
757
+ int med(void) const;
758
+ /// Return assigned value (only if assigned)
759
+ int val(void) const;
760
+
761
+ /// Return size (cardinality) of domain
762
+ unsigned int size(void) const;
763
+ /// Return width of domain (distance between maximum and minimum)
764
+ unsigned int width(void) const;
765
+ /// Return regret of domain minimum (distance to next larger value)
766
+ unsigned int regret_min(void) const;
767
+ /// Return regret of domain maximum (distance to next smaller value)
768
+ unsigned int regret_max(void) const;
769
+ //@}
770
+
771
+ /// \name Domain tests
772
+ //@{
773
+ /// Test whether domain is a range
774
+ bool range(void) const;
775
+ /// Test whether view is assigned
776
+ bool assigned(void) const;
777
+
778
+ /// Test whether \a n is contained in domain
779
+ bool in(int n) const;
780
+ /// Test whether \a n is contained in domain
781
+ bool in(double n) const;
782
+ //@}
783
+
784
+ /// \name Domain update by value
785
+ //@{
786
+ /// Restrict domain values to be less or equal than \a n
787
+ ModEvent lq(Space* home, int n);
788
+ /// Restrict domain values to be less or equal than \a n
789
+ ModEvent lq(Space* home, double n);
790
+ /// Restrict domain values to be less than \a n
791
+ ModEvent le(Space* home, int n);
792
+ /// Restrict domain values to be less than \a n
793
+ ModEvent le(Space* home, double n);
794
+ /// Restrict domain values to be greater or equal than \a n
795
+ ModEvent gq(Space* home, int n);
796
+ /// Restrict domain values to be greater or equal than \a n
797
+ ModEvent gq(Space* home, double n);
798
+ /// Restrict domain values to be greater than \a n
799
+ ModEvent gr(Space* home, int n);
800
+ /// Restrict domain values to be greater than \a n
801
+ ModEvent gr(Space* home, double n);
802
+ /// Restrict domain values to be different from \a n
803
+ ModEvent nq(Space* home, int n);
804
+ /// Restrict domain values to be different from \a n
805
+ ModEvent nq(Space* home, double n);
806
+ /// Restrict domain values to be equal to \a n
807
+ ModEvent eq(Space* home, int n);
808
+ /// Restrict domain values to be equal to \a n
809
+ ModEvent eq(Space* home, double n);
810
+ //@}
811
+
812
+ /// \name Domain update by range iterator
813
+ //@{
814
+ /// Replace domain by range sequence described by \a i
815
+ template <class I> ModEvent narrow(Space* home, I& i);
816
+ /// Intersect domain with range sequence described by \a i
817
+ template <class I> ModEvent inter(Space* home, I& i);
818
+ /// Remove from domain the range sequence described by \a i
819
+ template <class I> ModEvent minus(Space* home, I& i);
820
+ //@}
821
+
822
+ /// \name Propagator modification events
823
+ //@{
824
+ /// Return modification event of propagator \a p for view
825
+ static ModEvent pme(const Propagator* p);
826
+ /// Translate modification event \a me to propagator modification event for view
827
+ static PropModEvent pme(ModEvent me);
828
+ //@}
829
+
830
+ /// \name Dependencies
831
+ //@{
832
+ /**
833
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
834
+ *
835
+ * In case \a process is false, the propagator is just subscribed but
836
+ * not processed for execution (this must be used when creating
837
+ * subscriptions during propagation).
838
+ */
839
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
840
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
841
+ void cancel(Space* home, Propagator* p, PropCond pc);
842
+ //@}
843
+
844
+ /// \name Cloning
845
+ //@{
846
+ /// Update this view to be a clone of view \a x
847
+ void update(Space* home, bool share, ConstIntView& x);
848
+ //@}
849
+ };
850
+
851
+ }
852
+
853
+ /**
854
+ * \name View comparison
855
+ * \relates Gecode::Int::ConstIntView
856
+ */
857
+ //@{
858
+ /// Test whether views \a x and \a y are the same
859
+ bool same(const Int::ConstIntView& x, const Int::ConstIntView& y);
860
+ /// Test whether view \a x is before \a y (arbitrary order)
861
+ template <class View, unsigned int n>
862
+ bool before(const Int::ConstIntView& x, const Int::ConstIntView& y);
863
+ //@}
864
+
865
+ /**
866
+ * \brief Traits class for views and variable implementations
867
+ *
868
+ * This class specializes the ViewVarTraits for ConstIntView.
869
+ * \ingroup TaskActorIntView
870
+ */
871
+ template<>
872
+ class ViewVarTraits<Int::ConstIntView> {
873
+ public:
874
+ /// The variable type of a ConstIntView
875
+ typedef VarBase Var;
876
+ };
877
+
878
+ namespace Int {
879
+
880
+ /**
881
+ * \brief Boolean view for integer variables
882
+ *
883
+ * Provides convenient and efficient operations for Boolean views.
884
+ * \ingroup TaskActorIntView
885
+ */
886
+ class BoolView : public IntView {
887
+ /// For initialization from IntVar (see below)
888
+ friend class ViewArray<BoolView>;
889
+ public:
890
+ /// \name Constructors and initialization
891
+ //@{
892
+ /// Default constructor
893
+ BoolView(void);
894
+ /// Initialize from Boolean variable \a b
895
+ BoolView(const BoolVar& b);
896
+ private:
897
+ /** \brief Initialize from integer variable \a x
898
+ *
899
+ * This is odd, but is required to go from an VarArgArray to
900
+ * a ViewArray.
901
+ */
902
+ BoolView(const IntVar& b);
903
+ public:
904
+ /// Initialize from integer variable \a x
905
+ explicit BoolView(const IntView& x);
906
+ //@}
907
+
908
+ /// \name Boolean domain tests
909
+ //@{
910
+ /// Test whether view is assigned to be zero
911
+ bool zero(void) const;
912
+ /// Test whether view is assigned to be one
913
+ bool one(void) const;
914
+ /// Test whether view is not yet assigned
915
+ bool none(void) const;
916
+ //@}
917
+
918
+ /// \name Boolean assignment operations
919
+ //@{
920
+ /// Try to assign view to one
921
+ ModEvent t_one(Space* home);
922
+ /// Try to assign view to zero
923
+ ModEvent t_zero(Space* home);
924
+ /// Assign not yet assigned view to one
925
+ void t_one_none(Space* home);
926
+ /// Assign not yet assigned view to zero
927
+ void t_zero_none(Space* home);
928
+ //@}
929
+
930
+ /// \name Cloning
931
+ //@{
932
+ /// Update this view to be a clone of view \a x
933
+ void update(Space* home, bool share, BoolView& x);
934
+ //@}
935
+ };
936
+
937
+ }
938
+
939
+ /**
940
+ * \brief Traits class for views and variable implementations
941
+ *
942
+ * This class specializes the ViewVarTraits for BoolView
943
+ * \ingroup TaskActorIntView
944
+ */
945
+ template<>
946
+ class ViewVarTraits<Int::BoolView> {
947
+ public:
948
+ /// The variable type of a BoolView
949
+ typedef Int::IntVarImp Var;
950
+ };
951
+
952
+ namespace Int {
953
+
954
+ /**
955
+ * \brief Negated Boolean view
956
+ *
957
+ * A negated Boolean view \f$n\f$ for a Boolean view \f$b\f$
958
+ * provides operations such that \f$n\f$
959
+ * behaves as \f$\neg b\f$.
960
+ * \ingroup TaskActorIntView
961
+ */
962
+ class NegBoolView : public DerivedViewBase<BoolView> {
963
+ protected:
964
+ using DerivedViewBase<BoolView>::view;
965
+ public:
966
+ /// \name Constructors and initialization
967
+ //@{
968
+ /// Default constructor
969
+ NegBoolView(void);
970
+ /// Initialize with Boolean view \a b
971
+ NegBoolView(const BoolView& b);
972
+ /// Initialize with Boolean view \a b
973
+ void init(const BoolView& b);
974
+ //@}
975
+
976
+ /// \name Boolean domain tests
977
+ //@{
978
+ /// Test whether view is assigned to be zero
979
+ bool zero(void) const;
980
+ /// Test whether view is assigned to be one
981
+ bool one(void) const;
982
+ /// Test whether view is not yet assigned
983
+ bool none(void) const;
984
+ //@}
985
+
986
+ /// \name Boolean assignment operations
987
+ //@{
988
+ /// Try to assign view to one
989
+ ModEvent t_one(Space* home);
990
+ /// Try to assign view to zero
991
+ ModEvent t_zero(Space* home);
992
+ /// Assign not yet assigned view to one
993
+ void t_one_none(Space* home);
994
+ /// Assign not yet assigned view to zero
995
+ void t_zero_none(Space* home);
996
+ //@}
997
+
998
+ /// \name Value access
999
+ //@{
1000
+ /// Return minimum of domain
1001
+ int min(void) const;
1002
+ /// Return maximum of domain
1003
+ int max(void) const;
1004
+ /// Return assigned value (only if assigned)
1005
+ int val(void) const;
1006
+ //@}
1007
+
1008
+ /// \name Domain tests
1009
+ //@{
1010
+ /// Test whether view is assigned
1011
+ bool assigned(void) const;
1012
+ //@}
1013
+
1014
+ /// \name Propagator modification events
1015
+ //@{
1016
+ /// Return modification event of propagator \a p for view
1017
+ static ModEvent pme(const Propagator* p);
1018
+ /// Translate modification event \a me to propagator modification event for view
1019
+ static PropModEvent pme(ModEvent me);
1020
+ //@}
1021
+
1022
+ /// \name Dependencies
1023
+ //@{
1024
+ /**
1025
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
1026
+ *
1027
+ * In case \a process is false, the propagator is just subscribed but
1028
+ * not processed for execution (this must be used when creating
1029
+ * subscriptions during propagation).
1030
+ */
1031
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
1032
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to view
1033
+ void cancel(Space* home, Propagator* p, PropCond pc);
1034
+ //@}
1035
+
1036
+ /// \name Cloning
1037
+ //@{
1038
+ /// Update this view to be a clone of view \a x
1039
+ void update(Space* home, bool share, NegBoolView& x);
1040
+ //@}
1041
+ };
1042
+
1043
+ /**
1044
+ * \brief Boolean tests
1045
+ *
1046
+ */
1047
+ enum BoolTest {
1048
+ BT_NONE, ///< No sharing
1049
+ BT_SAME, ///< Same variable
1050
+ BT_COMP ///< Same variable but complement
1051
+ };
1052
+
1053
+ /**
1054
+ * \name Test sharing between Boolean and negated Boolean views
1055
+ * \relates BoolView NegBoolView
1056
+ */
1057
+ //@{
1058
+ /// Test whether views \a b0 and \a b1 are the same
1059
+ BoolTest bool_test(const BoolView& b0, const BoolView& b1);
1060
+ /// Test whether views \a b0 and \a b1 are complementary
1061
+ BoolTest bool_test(const BoolView& b0, const NegBoolView& b1);
1062
+ /// Test whether views \a b0 and \a b1 are complementary
1063
+ BoolTest bool_test(const NegBoolView& b0, const BoolView& b1);
1064
+ /// Test whether views \a b0 and \a b1 are the same
1065
+ BoolTest bool_test(const NegBoolView& b0, const NegBoolView& b1);
1066
+ //@}
1067
+
1068
+ }
1069
+
1070
+ /** \name View comparison
1071
+ * \relates Gecode::Int::NegBoolView
1072
+ */
1073
+ //@{
1074
+ /// Test whether views \a x and \a y are the same
1075
+ bool same(const Int::NegBoolView& x, const Int::NegBoolView& y);
1076
+ /// Test whether view \a x comes before \a y (arbitrary order)
1077
+ bool before(const Int::NegBoolView& x, const Int::NegBoolView& y);
1078
+ //@}
1079
+
1080
+ /**
1081
+ * \brief Traits class for views and variable implementations
1082
+ *
1083
+ * This class specializes the ViewVarTraits for NegBoolView.
1084
+ * \ingroup TaskActorIntView
1085
+ */
1086
+ template<>
1087
+ class ViewVarTraits<Int::NegBoolView> {
1088
+ public:
1089
+ /// The variable type of a NegBoolView
1090
+ typedef Int::IntVarImp Var;
1091
+ };
1092
+
1093
+ }
1094
+
1095
+ #include "gecode/int/var/int.icc"
1096
+ #include "gecode/int/var/bool.icc"
1097
+
1098
+ #include "gecode/int/view/int.icc"
1099
+ #include "gecode/int/view/bool.icc"
1100
+
1101
+ #include "gecode/int/view/constint.icc"
1102
+
1103
+ #include "gecode/int/view/minus.icc"
1104
+ #include "gecode/int/view/offset.icc"
1105
+ #include "gecode/int/view/scale.icc"
1106
+
1107
+ /**
1108
+ * \brief Print integer variable view
1109
+ * \relates Gecode::Int::IntView
1110
+ */
1111
+ GECODE_INT_EXPORT std::ostream&
1112
+ operator<<(std::ostream&, const Gecode::Int::IntView&);
1113
+ /**
1114
+ * \brief Print minus integer view
1115
+ * \relates Gecode::Int::MinusView
1116
+ */
1117
+ GECODE_INT_EXPORT std::ostream&
1118
+ operator<<(std::ostream&, const Gecode::Int::MinusView&);
1119
+ /**
1120
+ * \brief Print offset integer view
1121
+ * \relates Gecode::Int::OffsetView
1122
+ */
1123
+ GECODE_INT_EXPORT std::ostream&
1124
+ operator<<(std::ostream&, const Gecode::Int::OffsetView&);
1125
+ /**
1126
+ * \brief Print constant integer view
1127
+ * \relates Gecode::Int::ConstIntView
1128
+ */
1129
+ GECODE_INT_EXPORT std::ostream&
1130
+ operator<<(std::ostream&, const Gecode::Int::ConstIntView&);
1131
+ /**
1132
+ * \brief Print integer-precision scale integer view
1133
+ * \relates Gecode::Int::ScaleView
1134
+ */
1135
+ GECODE_INT_EXPORT std::ostream&
1136
+ operator<<(std::ostream&, const Gecode::Int::IntScaleView&);
1137
+ /**
1138
+ * \brief Print double-precision scale integer view
1139
+ * \relates Gecode::Int::ScaleView
1140
+ */
1141
+ GECODE_INT_EXPORT std::ostream&
1142
+ operator<<(std::ostream&, const Gecode::Int::DoubleScaleView&);
1143
+ /**
1144
+ * \brief Print negated Boolean view
1145
+ * \relates Gecode::Int::NegBoolView
1146
+ */
1147
+ GECODE_INT_EXPORT std::ostream&
1148
+ operator<<(std::ostream&, const Gecode::Int::NegBoolView&);
1149
+
1150
+
1151
+ inline std::ostream&
1152
+ operator<<(std::ostream& os, const Gecode::IntVar& x) {
1153
+ Gecode::Int::IntView vx(x);
1154
+ return os << vx;
1155
+ }
1156
+
1157
+ namespace Gecode {
1158
+
1159
+ namespace Int {
1160
+
1161
+ /**
1162
+ * \defgroup TaskActorIntTest Testing relations between integer views
1163
+ * \ingroup TaskActorInt
1164
+ */
1165
+
1166
+ //@{
1167
+ /// Result of testing relation
1168
+ enum RelTest {
1169
+ RT_FALSE = 0, ///< Relation does not hold
1170
+ RT_MAYBE = 1, ///< Relation may hold or not
1171
+ RT_TRUE = 2 ///< Relation does hold
1172
+ };
1173
+
1174
+ /// Test whether views \a x and \a y are equal (use bounds information)
1175
+ template <class View> RelTest rtest_eq_bnd(View x, View y);
1176
+ /// Test whether views \a x and \a y are equal (use full domain information)
1177
+ template <class View> RelTest rtest_eq_dom(View x, View y);
1178
+ /// Test whether view \a x and integer \a n are equal (use bounds information)
1179
+ template <class View> RelTest rtest_eq_bnd(View x, int n);
1180
+ /// Test whether view \a x and integer \a n are equal (use full domain information)
1181
+ template <class View> RelTest rtest_eq_dom(View x, int n);
1182
+
1183
+ /// Test whether views \a x and \a y are different (use bounds information)
1184
+ template <class View> RelTest rtest_nq_bnd(View x, View y);
1185
+ /// Test whether views \a x and \a y are different (use full domain information)
1186
+ template <class View> RelTest rtest_nq_dom(View x, View y);
1187
+ /// Test whether view \a x and integer \a n are different (use bounds information)
1188
+ template <class View> RelTest rtest_nq_bnd(View x, int n);
1189
+ /// Test whether view \a x and integer \a n are different (use full domain information)
1190
+ template <class View> RelTest rtest_nq_dom(View x, int n);
1191
+
1192
+ /// Test whether view \a x is less or equal than view \a y
1193
+ template <class View> RelTest rtest_lq(View x, View y);
1194
+ /// Test whether view \a x is less or equal than integer \a n
1195
+ template <class View> RelTest rtest_lq(View x, int n);
1196
+
1197
+ /// Test whether view \a x is less than view \a y
1198
+ template <class View> RelTest rtest_le(View x, View y);
1199
+ /// Test whether view \a x is less than integer \a n
1200
+ template <class View> RelTest rtest_le(View x, int n);
1201
+
1202
+ /// Test whether view \a x is greater or equal than view \a y
1203
+ template <class View> RelTest rtest_gq(View x, View y);
1204
+ /// Test whether view \a x is greater or equal than integer \a n
1205
+ template <class View> RelTest rtest_gq(View x, int n);
1206
+
1207
+ /// Test whether view \a x is greater than view \a y
1208
+ template <class View> RelTest rtest_gr(View x, View y);
1209
+ /// Test whether view \a x is greater than integer \a n
1210
+ template <class View> RelTest rtest_gr(View x, int n);
1211
+ //@}
1212
+
1213
+ }
1214
+
1215
+ }
1216
+
1217
+ #include "gecode/int/view/rtest.icc"
1218
+
1219
+ // STATISTICS: int-var