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,126 @@
1
+ /*
2
+ * Main authors:
3
+ * Guido Tack <tack@gecode.org>
4
+ *
5
+ * Copyright:
6
+ * Guido Tack, 2006
7
+ *
8
+ * Last modified:
9
+ * $Date: 2006-07-14 13:46:14 +0200 (Fri, 14 Jul 2006) $ by $Author: tack $
10
+ * $Revision: 3363 $
11
+ *
12
+ * This file is part of Gecode, the generic constraint
13
+ * development environment:
14
+ * http://www.gecode.org
15
+ *
16
+ * See the file "LICENSE" for information on usage and
17
+ * redistribution of this file, and for a
18
+ * DISCLAIMER OF ALL WARRANTIES.
19
+ *
20
+ */
21
+
22
+ namespace Gecode { namespace Iter { namespace Ranges { namespace Virt {
23
+
24
+ /**
25
+ * \brief Abstract base class for range iterators
26
+ *
27
+ * Requires \code #include "gecode/iter.hh" \endcode
28
+ * \ingroup FuncIterRangesVirt
29
+ */
30
+ class Iterator {
31
+ public:
32
+ /// \name Iteration control
33
+ //@{
34
+ /// Move iterator to next range (if possible)
35
+ virtual void operator++(void) = 0;
36
+ /// Test whether iterator is still at a range or done
37
+ virtual bool operator()(void) = 0;
38
+ //@}
39
+ /// \name Range access
40
+ //@{
41
+ /// Return smallest value of range
42
+ virtual int min(void) const = 0;
43
+ /// Return largest value of range
44
+ virtual int max(void) const = 0;
45
+ /// Return width of range (distance between minimum and maximum)
46
+ virtual unsigned int width(void) const = 0;
47
+ //@}
48
+
49
+ /// Virtual destructor
50
+ virtual ~Iterator(void);
51
+ };
52
+
53
+ forceinline
54
+ Iterator::~Iterator(void) {}
55
+
56
+ /**
57
+ * \brief Adaptor class to virtualize any iterator
58
+ *
59
+ * Provides an iterator with virtual member functions for any template-based
60
+ * iterator.
61
+ *
62
+ * Requires \code #include "gecode/iter.hh" \endcode
63
+ * \ingroup FuncIterRangesVirt
64
+ */
65
+ template <class I>
66
+ class RangesTemplate : public Iterator {
67
+ private:
68
+ /// The template-based iterator
69
+ I i;
70
+ public:
71
+ /// \name Constructors and initialization
72
+ //@{
73
+ /// Initialize with iterator \a i
74
+ RangesTemplate(I& i);
75
+ /// Initialize with iterator \a i
76
+ void init(I& i);
77
+ //@}
78
+ /// \name Iteration control
79
+ //@{
80
+ /// Move iterator to next range (if possible)
81
+ virtual void operator++(void);
82
+ /// Test whether iterator is still at a range or done
83
+ virtual bool operator()(void);
84
+ //@}
85
+
86
+ /// \name Range access
87
+ //@{
88
+ /// Return smallest value of range
89
+ virtual int min(void) const;
90
+ /// Return largest value of range
91
+ virtual int max(void) const;
92
+ /// Return width of range (distance between minimum and maximum)
93
+ virtual unsigned int width(void) const;
94
+ //@}
95
+ };
96
+
97
+ template <class I>
98
+ RangesTemplate<I>::RangesTemplate(I& i0) : i(i0) {}
99
+
100
+ template <class I>
101
+ void
102
+ RangesTemplate<I>::init(I& i0) { i=i0; }
103
+
104
+ template <class I>
105
+ bool
106
+ RangesTemplate<I>::operator()(void) { return i(); }
107
+
108
+ template <class I>
109
+ void
110
+ RangesTemplate<I>::operator++(void) { ++i; }
111
+
112
+ template <class I>
113
+ int
114
+ RangesTemplate<I>::min(void) const { return i.min(); }
115
+
116
+ template <class I>
117
+ int
118
+ RangesTemplate<I>::max(void) const { return i.max(); }
119
+
120
+ template <class I>
121
+ unsigned int
122
+ RangesTemplate<I>::width(void) const { return i.width(); }
123
+
124
+ }}}}
125
+
126
+ // STATISTICS: iter-any
@@ -0,0 +1,141 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ *
5
+ * Contributing authors:
6
+ * Guido Tack <tack@gecode.org>
7
+ *
8
+ * Copyright:
9
+ * Christian Schulte, 2004
10
+ * Guido Tack, 2004
11
+ *
12
+ * Last modified:
13
+ * $Date: 2006-08-24 10:39:08 +0200 (Thu, 24 Aug 2006) $ by $Author: tack $
14
+ * $Revision: 3558 $
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
+ #ifndef __GECODE_KERNEL_HH__
27
+ #define __GECODE_KERNEL_HH__
28
+
29
+ #include <cstddef>
30
+ #include <cstdlib>
31
+ #include <cstring>
32
+ #include <cassert>
33
+
34
+ #include "gecode/config.icc"
35
+
36
+ /*
37
+ * Support for DLLs under Windows
38
+ *
39
+ */
40
+
41
+ #if !defined(GECODE_STATIC_LIBS) && \
42
+ (defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
43
+
44
+ #ifdef GECODE_BUILD_KERNEL
45
+ #define GECODE_KERNEL_EXPORT __declspec( dllexport )
46
+ #else
47
+ #define GECODE_KERNEL_EXPORT __declspec( dllimport )
48
+ #endif
49
+
50
+ #else
51
+
52
+ #ifdef GCC_HASCLASSVISIBILITY
53
+
54
+ #define GECODE_KERNEL_EXPORT __attribute__ ((visibility("default")))
55
+
56
+ #else
57
+
58
+ #define GECODE_KERNEL_EXPORT
59
+
60
+ #endif
61
+ #endif
62
+
63
+ /**
64
+ * \namespace Gecode
65
+ * \brief Gecode toplevel namespace
66
+ *
67
+ * The Gecode namespace contains nested namespaces for
68
+ * the various submodules (for example Int for the
69
+ * definition of integer propagator classes). Functionality
70
+ * that is used for interfacing (search engines, variables,
71
+ * and so on) or belongs to the %Gecode %Kernel is contained
72
+ * directly in the Gecode namespace.
73
+ *
74
+ */
75
+
76
+ /*
77
+ * General exceptions and kernel exceptions
78
+ *
79
+ */
80
+
81
+ #include "gecode/kernel/exception.icc"
82
+
83
+
84
+
85
+ /*
86
+ * Basic kernel services
87
+ *
88
+ */
89
+
90
+ #include "gecode/kernel/memory.icc"
91
+ #include "gecode/kernel/memory-manager.icc"
92
+
93
+
94
+ /*
95
+ * Macros for checking failure
96
+ *
97
+ */
98
+
99
+
100
+ #include "gecode/kernel/macros.icc"
101
+
102
+ /*
103
+ * Gecode kernel
104
+ *
105
+ */
106
+
107
+ #include "gecode/kernel/core.icc"
108
+ #include "gecode/kernel/modevent.icc"
109
+
110
+
111
+ /*
112
+ * Variable views and testing for shared variables
113
+ *
114
+ */
115
+
116
+ #include "gecode/kernel/view.icc"
117
+
118
+
119
+
120
+ /*
121
+ * Variable and argument arrays
122
+ *
123
+ */
124
+
125
+ #include "gecode/kernel/array.icc"
126
+
127
+
128
+
129
+
130
+ /*
131
+ * Common propagator and branching patterns
132
+ *
133
+ */
134
+
135
+ #include "gecode/kernel/propagator.icc"
136
+ #include "gecode/kernel/branching.icc"
137
+
138
+ #endif
139
+
140
+
141
+ // STATISTICS: kernel-other
@@ -0,0 +1,954 @@
1
+ /*
2
+ * Main authors:
3
+ * Christian Schulte <schulte@gecode.org>
4
+ * Guido Tack <tack@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2003
8
+ * Guido Tack, 2004
9
+ *
10
+ * Last modified:
11
+ * $Date: 2006-10-10 20:13:50 +0200 (Tue, 10 Oct 2006) $ by $Author: tack $
12
+ * $Revision: 3741 $
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
+ #include <cstdarg>
25
+ #include "gecode/support/sort.hh"
26
+
27
+ namespace Gecode {
28
+
29
+ template <class Var> class VarArray;
30
+ template <class Var> class VarArgArray;
31
+
32
+ /**
33
+ * \brief %Variable arrays
34
+ *
35
+ * %Variable arrays store variables. They are typically used
36
+ * for storing the variables being part of a solution.
37
+ *
38
+ * Never use them for temporary purposes, use argument arrays
39
+ * instead.
40
+ * \ingroup TaskVar
41
+ */
42
+ template <class Var>
43
+ class VarArray {
44
+ protected:
45
+ /// Number of variables (size)
46
+ int n;
47
+ /// Array of variables
48
+ Var* x;
49
+ public:
50
+ /// \name Constructors and initialization
51
+ //@{
52
+ /// Default constructor (array of size 0)
53
+ VarArray(void);
54
+ /// Allocate array with \a m variables
55
+ VarArray(Space*, int m);
56
+ /// Initialize from variable argument array \a a (copy elements)
57
+ VarArray(Space*,const VarArgArray<Var>&);
58
+ /// Initialize from variable array \a a (share elements)
59
+ VarArray(const VarArray<Var>& a);
60
+ /// Initialize from variable array \a a (share elements)
61
+ const VarArray<Var>& operator=(const VarArray<Var>& a);
62
+ //@}
63
+
64
+ /// \name Array size
65
+ //@{
66
+ /// Return size of array (number of elements)
67
+ int size(void) const;
68
+ //@}
69
+
70
+ /// \name Array elements
71
+ //@{
72
+ /// Return variable at position \a i
73
+ Var& operator[](int i);
74
+ /// Return variable at position \a i
75
+ const Var& operator[](int i) const;
76
+ //@}
77
+
78
+ /// \name Cloning
79
+ //@{
80
+ /**
81
+ * \brief Update array to be a clone of array \a a
82
+ *
83
+ * If \a share is true, sharing is retained for all shared
84
+ * data structures. Otherwise, for each of them an independent
85
+ * copy is created.
86
+ */
87
+ void update(Space*, bool share, VarArray<Var>& a);
88
+ //@}
89
+ private:
90
+ static void* operator new(size_t);
91
+ static void operator delete(void*,size_t);
92
+ };
93
+
94
+
95
+ /**
96
+ * \brief View arrays
97
+ *
98
+ * View arrays store views. They are typically used for storing the
99
+ * views with which propagators and branchings compute.
100
+ * \ingroup TaskActor
101
+ */
102
+ template <class View>
103
+ class ViewArray {
104
+ private:
105
+ /// Number of views (size)
106
+ int n;
107
+ /// Views
108
+ View* x;
109
+ /// Sort order for views
110
+ class ViewLess {
111
+ public:
112
+ bool operator()(const View&, const View&);
113
+ };
114
+ /// Sort \a n views \a x according to \a ViewLess
115
+ static void sort(View* x, int n);
116
+ public:
117
+ /// \name Constructors and initialization
118
+ //@{
119
+ /// Default constructor (array of size 0)
120
+ ViewArray(void);
121
+ /// Allocate array with \a m variables
122
+ ViewArray(Space*, int m);
123
+ /// Initialize from view array \a a (share elements)
124
+ ViewArray(const ViewArray<View>& a);
125
+ /// Initialize from view array \a a (copy elements)
126
+ ViewArray(Space*,const ViewArray<View>& a);
127
+ /// Initialize from view array \a a (share elements)
128
+ const ViewArray<View>& operator=(const ViewArray<View>& a);
129
+ /**
130
+ * \brief Initialize from variable argument array \a a (copy elements)
131
+ *
132
+ * Note that the view type \a View must provide a constructor
133
+ * for the associated \a Var type.
134
+ */
135
+ template <class Var>
136
+ ViewArray(Space* home, const VarArgArray<Var>& a)
137
+ : n(a.size()) {
138
+ // This may not be in the icc file (to satisfy the MS compiler)
139
+ if (n>0) {
140
+ x = static_cast<View*>(home->alloc(sizeof(View)*n));
141
+ for (int i = n; i--; )
142
+ x[i] = a[i];
143
+ } else {
144
+ x = NULL;
145
+ }
146
+ }
147
+ //@}
148
+
149
+ /// \name Array size
150
+ //@{
151
+ /// Return size of array (number of elements)
152
+ int size(void) const;
153
+ /// Decrease size of array (number of elements)
154
+ void size(int n);
155
+ //@}
156
+
157
+ /// \name Array elements
158
+ //@{
159
+ /// Return view at position \a i
160
+ View& operator[](int i);
161
+ /// Return view at position \a i
162
+ const View& operator[](int i) const;
163
+ //@}
164
+
165
+ /// \name Dependencies
166
+ //@{
167
+ /**
168
+ * \brief Subscribe propagator \a p with propagation condition \a pc to variable
169
+ *
170
+ * In case \a process is false, the propagator is just subscribed but
171
+ * not processed for execution (this must be used when creating
172
+ * subscriptions during propagation).
173
+ */
174
+ void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
175
+ /// Cancel subscription of propagator \a p with propagation condition \a pc to all views
176
+ void cancel(Space* home, Propagator* p, PropCond pc);
177
+ //@}
178
+
179
+ /// \name Cloning
180
+ //@{
181
+ /**
182
+ * \brief Update array to be a clone of array \a a
183
+ *
184
+ * If \a share is true, sharing is retained for all shared
185
+ * data structures. Otherwise, for each of them an independent
186
+ * copy is created.
187
+ */
188
+ void update(Space*, bool share, ViewArray<View>& a);
189
+ //@}
190
+
191
+
192
+ /// \name Moving elements
193
+ //@{
194
+ /// Move assigned view from position 0 to position \a i (shift elements to the left)
195
+ void move_fst(int i);
196
+ /// Move assigned view from position \c size()-1 to position \a i (truncate array by one)
197
+ void move_lst(int i);
198
+ /** \brief Move view from position 0 to position \a i (shift elements to the left)
199
+ *
200
+ * Before moving, cancel subscription of propagator \a p with
201
+ * propagation condition \a pc to view at position \a i.
202
+ */
203
+ void move_fst(int i, Space* home, Propagator* p, PropCond pc);
204
+ /** \brief Move view from position \c size()-1 to position \a i (truncate array by one)
205
+ *
206
+ * Before moving, cancel subscription of propagator \a p with
207
+ * propagation condition \a pc to view at position \a i.
208
+ */
209
+ void move_lst(int i, Space* home, Propagator* p, PropCond pc);
210
+ //@}
211
+
212
+ /// \name Dropping elements
213
+ //@{
214
+ /// Drop assigned views from positions 0 to \a i-1 from array
215
+ void drop_fst(int i);
216
+ /// Drop assigned views from positions \a i+1 to \c size()-1 from array
217
+ void drop_lst(int i);
218
+ /** \brief Drop views from positions 0 to \a i-1 from array
219
+ *
220
+ * Before moving, cancel subscription of propagator \a p with
221
+ * propagation condition \a pc to views at positions 0 to \a i-1.
222
+ */
223
+ void drop_fst(int i, Space* home, Propagator* p, PropCond pc);
224
+ /** \brief Drop assigned views from positions \a i+1 to \c size()-1 from array
225
+ *
226
+ * Before moving, cancel subscription of propagator \a p with
227
+ * propagation condition \a pc to views at positions \a i+1 to
228
+ * \c size()-1.
229
+ */
230
+ void drop_lst(int i, Space* home, Propagator* p, PropCond pc);
231
+ //@}
232
+
233
+ /// \name View equality
234
+ //@{
235
+ /// Test whether array has same views
236
+ bool same(void) const;
237
+ /// Test whether array contains a view being the same as \a y
238
+ bool same(const View& y) const;
239
+ /// Remove all duplicate views from array (changes element order)
240
+ void unique(void);
241
+ //@}
242
+
243
+ /// \name View sharing
244
+ //@{
245
+ /// Test whether array has shared views
246
+ bool shared(void) const;
247
+ /// Test whether array contains view shared with \a y
248
+ bool shared(const View& y) const;
249
+ //@}
250
+
251
+ private:
252
+ static void* operator new(size_t);
253
+ static void operator delete(void*,size_t);
254
+ };
255
+
256
+ /**
257
+ * \brief Base-class for argument arrays
258
+ *
259
+ * Argument arrays are used as convenient mechanism of passing arguments
260
+ * when calling functions as they combine both the size and the elements
261
+ * of an array. For a small number of elements, memory is allocated by
262
+ * creating an argument array object. Otherwise the memory is allocated
263
+ * from the heap.
264
+ *
265
+ * This base-class is not to be used directly, use PrimArgArray for
266
+ * argument arrays of primitive types and VarArgArray for argument
267
+ * arrays storing variables.
268
+ */
269
+ template <class T>
270
+ class ArgArrayBase {
271
+ protected:
272
+ /// Number of elements
273
+ int n;
274
+ /// Element array
275
+ T* a;
276
+ /// How much elements are possible inside array
277
+ static const int onstack_size = 16;
278
+ /// In-array storage for elements
279
+ T onstack[onstack_size];
280
+ /// Allocate memory for \a n elements
281
+ T* allocate(int n);
282
+ public:
283
+ /// \name Constructors and initialization
284
+ //@{
285
+ /// Allocate array with \a n elements
286
+ ArgArrayBase(int n);
287
+ /// Initialize from argument array \a a (copy elements)
288
+ ArgArrayBase(const ArgArrayBase<T>& a);
289
+ /// Initialize from view array \a a (copy elements)
290
+ const ArgArrayBase<T>& operator=(const ArgArrayBase<T>& a);
291
+ //@}
292
+
293
+ /// \name Array size
294
+ //@{
295
+ /// Return size of array (number of elements)
296
+ int size(void) const;
297
+ //@}
298
+
299
+ /// \name Array elements
300
+ //@{
301
+ /// Return element at position \a i
302
+ T& operator[](int i);
303
+ /// Return element at position \a i
304
+ const T& operator[](int i) const;
305
+ //@}
306
+
307
+ /// \name Destructor
308
+ //@{
309
+ /// Destructor
310
+ ~ArgArrayBase(void);
311
+ //@}
312
+ private:
313
+ static void* operator new(size_t);
314
+ static void operator delete(void*,size_t);
315
+ };
316
+
317
+
318
+ /**
319
+ * \brief Argument array for primtive types
320
+ *
321
+ * Argument arrays are used as convenient mechanism of passing arguments
322
+ * when calling functions as they combine both the size and the elements
323
+ * of an array. For a small number of elements, memory is allocated by
324
+ * creating an argument array object. Otherwise the memory is allocated
325
+ * from the heap.
326
+ *
327
+ * \ingroup TaskVar
328
+ */
329
+ template <class T>
330
+ class PrimArgArray : public ArgArrayBase<T> {
331
+ protected:
332
+ using ArgArrayBase<T>::a;
333
+ public:
334
+ using ArgArrayBase<T>::size;
335
+ /// \name Constructors and initialization
336
+ //@{
337
+ /// Allocate array with \a n elements
338
+ PrimArgArray(int n);
339
+ /// Allocate array with \a n elements and initialize with \a e0, ...
340
+ PrimArgArray(int n, T e0, ...);
341
+ /// Allocate array with \a n elements and initialize with elements from array \a e
342
+ PrimArgArray(int n, const T* e);
343
+ /// Initialize from primitive argument array \a a (copy elements)
344
+ PrimArgArray(const PrimArgArray<T>& a);
345
+ //@}
346
+ };
347
+
348
+ /**
349
+ * \brief Argument array for variables
350
+ *
351
+ * Argument arrays are used as convenient mechanism of passing arguments
352
+ * when calling functions as they combine both the size and the elements
353
+ * of an array. For a small number of elements, memory is allocated by
354
+ * creating an argument array object. Otherwise the memory is allocated
355
+ * from the heap.
356
+ *
357
+ * \ingroup TaskVar
358
+ */
359
+ template <class Var>
360
+ class VarArgArray : public ArgArrayBase<Var> {
361
+ protected:
362
+ using ArgArrayBase<Var>::a;
363
+ using ArgArrayBase<Var>::n;
364
+ /// Sort order for variables
365
+ class VarLess {
366
+ public:
367
+ bool operator()(const Var&, const Var&);
368
+ };
369
+ public:
370
+ using ArgArrayBase<Var>::size;
371
+ /// \name Constructors and initialization
372
+ //@{
373
+ /// Allocate array with \a n elements
374
+ VarArgArray(int n);
375
+ /// Initialize from variable argument array \a a (copy elements)
376
+ VarArgArray(const VarArgArray<Var>& a);
377
+ /// Initialize from variable array \a a (copy elements)
378
+ VarArgArray(const VarArray<Var>& a);
379
+ //@}
380
+ /// \name Variable equality
381
+ //@{
382
+ /// Test whether array contains same variable multiply
383
+ bool same(void) const;
384
+ /// Test whether array contains variable \a y
385
+ bool same(const Var& y) const;
386
+ /// Test whether all elements from array and \a y contains same variable multiply
387
+ bool same(const VarArgArray<Var>& y) const;
388
+ //@}
389
+ };
390
+
391
+ /** \brief Traits of arrays in Gecode
392
+ *
393
+ * This class collects the traits of an array in Gecode.
394
+ * The traits used are the following.
395
+ * - <code>typedef Type storage_type</code> where \c Type is the type
396
+ * of an appropriate storage type for this array.
397
+ * - <code>typedef Type value_type</code> where \c Type is the type
398
+ * of the elements of this array.
399
+ * - <code>typedef Type args_type</code> where \c Type is the type
400
+ * of the appropriate Args-array type (e.g., \c BoolVarArgs if \c A is
401
+ * \c BoolVarArray).
402
+ */
403
+ template <class A>
404
+ class ArrayTraits {};
405
+
406
+ /*
407
+ * Implementation
408
+ *
409
+ */
410
+
411
+ /*
412
+ * Variable arrays
413
+ *
414
+ */
415
+
416
+ template <class Var>
417
+ forceinline
418
+ VarArray<Var>::VarArray(void) : n(0), x(NULL) {}
419
+
420
+ template <class Var>
421
+ forceinline
422
+ VarArray<Var>::VarArray(Space* home, int n0)
423
+ : n(n0) {
424
+ x = (n>0) ? static_cast<Var*>(home->alloc(sizeof(Var)*n)) : NULL;
425
+ }
426
+
427
+ template <class Var>
428
+ forceinline
429
+ VarArray<Var>::VarArray(const VarArray<Var>& a) {
430
+ n = a.n; x = a.x;
431
+ }
432
+
433
+ template <class Var>
434
+ forceinline const VarArray<Var>&
435
+ VarArray<Var>::operator=(const VarArray<Var>& a) {
436
+ n = a.n; x = a.x;
437
+ return *this;
438
+ }
439
+
440
+ template <class Var>
441
+ forceinline int
442
+ VarArray<Var>::size(void) const {
443
+ return n;
444
+ }
445
+
446
+ template <class Var>
447
+ forceinline Var&
448
+ VarArray<Var>::operator[](int i) {
449
+ assert((i >= 0) && (i < size()));
450
+ return x[i];
451
+ }
452
+
453
+ template <class Var>
454
+ forceinline const Var&
455
+ VarArray<Var>::operator[](int i) const {
456
+ assert((i >= 0) && (i < size()));
457
+ return x[i];
458
+ }
459
+
460
+ template <class Var>
461
+ forceinline void
462
+ VarArray<Var>::update(Space* home, bool share, VarArray<Var>& a) {
463
+ n = a.n;
464
+ if (n > 0) {
465
+ x = static_cast<Var*>(home->alloc(sizeof(Var)*n));
466
+ for (int i = n; i--; )
467
+ x[i].update(home, share, a.x[i]);
468
+ } else {
469
+ x = NULL;
470
+ }
471
+ }
472
+
473
+ template <class Var>
474
+ void*
475
+ VarArray<Var>::operator new(size_t) {
476
+ return NULL;
477
+ }
478
+
479
+ template <class Var>
480
+ void
481
+ VarArray<Var>::operator delete(void*,size_t) {
482
+ }
483
+
484
+ /*
485
+ * View arrays
486
+ *
487
+ */
488
+
489
+ template <class View>
490
+ forceinline
491
+ ViewArray<View>::ViewArray(void) : n(0), x(NULL) {}
492
+
493
+ template <class View>
494
+ forceinline
495
+ ViewArray<View>::ViewArray(Space* home, int n0)
496
+ : n(n0) {
497
+ x = (n>0) ? static_cast<View*>(home->alloc(sizeof(View)*n)) : NULL;
498
+ }
499
+
500
+ template <class View>
501
+ ViewArray<View>::ViewArray(Space* home, const ViewArray<View>& a)
502
+ : n(a.size()) {
503
+ if (n>0) {
504
+ x = static_cast<View*>(home->alloc(sizeof(View)*n));
505
+ for (int i = n; i--; )
506
+ x[i] = a[i];
507
+ } else {
508
+ x = NULL;
509
+ }
510
+ }
511
+
512
+ template <class View>
513
+ forceinline
514
+ ViewArray<View>::ViewArray(const ViewArray<View>& a)
515
+ : n(a.n), x(a.x) {}
516
+
517
+ template <class View>
518
+ forceinline const ViewArray<View>&
519
+ ViewArray<View>::operator=(const ViewArray<View>& a) {
520
+ n = a.n; x = a.x;
521
+ return *this;
522
+ }
523
+
524
+ template <class View>
525
+ forceinline int
526
+ ViewArray<View>::size(void) const {
527
+ return n;
528
+ }
529
+
530
+ template <class View>
531
+ forceinline void
532
+ ViewArray<View>::size(int n0) {
533
+ n = n0;
534
+ }
535
+
536
+ template <class View>
537
+ forceinline View&
538
+ ViewArray<View>::operator[](int i) {
539
+ assert((i >= 0) && (i < size()));
540
+ return x[i];
541
+ }
542
+
543
+ template <class View>
544
+ forceinline const View&
545
+ ViewArray<View>::operator[](int i) const {
546
+ assert((i >= 0) && (i < size()));
547
+ return x[i];
548
+ }
549
+
550
+ template <class View>
551
+ forceinline void
552
+ ViewArray<View>::move_fst(int i) {
553
+ // move x[0] to x[i]
554
+ assert(x[i].assigned());
555
+ x[i]=x[0]; x++; n--;
556
+ }
557
+
558
+ template <class View>
559
+ forceinline void
560
+ ViewArray<View>::move_lst(int i) {
561
+ // move x[n-1] to x[i]
562
+ assert(x[i].assigned());
563
+ n--; x[i]=x[n];
564
+ }
565
+
566
+ template <class View>
567
+ forceinline void
568
+ ViewArray<View>::drop_fst(int i) {
569
+ // Drop elements from 0..i-1
570
+ assert(i>=0);
571
+ x += i; n -= i;
572
+ }
573
+
574
+ template <class View>
575
+ forceinline void
576
+ ViewArray<View>::drop_lst(int i) {
577
+ // Drop elements from i+1..n-1
578
+ assert(i<n);
579
+ n = i+1;
580
+ }
581
+
582
+ template <class View>
583
+ forceinline void
584
+ ViewArray<View>::move_fst(int i, Space* home, Propagator* p, PropCond pc) {
585
+ // Move x[0] to x[i]
586
+ x[i].cancel(home,p,pc);
587
+ x[i]=x[0]; x++; n--;
588
+ }
589
+
590
+ template <class View>
591
+ forceinline void
592
+ ViewArray<View>::move_lst(int i, Space* home, Propagator* p, PropCond pc) {
593
+ // Move x[n-1] to x[i]
594
+ x[i].cancel(home,p,pc);
595
+ n--; x[i]=x[n];
596
+ }
597
+
598
+ template <class View>
599
+ void
600
+ ViewArray<View>::drop_fst(int i, Space* home, Propagator* p, PropCond pc) {
601
+ // Drop elements from 0..i-1
602
+ assert(i>=0);
603
+ for (int j=i; j--; )
604
+ x[j].cancel(home,p,pc);
605
+ x += i; n -= i;
606
+ }
607
+
608
+ template <class View>
609
+ void
610
+ ViewArray<View>::drop_lst(int i, Space* home, Propagator* p, PropCond pc) {
611
+ // Drop elements from i+1..n-1
612
+ assert(i<n);
613
+ for (int j=i+1; j<n; j++)
614
+ x[j].cancel(home,p,pc);
615
+ n = i+1;
616
+ }
617
+
618
+ template <class View>
619
+ void
620
+ ViewArray<View>::update(Space* home, bool share, ViewArray<View>& y) {
621
+ n = y.n;
622
+ if (n > 0) {
623
+ x = static_cast<View*>(home->alloc(sizeof(View)*n));
624
+ for (int i = n; i--; )
625
+ x[i].update(home, share, y.x[i]);
626
+ } else {
627
+ x = NULL;
628
+ }
629
+ }
630
+
631
+ template <class View>
632
+ void
633
+ ViewArray<View>::subscribe(Space* home, Propagator* p, PropCond pc,
634
+ bool process) {
635
+ for (int i = n; i--; )
636
+ x[i].subscribe(home,p,pc,process);
637
+ }
638
+
639
+ template <class View>
640
+ void
641
+ ViewArray<View>::cancel(Space* home, Propagator* p, PropCond pc) {
642
+ for (int i = n; i--; )
643
+ x[i].cancel(home,p,pc);
644
+ }
645
+
646
+ template <class View>
647
+ forceinline bool
648
+ __before(const View& x, const View& y) {
649
+ return before(x,y);
650
+ }
651
+
652
+ template <class View>
653
+ forceinline bool
654
+ ViewArray<View>::ViewLess::operator()(const View& a, const View& b) {
655
+ return __before(a,b);
656
+ }
657
+
658
+ template <class View>
659
+ void
660
+ ViewArray<View>::sort(View* y, int m) {
661
+ ViewLess vl;
662
+ Support::quicksort<View,ViewLess>(y,m,vl);
663
+ }
664
+
665
+ template <class View>
666
+ forceinline bool
667
+ __same(const View& x, const View& y) {
668
+ return same(x,y);
669
+ }
670
+ template <class View>
671
+ forceinline bool
672
+ __shared(const View& x, const View& y) {
673
+ return shared(x,y);
674
+ }
675
+
676
+ template <class View>
677
+ bool
678
+ ViewArray<View>::same(void) const {
679
+ if (n < 2)
680
+ return false;
681
+ GECODE_AUTOARRAY(View,y,n);
682
+ for (int i = n; i--; )
683
+ y[i] = x[i];
684
+ sort(y,n);
685
+ for (int i = n-1; i--; )
686
+ if (__same(y[i+1],y[i]))
687
+ return true;
688
+ return false;
689
+ }
690
+
691
+ template <class View>
692
+ bool
693
+ ViewArray<View>::same(const View& y) const {
694
+ for (int i = n; i--; )
695
+ if (__same(x[i],y))
696
+ return true;
697
+ return false;
698
+ }
699
+
700
+ template <class View>
701
+ void
702
+ ViewArray<View>::unique(void) {
703
+ if (n < 2)
704
+ return;
705
+ sort(x,n);
706
+ int j = 0;
707
+ for (int i = 1; i<n; i++)
708
+ if (!__same(x[j],x[i]))
709
+ x[++j] = x[i];
710
+ n = j+1;
711
+ }
712
+
713
+ template <class View>
714
+ bool
715
+ ViewArray<View>::shared(void) const {
716
+ if (n < 2)
717
+ return false;
718
+ GECODE_AUTOARRAY(View,y,n);
719
+ for (int i = n; i--; )
720
+ y[i] = x[i];
721
+ sort(y,n);
722
+ for (int i = n-1; i--; )
723
+ if (__shared(y[i+1],y[i]))
724
+ return true;
725
+ return false;
726
+ }
727
+
728
+ template <class View>
729
+ bool
730
+ ViewArray<View>::shared(const View& y) const {
731
+ for (int i = n; i--; )
732
+ if (__shared(x[i],y))
733
+ return true;
734
+ return false;
735
+ }
736
+
737
+ template <class View>
738
+ void*
739
+ ViewArray<View>::operator new(size_t) {
740
+ return NULL;
741
+ }
742
+
743
+ template <class View>
744
+ void
745
+ ViewArray<View>::operator delete(void*,size_t) {
746
+ }
747
+
748
+
749
+ /*
750
+ * Argument arrays: base class
751
+ *
752
+ */
753
+
754
+ template <class T>
755
+ forceinline T*
756
+ ArgArrayBase<T>::allocate(int n) {
757
+ return (n > onstack_size) ?
758
+ Memory::bmalloc<T>(n) : &onstack[0];
759
+ }
760
+
761
+ template <class T>
762
+ forceinline
763
+ ArgArrayBase<T>::ArgArrayBase(int n0)
764
+ : n(n0), a(allocate(n0)) {}
765
+
766
+ template <class T>
767
+ inline
768
+ ArgArrayBase<T>::ArgArrayBase(const ArgArrayBase<T>& aa)
769
+ : n(aa.n), a(allocate(aa.n)) {
770
+ for (int i = n; i--; )
771
+ a[i] = aa.a[i];
772
+ }
773
+
774
+ template <class T>
775
+ forceinline
776
+ ArgArrayBase<T>::~ArgArrayBase(void) {
777
+ if (n > onstack_size)
778
+ Memory::free(a);
779
+ }
780
+
781
+ template <class T>
782
+ forceinline const ArgArrayBase<T>&
783
+ ArgArrayBase<T>::operator=(const ArgArrayBase<T>& aa) {
784
+ if (&aa != this) {
785
+ if (n > onstack_size)
786
+ Memory::free(a);
787
+ n = aa.n;
788
+ a = allocate(aa.n);
789
+ for (int i = n; i--; )
790
+ a[i] = aa.a[i];
791
+ }
792
+ return *this;
793
+ }
794
+
795
+ template <class T>
796
+ forceinline int
797
+ ArgArrayBase<T>::size(void) const {
798
+ return n;
799
+ }
800
+
801
+ template <class T>
802
+ forceinline T&
803
+ ArgArrayBase<T>::operator[](int i) {
804
+ assert((i>=0) && (i < n));
805
+ return a[i];
806
+ }
807
+
808
+ template <class T>
809
+ forceinline const T&
810
+ ArgArrayBase<T>::operator[](int i) const {
811
+ assert((i>=0) && (i < n));
812
+ return a[i];
813
+ }
814
+
815
+
816
+ /*
817
+ * Argument arrays for primitive types
818
+ *
819
+ */
820
+
821
+ template <class T>
822
+ forceinline
823
+ PrimArgArray<T>::PrimArgArray(int n)
824
+ : ArgArrayBase<T>(n) {}
825
+
826
+ template <class T>
827
+ PrimArgArray<T>::PrimArgArray(int n, T a0, ...)
828
+ : ArgArrayBase<T>(n) {
829
+ va_list args;
830
+ va_start(args, a0);
831
+ a[0] = a0;
832
+ for (int i = 1; i < n; i++)
833
+ a[i] = va_arg(args,T);
834
+ va_end(args);
835
+ }
836
+
837
+ template <class T>
838
+ PrimArgArray<T>::PrimArgArray(int n, const T* a0)
839
+ : ArgArrayBase<T>(n) {
840
+ for (int i=n; i--; )
841
+ a[i] = a0[i];
842
+ }
843
+
844
+ template <class T>
845
+ PrimArgArray<T>::PrimArgArray(const PrimArgArray<T>& aa)
846
+ : ArgArrayBase<T>(aa.size()) {
847
+ for (int i = size(); i--; )
848
+ a[i] = aa.a[i];
849
+ }
850
+
851
+
852
+
853
+ /*
854
+ * Argument arrays for variables
855
+ *
856
+ */
857
+
858
+ template <class T>
859
+ forceinline
860
+ VarArgArray<T>::VarArgArray(int n)
861
+ : ArgArrayBase<T>(n) {}
862
+
863
+ template <class T>
864
+ inline
865
+ VarArgArray<T>::VarArgArray(const VarArgArray<T>& aa)
866
+ : ArgArrayBase<T>(aa.size()) {
867
+ for (int i = size(); i--; )
868
+ a[i] = aa.a[i];
869
+ }
870
+
871
+ template <class T>
872
+ inline
873
+ VarArgArray<T>::VarArgArray(const VarArray<T>& x)
874
+ : ArgArrayBase<T>(x.size()) {
875
+ for (int i = x.size(); i--; )
876
+ a[i] = x[i];
877
+ }
878
+
879
+ template <class Var>
880
+ forceinline bool
881
+ VarArgArray<Var>::VarLess::operator()(const Var& a, const Var& b) {
882
+ return a.variable() < b.variable();
883
+ }
884
+
885
+ template <class Var>
886
+ bool
887
+ VarArgArray<Var>::same(void) const {
888
+ if (n < 2)
889
+ return false;
890
+ GECODE_AUTOARRAY(Var,y,n);
891
+ for (int i = n; i--; )
892
+ y[i] = a[i];
893
+ VarLess vl;
894
+ Support::quicksort<Var,VarLess>(y,n,vl);
895
+ for (int i = n-1; i--; )
896
+ if (y[i+1].variable() == y[i].variable())
897
+ return true;
898
+ return false;
899
+ }
900
+
901
+ template <class Var>
902
+ bool
903
+ VarArgArray<Var>::same(const VarArgArray<Var>& y) const {
904
+ int m = n + y.n;
905
+ if (m < 2)
906
+ return false;
907
+ GECODE_AUTOARRAY(Var,z,m);
908
+ for (int i = n; i--; )
909
+ z[i] = a[i];
910
+ for (int i = y.n; i--; )
911
+ z[i+n] = y.a[i];
912
+ VarLess vl;
913
+ Support::quicksort<Var,VarLess>(z,m,vl);
914
+ for (int i = m-1; i--; )
915
+ if (z[i+1].variable() == z[i].variable())
916
+ return true;
917
+ return false;
918
+ }
919
+
920
+ template <class Var>
921
+ bool
922
+ VarArgArray<Var>::same(const Var& y) const {
923
+ for (int i = n; i--; )
924
+ if (a[i].variable() == y.variable())
925
+ return true;
926
+ return false;
927
+ }
928
+
929
+
930
+
931
+
932
+
933
+
934
+ /*
935
+ * Interdependent code
936
+ *
937
+ */
938
+
939
+ template <class Var>
940
+ inline
941
+ VarArray<Var>::VarArray(Space* home, const VarArgArray<Var>& a)
942
+ : n(a.size()) {
943
+ if (n>0) {
944
+ x = static_cast<Var*>(home->alloc(sizeof(Var)*n));
945
+ for (int i = n; i--; )
946
+ x[i] = a[i];
947
+ } else {
948
+ x = NULL;
949
+ }
950
+ }
951
+
952
+ }
953
+
954
+ // STATISTICS: kernel-other