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.
- data/CHANGES +81 -0
- data/COPYING +17 -0
- data/LGPL-LICENSE +458 -0
- data/README +45 -0
- data/Rakefile +13 -0
- data/example/example_helper.rb +1 -0
- data/example/magic_sequence.rb +43 -0
- data/example/queens.rb +43 -0
- data/example/raw_bindings.rb +42 -0
- data/example/send_more_money.rb +43 -0
- data/example/send_most_money.rb +58 -0
- data/example/square_tiling.rb +84 -0
- data/example/sudoku-set.rb +110 -0
- data/example/sudoku.rb +61 -0
- data/ext/extconf.rb +29 -0
- data/ext/gecode-1.3.1/LICENSE +34 -0
- data/ext/gecode-1.3.1/Makefile.contribs +71 -0
- data/ext/gecode-1.3.1/Makefile.dep +3928 -0
- data/ext/gecode-1.3.1/Makefile.in +966 -0
- data/ext/gecode-1.3.1/changelog.in +1065 -0
- data/ext/gecode-1.3.1/configure +8590 -0
- data/ext/gecode-1.3.1/configure.ac +179 -0
- data/ext/gecode-1.3.1/configure.ac.in +175 -0
- data/ext/gecode-1.3.1/contribs/README +26 -0
- data/ext/gecode-1.3.1/contribs/graph/INSTALL +53 -0
- data/ext/gecode-1.3.1/contribs/graph/LICENSE +11 -0
- data/ext/gecode-1.3.1/contribs/graph/Makefile +167 -0
- data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +169 -0
- data/ext/gecode-1.3.1/contribs/graph/TODO +28 -0
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +82 -0
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +186 -0
- data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +257 -0
- data/ext/gecode-1.3.1/contribs/graph/configure +2160 -0
- data/ext/gecode-1.3.1/contribs/graph/configure.ac +33 -0
- data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +1226 -0
- data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +132 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +94 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +104 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +105 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +92 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +273 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +311 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +1 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +1 -0
- data/ext/gecode-1.3.1/contribs/graph/graph.hh +51 -0
- data/ext/gecode-1.3.1/contribs/graph/graphutils.h +46 -0
- data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +140 -0
- data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +1 -0
- data/ext/gecode-1.3.1/contribs/graph/path.hh +116 -0
- data/ext/gecode-1.3.1/contribs/graph/path.icc +64 -0
- data/ext/gecode-1.3.1/contribs/graph/path/path.icc +139 -0
- data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +133 -0
- data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +341 -0
- data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +1 -0
- data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +105 -0
- data/ext/gecode-1.3.1/contribs/graph/var.icc +106 -0
- data/ext/gecode-1.3.1/contribs/graph/view.icc +373 -0
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +162 -0
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +78 -0
- data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +349 -0
- data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +148 -0
- data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +337 -0
- data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +493 -0
- data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +60 -0
- data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +600 -0
- data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +135 -0
- data/ext/gecode-1.3.1/contribs/map/COMPILING +68 -0
- data/ext/gecode-1.3.1/contribs/map/LICENSE +11 -0
- data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +173 -0
- data/ext/gecode-1.3.1/contribs/map/configure +2285 -0
- data/ext/gecode-1.3.1/contribs/map/configure.ac +32 -0
- data/ext/gecode-1.3.1/contribs/map/constraints.hh +46 -0
- data/ext/gecode-1.3.1/contribs/map/constraints.icc +84 -0
- data/ext/gecode-1.3.1/contribs/map/doxygen.conf +1229 -0
- data/ext/gecode-1.3.1/contribs/map/doxygen.hh +33 -0
- data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +199 -0
- data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +1 -0
- data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +1 -0
- data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +148 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map.cc +80 -0
- data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +155 -0
- data/ext/gecode-1.3.1/contribs/map/map.hh +65 -0
- data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +235 -0
- data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +771 -0
- data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +2 -0
- data/ext/gecode-1.3.1/contribs/map/var.icc +346 -0
- data/ext/gecode-1.3.1/contribs/map/var/imp.cc +42 -0
- data/ext/gecode-1.3.1/contribs/map/var/imp.icc +436 -0
- data/ext/gecode-1.3.1/doxygen.conf.in +1225 -0
- data/ext/gecode-1.3.1/doxygen.hh.in +877 -0
- data/ext/gecode-1.3.1/examples/all-interval-sort.cc +201 -0
- data/ext/gecode-1.3.1/examples/all-interval.cc +114 -0
- data/ext/gecode-1.3.1/examples/alpha.cc +112 -0
- data/ext/gecode-1.3.1/examples/baseline.cc +71 -0
- data/ext/gecode-1.3.1/examples/bibd.cc +173 -0
- data/ext/gecode-1.3.1/examples/black-hole.cc +281 -0
- data/ext/gecode-1.3.1/examples/cars.cc +165 -0
- data/ext/gecode-1.3.1/examples/crew.cc +220 -0
- data/ext/gecode-1.3.1/examples/crowded-chess.cc +312 -0
- data/ext/gecode-1.3.1/examples/donald.cc +93 -0
- data/ext/gecode-1.3.1/examples/eq20.cc +111 -0
- data/ext/gecode-1.3.1/examples/golf.cc +242 -0
- data/ext/gecode-1.3.1/examples/golomb.cc +141 -0
- data/ext/gecode-1.3.1/examples/graph-color.cc +371 -0
- data/ext/gecode-1.3.1/examples/grocery.cc +107 -0
- data/ext/gecode-1.3.1/examples/hamming.cc +107 -0
- data/ext/gecode-1.3.1/examples/ind-set.cc +130 -0
- data/ext/gecode-1.3.1/examples/knights.cc +146 -0
- data/ext/gecode-1.3.1/examples/langfordnum.cc +244 -0
- data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +93 -0
- data/ext/gecode-1.3.1/examples/magic-sequence.cc +108 -0
- data/ext/gecode-1.3.1/examples/magic-square.cc +120 -0
- data/ext/gecode-1.3.1/examples/money.cc +92 -0
- data/ext/gecode-1.3.1/examples/ortho-latin.cc +156 -0
- data/ext/gecode-1.3.1/examples/packing.cc +211 -0
- data/ext/gecode-1.3.1/examples/partition.cc +126 -0
- data/ext/gecode-1.3.1/examples/photo.cc +155 -0
- data/ext/gecode-1.3.1/examples/picture-puzzle.cc +481 -0
- data/ext/gecode-1.3.1/examples/queen-armies.cc +240 -0
- data/ext/gecode-1.3.1/examples/queens.cc +99 -0
- data/ext/gecode-1.3.1/examples/sports-league.cc +454 -0
- data/ext/gecode-1.3.1/examples/steiner.cc +148 -0
- data/ext/gecode-1.3.1/examples/stress-domain.cc +86 -0
- data/ext/gecode-1.3.1/examples/stress-element.cc +95 -0
- data/ext/gecode-1.3.1/examples/stress-exec.cc +74 -0
- data/ext/gecode-1.3.1/examples/stress-min.cc +84 -0
- data/ext/gecode-1.3.1/examples/stress-search.cc +72 -0
- data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +282 -0
- data/ext/gecode-1.3.1/examples/sudoku-set.cc +162 -0
- data/ext/gecode-1.3.1/examples/sudoku.cc +188 -0
- data/ext/gecode-1.3.1/examples/sudoku.icc +703 -0
- data/ext/gecode-1.3.1/examples/support.cc +160 -0
- data/ext/gecode-1.3.1/examples/support.hh +98 -0
- data/ext/gecode-1.3.1/examples/support.icc +187 -0
- data/ext/gecode-1.3.1/examples/timer.cc +47 -0
- data/ext/gecode-1.3.1/examples/timer.hh +72 -0
- data/ext/gecode-1.3.1/examples/warehouses.cc +176 -0
- data/ext/gecode-1.3.1/extconf.rb +8 -0
- data/ext/gecode-1.3.1/gecode.m4 +736 -0
- data/ext/gecode-1.3.1/gecode/config.icc.in +50 -0
- data/ext/gecode-1.3.1/gecode/int.hh +1426 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +87 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +292 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +213 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +196 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +478 -0
- data/ext/gecode-1.3.1/gecode/int/array.cc +61 -0
- data/ext/gecode-1.3.1/gecode/int/array.icc +264 -0
- data/ext/gecode-1.3.1/gecode/int/bool.cc +187 -0
- data/ext/gecode-1.3.1/gecode/int/bool.hh +255 -0
- data/ext/gecode-1.3.1/gecode/int/bool/base.icc +123 -0
- data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +89 -0
- data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +132 -0
- data/ext/gecode-1.3.1/gecode/int/bool/or.icc +380 -0
- data/ext/gecode-1.3.1/gecode/int/branch.cc +81 -0
- data/ext/gecode-1.3.1/gecode/int/branch.hh +444 -0
- data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +83 -0
- data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +76 -0
- data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +104 -0
- data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +219 -0
- data/ext/gecode-1.3.1/gecode/int/channel.cc +62 -0
- data/ext/gecode-1.3.1/gecode/int/channel.hh +144 -0
- data/ext/gecode-1.3.1/gecode/int/channel/base.icc +60 -0
- data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +313 -0
- data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +59 -0
- data/ext/gecode-1.3.1/gecode/int/channel/val.icc +239 -0
- data/ext/gecode-1.3.1/gecode/int/count.cc +174 -0
- data/ext/gecode-1.3.1/gecode/int/count.hh +401 -0
- data/ext/gecode-1.3.1/gecode/int/count/int.icc +495 -0
- data/ext/gecode-1.3.1/gecode/int/count/rel.icc +100 -0
- data/ext/gecode-1.3.1/gecode/int/count/view.icc +332 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +210 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +118 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +377 -0
- data/ext/gecode-1.3.1/gecode/int/distinct.cc +77 -0
- data/ext/gecode-1.3.1/gecode/int/distinct.hh +272 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +73 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +335 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +62 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +740 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +96 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +107 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +97 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +171 -0
- data/ext/gecode-1.3.1/gecode/int/dom.cc +81 -0
- data/ext/gecode-1.3.1/gecode/int/dom.hh +101 -0
- data/ext/gecode-1.3.1/gecode/int/dom/range.icc +85 -0
- data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +85 -0
- data/ext/gecode-1.3.1/gecode/int/element.cc +58 -0
- data/ext/gecode-1.3.1/gecode/int/element.hh +203 -0
- data/ext/gecode-1.3.1/gecode/int/element/int.icc +396 -0
- data/ext/gecode-1.3.1/gecode/int/element/view.icc +443 -0
- data/ext/gecode-1.3.1/gecode/int/exception.icc +137 -0
- data/ext/gecode-1.3.1/gecode/int/gcc.cc +708 -0
- data/ext/gecode-1.3.1/gecode/int/gcc.hh +338 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +629 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +504 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +760 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +2375 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +375 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +687 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +236 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +373 -0
- data/ext/gecode-1.3.1/gecode/int/int-set.cc +115 -0
- data/ext/gecode-1.3.1/gecode/int/int-set.icc +151 -0
- data/ext/gecode-1.3.1/gecode/int/linear.cc +247 -0
- data/ext/gecode-1.3.1/gecode/int/linear.hh +1056 -0
- data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +439 -0
- data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +422 -0
- data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +311 -0
- data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +503 -0
- data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +857 -0
- data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +264 -0
- data/ext/gecode-1.3.1/gecode/int/linear/post.cc +542 -0
- data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +255 -0
- data/ext/gecode-1.3.1/gecode/int/propagator.icc +194 -0
- data/ext/gecode-1.3.1/gecode/int/regular.cc +40 -0
- data/ext/gecode-1.3.1/gecode/int/regular.hh +83 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +466 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +172 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +480 -0
- data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +738 -0
- data/ext/gecode-1.3.1/gecode/int/rel.cc +293 -0
- data/ext/gecode-1.3.1/gecode/int/rel.hh +526 -0
- data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +640 -0
- data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +212 -0
- data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +246 -0
- data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +188 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness.cc +124 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness.hh +108 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +177 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +243 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +232 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +727 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +666 -0
- data/ext/gecode-1.3.1/gecode/int/var-imp.vis +198 -0
- data/ext/gecode-1.3.1/gecode/int/var.icc +590 -0
- data/ext/gecode-1.3.1/gecode/int/var/bool.icc +52 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +65 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +191 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp.cc +361 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp.icc +579 -0
- data/ext/gecode-1.3.1/gecode/int/var/int.cc +63 -0
- data/ext/gecode-1.3.1/gecode/int/var/int.icc +135 -0
- data/ext/gecode-1.3.1/gecode/int/view.icc +1219 -0
- data/ext/gecode-1.3.1/gecode/int/view/bool.icc +270 -0
- data/ext/gecode-1.3.1/gecode/int/view/constint.icc +306 -0
- data/ext/gecode-1.3.1/gecode/int/view/int.icc +221 -0
- data/ext/gecode-1.3.1/gecode/int/view/iter.icc +49 -0
- data/ext/gecode-1.3.1/gecode/int/view/minus.icc +285 -0
- data/ext/gecode-1.3.1/gecode/int/view/offset.icc +274 -0
- data/ext/gecode-1.3.1/gecode/int/view/print.cc +109 -0
- data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +215 -0
- data/ext/gecode-1.3.1/gecode/int/view/scale.icc +373 -0
- data/ext/gecode-1.3.1/gecode/iter.hh +65 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +130 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +208 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +123 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +143 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +206 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +127 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +96 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +202 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +103 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +138 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +112 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +142 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +224 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +71 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +131 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +211 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +125 -0
- data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +91 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +247 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +227 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +236 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +126 -0
- data/ext/gecode-1.3.1/gecode/kernel.hh +141 -0
- data/ext/gecode-1.3.1/gecode/kernel/array.icc +954 -0
- data/ext/gecode-1.3.1/gecode/kernel/branching.icc +233 -0
- data/ext/gecode-1.3.1/gecode/kernel/core.cc +417 -0
- data/ext/gecode-1.3.1/gecode/kernel/core.icc +1681 -0
- data/ext/gecode-1.3.1/gecode/kernel/exception.cc +49 -0
- data/ext/gecode-1.3.1/gecode/kernel/exception.icc +104 -0
- data/ext/gecode-1.3.1/gecode/kernel/macros.icc +98 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +41 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +438 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory.icc +205 -0
- data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +53 -0
- data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +680 -0
- data/ext/gecode-1.3.1/gecode/kernel/view.icc +583 -0
- data/ext/gecode-1.3.1/gecode/limits.hh +87 -0
- data/ext/gecode-1.3.1/gecode/minimodel.hh +942 -0
- data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +137 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +207 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +191 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +66 -0
- data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +59 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +103 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +192 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +200 -0
- data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +118 -0
- data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +241 -0
- data/ext/gecode-1.3.1/gecode/search.hh +745 -0
- data/ext/gecode-1.3.1/gecode/search/bab.cc +153 -0
- data/ext/gecode-1.3.1/gecode/search/bab.icc +101 -0
- data/ext/gecode-1.3.1/gecode/search/dfs.cc +63 -0
- data/ext/gecode-1.3.1/gecode/search/dfs.icc +144 -0
- data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +109 -0
- data/ext/gecode-1.3.1/gecode/search/lds.cc +237 -0
- data/ext/gecode-1.3.1/gecode/search/lds.icc +57 -0
- data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +219 -0
- data/ext/gecode-1.3.1/gecode/search/restart.icc +76 -0
- data/ext/gecode-1.3.1/gecode/search/statistics.icc +30 -0
- data/ext/gecode-1.3.1/gecode/search/stop.cc +58 -0
- data/ext/gecode-1.3.1/gecode/search/stop.icc +100 -0
- data/ext/gecode-1.3.1/gecode/set.hh +419 -0
- data/ext/gecode-1.3.1/gecode/set/array.cc +114 -0
- data/ext/gecode-1.3.1/gecode/set/array.icc +134 -0
- data/ext/gecode-1.3.1/gecode/set/branch.cc +57 -0
- data/ext/gecode-1.3.1/gecode/set/branch.hh +176 -0
- data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +72 -0
- data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +112 -0
- data/ext/gecode-1.3.1/gecode/set/cardinality.cc +49 -0
- data/ext/gecode-1.3.1/gecode/set/convex.cc +43 -0
- data/ext/gecode-1.3.1/gecode/set/convex.hh +92 -0
- data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +81 -0
- data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +51 -0
- data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +100 -0
- data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +52 -0
- data/ext/gecode-1.3.1/gecode/set/distinct.cc +48 -0
- data/ext/gecode-1.3.1/gecode/set/distinct.hh +97 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +151 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +50 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +46 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +157 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +124 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +58 -0
- data/ext/gecode-1.3.1/gecode/set/dom.cc +224 -0
- data/ext/gecode-1.3.1/gecode/set/exception.icc +132 -0
- data/ext/gecode-1.3.1/gecode/set/int.cc +139 -0
- data/ext/gecode-1.3.1/gecode/set/int.hh +226 -0
- data/ext/gecode-1.3.1/gecode/set/int/card.cc +61 -0
- data/ext/gecode-1.3.1/gecode/set/int/card.icc +54 -0
- data/ext/gecode-1.3.1/gecode/set/int/channel.cc +100 -0
- data/ext/gecode-1.3.1/gecode/set/int/channel.icc +75 -0
- data/ext/gecode-1.3.1/gecode/set/int/match.cc +148 -0
- data/ext/gecode-1.3.1/gecode/set/int/match.icc +67 -0
- data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +109 -0
- data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +63 -0
- data/ext/gecode-1.3.1/gecode/set/int/weights.cc +182 -0
- data/ext/gecode-1.3.1/gecode/set/int/weights.icc +174 -0
- data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +148 -0
- data/ext/gecode-1.3.1/gecode/set/projectors.cc +109 -0
- data/ext/gecode-1.3.1/gecode/set/projectors.hh +319 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +841 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +69 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +66 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +125 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +79 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +127 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +96 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +106 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +76 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +53 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +306 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +192 -0
- data/ext/gecode-1.3.1/gecode/set/propagator.icc +96 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +233 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op.cc +96 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op.hh +267 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +528 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +312 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +131 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +198 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +150 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +151 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +292 -0
- data/ext/gecode-1.3.1/gecode/set/rel.cc +201 -0
- data/ext/gecode-1.3.1/gecode/set/rel.hh +250 -0
- data/ext/gecode-1.3.1/gecode/set/rel/common.icc +109 -0
- data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +101 -0
- data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +88 -0
- data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +132 -0
- data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +142 -0
- data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +121 -0
- data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +80 -0
- data/ext/gecode-1.3.1/gecode/set/select.cc +88 -0
- data/ext/gecode-1.3.1/gecode/set/select.hh +113 -0
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +267 -0
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +59 -0
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +91 -0
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +112 -0
- data/ext/gecode-1.3.1/gecode/set/select/inter.icc +300 -0
- data/ext/gecode-1.3.1/gecode/set/sequence.cc +48 -0
- data/ext/gecode-1.3.1/gecode/set/sequence.hh +97 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +79 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +83 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +63 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +61 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +53 -0
- data/ext/gecode-1.3.1/gecode/set/var-imp.vis +205 -0
- data/ext/gecode-1.3.1/gecode/set/var.icc +1090 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +192 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +235 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp.cc +127 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp.icc +356 -0
- data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +256 -0
- data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +512 -0
- data/ext/gecode-1.3.1/gecode/set/var/iter.icc +47 -0
- data/ext/gecode-1.3.1/gecode/set/var/set.cc +99 -0
- data/ext/gecode-1.3.1/gecode/set/var/set.icc +282 -0
- data/ext/gecode-1.3.1/gecode/set/view.icc +1075 -0
- data/ext/gecode-1.3.1/gecode/set/view/complement.icc +525 -0
- data/ext/gecode-1.3.1/gecode/set/view/const.icc +651 -0
- data/ext/gecode-1.3.1/gecode/set/view/print.cc +120 -0
- data/ext/gecode-1.3.1/gecode/set/view/set.icc +217 -0
- data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +348 -0
- data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +152 -0
- data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +131 -0
- data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +157 -0
- data/ext/gecode-1.3.1/gecode/support/random.hh +100 -0
- data/ext/gecode-1.3.1/gecode/support/shared-array.hh +255 -0
- data/ext/gecode-1.3.1/gecode/support/sort.hh +193 -0
- data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +240 -0
- data/ext/gecode-1.3.1/gecode/support/static-stack.hh +117 -0
- data/ext/gecode-1.3.1/install-sh +323 -0
- data/ext/gecode-1.3.1/misc/debian/Makefile.am +8 -0
- data/ext/gecode-1.3.1/misc/debian/changelog +6 -0
- data/ext/gecode-1.3.1/misc/debian/control +11 -0
- data/ext/gecode-1.3.1/misc/debian/copyright +44 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.info +9 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.install +2 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.spec +58 -0
- data/ext/gecode-1.3.1/misc/debian/rules +81 -0
- data/ext/gecode-1.3.1/misc/doxygen/back.png +0 -0
- data/ext/gecode-1.3.1/misc/doxygen/footer.html +3 -0
- data/ext/gecode-1.3.1/misc/doxygen/gecode-logo-100.png +0 -0
- data/ext/gecode-1.3.1/misc/doxygen/header.html +46 -0
- data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +460 -0
- data/ext/gecode-1.3.1/misc/fixproperties.sh +32 -0
- data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/gecode-search.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/gecode.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/genchangelog.perl +190 -0
- data/ext/gecode-1.3.1/misc/genlicense.perl +113 -0
- data/ext/gecode-1.3.1/misc/genstatistics.perl +155 -0
- data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +170 -0
- data/ext/gecode-1.3.1/misc/genvarimp.perl +666 -0
- data/ext/gecode-1.3.1/misc/getrevision.perl +32 -0
- data/ext/gecode-1.3.1/misc/makedepend.perl +66 -0
- data/ext/gecode-1.3.1/test/int.cc +497 -0
- data/ext/gecode-1.3.1/test/int.hh +119 -0
- data/ext/gecode-1.3.1/test/int/arithmetic.cc +262 -0
- data/ext/gecode-1.3.1/test/int/basic.cc +42 -0
- data/ext/gecode-1.3.1/test/int/bool.cc +189 -0
- data/ext/gecode-1.3.1/test/int/channel.cc +79 -0
- data/ext/gecode-1.3.1/test/int/count.cc +264 -0
- data/ext/gecode-1.3.1/test/int/distinct.cc +121 -0
- data/ext/gecode-1.3.1/test/int/dom.cc +69 -0
- data/ext/gecode-1.3.1/test/int/element.cc +132 -0
- data/ext/gecode-1.3.1/test/int/gcc.cc +592 -0
- data/ext/gecode-1.3.1/test/int/linear.cc +315 -0
- data/ext/gecode-1.3.1/test/int/minimodel.cc +451 -0
- data/ext/gecode-1.3.1/test/int/regular.cc +105 -0
- data/ext/gecode-1.3.1/test/int/rel.cc +283 -0
- data/ext/gecode-1.3.1/test/int/scheduling.cc +259 -0
- data/ext/gecode-1.3.1/test/int/sortedness.cc +272 -0
- data/ext/gecode-1.3.1/test/intset.cc +40 -0
- data/ext/gecode-1.3.1/test/log.cc +515 -0
- data/ext/gecode-1.3.1/test/log.hh +68 -0
- data/ext/gecode-1.3.1/test/set.cc +542 -0
- data/ext/gecode-1.3.1/test/set.hh +152 -0
- data/ext/gecode-1.3.1/test/set/convex.cc +94 -0
- data/ext/gecode-1.3.1/test/set/distinct.cc +148 -0
- data/ext/gecode-1.3.1/test/set/dom.cc +67 -0
- data/ext/gecode-1.3.1/test/set/int.cc +249 -0
- data/ext/gecode-1.3.1/test/set/projection.cc +333 -0
- data/ext/gecode-1.3.1/test/set/rel-op.cc +662 -0
- data/ext/gecode-1.3.1/test/set/rel.cc +198 -0
- data/ext/gecode-1.3.1/test/set/select.cc +108 -0
- data/ext/gecode-1.3.1/test/set/sequence.cc +83 -0
- data/ext/gecode-1.3.1/test/stress.cc +93 -0
- data/ext/gecode-1.3.1/test/stress.hh +74 -0
- data/ext/gecode-1.3.1/test/stress/distinct.cc +70 -0
- data/ext/gecode-1.3.1/test/stress/domain.cc +69 -0
- data/ext/gecode-1.3.1/test/stress/exec.cc +60 -0
- data/ext/gecode-1.3.1/test/stress/minsort.cc +63 -0
- data/ext/gecode-1.3.1/test/stress/regular.cc +112 -0
- data/ext/gecode-1.3.1/test/test.cc +215 -0
- data/ext/gecode-1.3.1/test/test.hh +107 -0
- data/ext/missing.cpp +328 -0
- data/ext/missing.h +120 -0
- data/ext/vararray.cpp +330 -0
- data/ext/vararray.h +149 -0
- data/lib/gecoder.rb +5 -0
- data/lib/gecoder/bindings.rb +34 -0
- data/lib/gecoder/bindings/bindings.rb +2209 -0
- data/lib/gecoder/interface.rb +8 -0
- data/lib/gecoder/interface/binding_changes.rb +313 -0
- data/lib/gecoder/interface/branch.rb +152 -0
- data/lib/gecoder/interface/constraints.rb +397 -0
- data/lib/gecoder/interface/constraints/bool/boolean.rb +246 -0
- data/lib/gecoder/interface/constraints/bool/linear.rb +29 -0
- data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +84 -0
- data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +8 -0
- data/lib/gecoder/interface/constraints/bool_var_constraints.rb +75 -0
- data/lib/gecoder/interface/constraints/int/arithmetic.rb +71 -0
- data/lib/gecoder/interface/constraints/int/domain.rb +78 -0
- data/lib/gecoder/interface/constraints/int/linear.rb +295 -0
- data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +72 -0
- data/lib/gecoder/interface/constraints/int_enum/channel.rb +100 -0
- data/lib/gecoder/interface/constraints/int_enum/count.rb +92 -0
- data/lib/gecoder/interface/constraints/int_enum/distinct.rb +69 -0
- data/lib/gecoder/interface/constraints/int_enum/element.rb +82 -0
- data/lib/gecoder/interface/constraints/int_enum/equality.rb +38 -0
- data/lib/gecoder/interface/constraints/int_enum/sort.rb +126 -0
- data/lib/gecoder/interface/constraints/int_enum_constraints.rb +37 -0
- data/lib/gecoder/interface/constraints/int_var_constraints.rb +58 -0
- data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
- data/lib/gecoder/interface/constraints/set/cardinality.rb +75 -0
- data/lib/gecoder/interface/constraints/set/connection.rb +193 -0
- data/lib/gecoder/interface/constraints/set/domain.rb +109 -0
- data/lib/gecoder/interface/constraints/set/operation.rb +132 -0
- data/lib/gecoder/interface/constraints/set/relation.rb +178 -0
- data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
- data/lib/gecoder/interface/constraints/set_enum/distinct.rb +80 -0
- data/lib/gecoder/interface/constraints/set_enum/operation.rb +60 -0
- data/lib/gecoder/interface/constraints/set_enum/selection.rb +217 -0
- data/lib/gecoder/interface/constraints/set_enum_constraints.rb +34 -0
- data/lib/gecoder/interface/constraints/set_var_constraints.rb +72 -0
- data/lib/gecoder/interface/enum_matrix.rb +64 -0
- data/lib/gecoder/interface/enum_wrapper.rb +153 -0
- data/lib/gecoder/interface/model.rb +251 -0
- data/lib/gecoder/interface/search.rb +123 -0
- data/lib/gecoder/interface/variables.rb +254 -0
- data/lib/gecoder/version.rb +4 -0
- data/specs/binding_changes.rb +76 -0
- data/specs/bool_var.rb +74 -0
- data/specs/branch.rb +170 -0
- data/specs/constraints/arithmetic.rb +266 -0
- data/specs/constraints/bool_enum.rb +140 -0
- data/specs/constraints/boolean.rb +232 -0
- data/specs/constraints/cardinality.rb +154 -0
- data/specs/constraints/channel.rb +126 -0
- data/specs/constraints/connection.rb +373 -0
- data/specs/constraints/constraint_helper.rb +180 -0
- data/specs/constraints/constraints.rb +74 -0
- data/specs/constraints/count.rb +139 -0
- data/specs/constraints/distinct.rb +218 -0
- data/specs/constraints/element.rb +106 -0
- data/specs/constraints/equality.rb +31 -0
- data/specs/constraints/int_domain.rb +69 -0
- data/specs/constraints/int_relation.rb +78 -0
- data/specs/constraints/linear.rb +332 -0
- data/specs/constraints/reification_sugar.rb +96 -0
- data/specs/constraints/selection.rb +292 -0
- data/specs/constraints/set_domain.rb +181 -0
- data/specs/constraints/set_operation.rb +285 -0
- data/specs/constraints/set_relation.rb +201 -0
- data/specs/constraints/sort.rb +175 -0
- data/specs/enum_matrix.rb +43 -0
- data/specs/enum_wrapper.rb +122 -0
- data/specs/int_var.rb +144 -0
- data/specs/logging.rb +24 -0
- data/specs/model.rb +190 -0
- data/specs/search.rb +246 -0
- data/specs/set_var.rb +68 -0
- data/specs/spec_helper.rb +93 -0
- data/tasks/all_tasks.rb +1 -0
- data/tasks/distribution.rake +129 -0
- data/tasks/rcov.rake +17 -0
- data/tasks/specs.rake +15 -0
- data/tasks/svn.rake +11 -0
- data/tasks/website.rake +51 -0
- data/vendor/rust/README +28 -0
- data/vendor/rust/bin/cxxgenerator.rb +93 -0
- data/vendor/rust/include/rust_checks.hh +115 -0
- data/vendor/rust/include/rust_conversions.hh +102 -0
- data/vendor/rust/rust.rb +67 -0
- data/vendor/rust/rust/attribute.rb +51 -0
- data/vendor/rust/rust/bindings.rb +172 -0
- data/vendor/rust/rust/class.rb +339 -0
- data/vendor/rust/rust/constants.rb +48 -0
- data/vendor/rust/rust/container.rb +110 -0
- data/vendor/rust/rust/cppifaceparser.rb +129 -0
- data/vendor/rust/rust/cwrapper.rb +72 -0
- data/vendor/rust/rust/cxxclass.rb +98 -0
- data/vendor/rust/rust/element.rb +81 -0
- data/vendor/rust/rust/enum.rb +63 -0
- data/vendor/rust/rust/function.rb +407 -0
- data/vendor/rust/rust/namespace.rb +61 -0
- data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
- data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
- data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
- data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
- data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
- data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
- data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
- data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +91 -0
- data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
- data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
- data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
- data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
- data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
- data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
- data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
- data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
- data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
- data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
- data/vendor/rust/rust/type.rb +98 -0
- data/vendor/rust/test/Makefile +4 -0
- data/vendor/rust/test/constants.rb +36 -0
- data/vendor/rust/test/cppclass.cc +45 -0
- data/vendor/rust/test/cppclass.hh +67 -0
- data/vendor/rust/test/cppclass.rb +59 -0
- data/vendor/rust/test/cwrapper.c +74 -0
- data/vendor/rust/test/cwrapper.h +41 -0
- data/vendor/rust/test/cwrapper.rb +56 -0
- data/vendor/rust/test/dummyclass.hh +31 -0
- data/vendor/rust/test/lib/extension-test.rb +98 -0
- data/vendor/rust/test/operators.cc +41 -0
- data/vendor/rust/test/operators.hh +39 -0
- data/vendor/rust/test/operators.rb +39 -0
- data/vendor/rust/test/test-constants.rb +43 -0
- data/vendor/rust/test/test-cppclass.rb +82 -0
- data/vendor/rust/test/test-cwrapper.rb +80 -0
- data/vendor/rust/test/test-operators.rb +42 -0
- metadata +826 -0
|
@@ -0,0 +1,760 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Patrick Pekczynski <pekczynski@ps.uni-sb.de>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Patrick Pekczynski, 2004
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3512 $
|
|
11
|
+
*
|
|
12
|
+
* This file is part of Gecode, the generic constraint
|
|
13
|
+
* development environment:
|
|
14
|
+
* http://www.gecode.org
|
|
15
|
+
*
|
|
16
|
+
* See the file "LICENSE" for information on usage and
|
|
17
|
+
* redistribution of this file, and for a
|
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
namespace Gecode { namespace Int { namespace GCC {
|
|
23
|
+
|
|
24
|
+
/// \name GCC-Bnd-Support
|
|
25
|
+
//@{
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* \brief Class for computing unreachable values in the
|
|
29
|
+
* value GCC propagator
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
class UnReachable {
|
|
33
|
+
public:
|
|
34
|
+
unsigned int minb;
|
|
35
|
+
unsigned int maxb;
|
|
36
|
+
unsigned int eq;
|
|
37
|
+
unsigned int le;
|
|
38
|
+
unsigned int gr;
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* \brief Bounds consistency check for cardinality variables.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
template <class View, class Card, bool shared>
|
|
46
|
+
forceinline ExecStatus
|
|
47
|
+
prop_card(Space* home, ViewArray<View>& x, ViewArray<Card>& k, bool& mod) {
|
|
48
|
+
int n = x.size();
|
|
49
|
+
int m = k.size();
|
|
50
|
+
GECODE_AUTOARRAY(UnReachable, rv, m);
|
|
51
|
+
for(int i = m; i--; ) {
|
|
52
|
+
rv[i].minb = 0;
|
|
53
|
+
rv[i].maxb = 0;
|
|
54
|
+
rv[i].le = 0;
|
|
55
|
+
rv[i].gr = 0;
|
|
56
|
+
rv[i].eq = 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
for (int i = n; i--; ) {
|
|
60
|
+
int b = x[i].assigned();
|
|
61
|
+
int min_idx = 0;
|
|
62
|
+
int max_idx = 0;
|
|
63
|
+
min_idx = lookupValue(k,x[i].min());
|
|
64
|
+
if (min_idx == -1) {
|
|
65
|
+
return ES_FAILED;
|
|
66
|
+
}
|
|
67
|
+
if (b) {
|
|
68
|
+
rv[min_idx].minb++;
|
|
69
|
+
rv[min_idx].maxb++;
|
|
70
|
+
rv[min_idx].eq++;
|
|
71
|
+
} else {
|
|
72
|
+
max_idx = lookupValue(k,x[i].max());
|
|
73
|
+
if (max_idx == -1) {
|
|
74
|
+
return ES_FAILED;
|
|
75
|
+
}
|
|
76
|
+
// count the number of variables
|
|
77
|
+
// with lower bound k[min_idx].card()
|
|
78
|
+
rv[min_idx].minb++;
|
|
79
|
+
|
|
80
|
+
// count the number of variables
|
|
81
|
+
// with upper bound k[max_idx].card()
|
|
82
|
+
rv[max_idx].maxb++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
rv[0].le = 0;
|
|
87
|
+
int c_min = 0;
|
|
88
|
+
for (int i = 1; i < m; i++) {
|
|
89
|
+
rv[i].le = c_min + rv[i - 1].maxb;
|
|
90
|
+
c_min += rv[i - 1].maxb;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
rv[m-1].gr = 0;
|
|
94
|
+
int c_max = 0;
|
|
95
|
+
for (int i = m-1; i--; ) {
|
|
96
|
+
rv[i].gr = c_max + rv[i + 1].minb;
|
|
97
|
+
c_max += rv[i + 1].minb;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (int i = m; i--; ) {
|
|
101
|
+
int reachable = (int) (x.size() - rv[i].le - rv[i].gr);
|
|
102
|
+
if (!k[i].assigned()) {
|
|
103
|
+
ModEvent me = k[i].lq(home, reachable);
|
|
104
|
+
if (me_failed(me)) {
|
|
105
|
+
return ES_FAILED;
|
|
106
|
+
}
|
|
107
|
+
mod |= (k[i].modified() && (k[i].max() != reachable));
|
|
108
|
+
mod |= shared && k[i].modified();
|
|
109
|
+
|
|
110
|
+
if (rv[i].eq > 0) {
|
|
111
|
+
ModEvent me = k[i].gq(home, (int) rv[i].eq);
|
|
112
|
+
if (me_failed(me)) {
|
|
113
|
+
return ES_FAILED;
|
|
114
|
+
}
|
|
115
|
+
mod |= (k[i].modified() && (k[i].min() != (int) rv[i].eq));
|
|
116
|
+
mod |= shared && k[i].modified();
|
|
117
|
+
}
|
|
118
|
+
} else {
|
|
119
|
+
// check validity of the cardinality value
|
|
120
|
+
int v = k[i].max();
|
|
121
|
+
if ( !( (int) rv[i].eq <= v && v <= reachable) ) {
|
|
122
|
+
return ES_FAILED;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
return ES_OK;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
/** \brief Consistency check, whether the cardinality values are feasible.
|
|
132
|
+
*/
|
|
133
|
+
|
|
134
|
+
template <class View, class Card>
|
|
135
|
+
inline bool
|
|
136
|
+
card_consistent(int& smin, int& smax, ViewArray<View>& x,
|
|
137
|
+
ViewArray<Card>& k, bool& all) {
|
|
138
|
+
|
|
139
|
+
int m = k.size();
|
|
140
|
+
int n = x.size();
|
|
141
|
+
for (int i = m; i--; ) {
|
|
142
|
+
smax += k[i].max();
|
|
143
|
+
smin += k[i].min();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// not enough variables to satifsy cardinality requirements
|
|
147
|
+
if (n < smin) {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// if we use all variables
|
|
152
|
+
// not all variables can be assigned
|
|
153
|
+
if (all && smax < n) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* \brief Maps domain bounds to their position in hall[].bounds.
|
|
162
|
+
*/
|
|
163
|
+
class Rank {
|
|
164
|
+
public:
|
|
165
|
+
/**
|
|
166
|
+
* \brief \f$ rank[i].min = z
|
|
167
|
+
* \Leftrightarrow min(x_i) = hall[z].bounds \f$
|
|
168
|
+
*/
|
|
169
|
+
int min;
|
|
170
|
+
/**
|
|
171
|
+
* \brief \f$ rank[i].max = z
|
|
172
|
+
* \Leftrightarrow max(x_i) = hall[z].bounds \f$
|
|
173
|
+
*/
|
|
174
|
+
int max;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* \brief Compares two indices \a i, \a j of two views
|
|
179
|
+
* \a \f$ x_i \f$ \f$ x_j\f$ according to the
|
|
180
|
+
* ascending order of the views upper bounds
|
|
181
|
+
*
|
|
182
|
+
*/
|
|
183
|
+
|
|
184
|
+
template <class View>
|
|
185
|
+
class MaxInc {
|
|
186
|
+
protected:
|
|
187
|
+
ViewArray<View> x;
|
|
188
|
+
public:
|
|
189
|
+
MaxInc(const ViewArray<View>& x0) : x(x0) {}
|
|
190
|
+
forceinline bool
|
|
191
|
+
operator()(const int i, const int j) {
|
|
192
|
+
return x[i].max() < x[j].max();
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* \brief Compares two indices \a i, \a j of two views
|
|
198
|
+
* \a \f$ x_i \f$ \f$ x_j\f$ according to the
|
|
199
|
+
* ascending order of the views lower bounds
|
|
200
|
+
*
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
template <class View>
|
|
204
|
+
class MinInc {
|
|
205
|
+
protected:
|
|
206
|
+
ViewArray<View> x;
|
|
207
|
+
public:
|
|
208
|
+
MinInc(const ViewArray<View>& x0) : x(x0) {}
|
|
209
|
+
forceinline bool
|
|
210
|
+
operator()(const int i, const int j) {
|
|
211
|
+
return x[i].min() < x[j].min();
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* \brief Partial sum structure for constant
|
|
218
|
+
* time computation of the maximal capacity of an interval.
|
|
219
|
+
*
|
|
220
|
+
*/
|
|
221
|
+
template <class Card>
|
|
222
|
+
class PartialSum {
|
|
223
|
+
private:
|
|
224
|
+
/// memory allocation
|
|
225
|
+
char* mem;
|
|
226
|
+
/// sum[i] contains the partial sum from 0 to i
|
|
227
|
+
int* sum;
|
|
228
|
+
/**
|
|
229
|
+
* marks indices with 0 that can be skipped
|
|
230
|
+
* and can be compared to doublet control
|
|
231
|
+
*/
|
|
232
|
+
int* ds;
|
|
233
|
+
/// the size of the sum
|
|
234
|
+
int size;
|
|
235
|
+
public:
|
|
236
|
+
/// \name Constructors and destructors
|
|
237
|
+
//@{
|
|
238
|
+
PartialSum( int, int, ViewArray<Card>& , bool);
|
|
239
|
+
~PartialSum(void);
|
|
240
|
+
//@}
|
|
241
|
+
/// \name Access
|
|
242
|
+
//@{
|
|
243
|
+
int firstValue;
|
|
244
|
+
int lastValue;
|
|
245
|
+
int sumup(int, int);
|
|
246
|
+
int minValue(void);
|
|
247
|
+
int maxValue(void);
|
|
248
|
+
int skipNonNullElementsRight(int);
|
|
249
|
+
int skipNonNullElementsLeft(int);
|
|
250
|
+
void* operator new(size_t s);
|
|
251
|
+
void operator delete(void* p);
|
|
252
|
+
void print(void);
|
|
253
|
+
bool check_update_max(ViewArray<Card>& k);
|
|
254
|
+
bool check_update_min(ViewArray<Card>& k);
|
|
255
|
+
int getsize(void);
|
|
256
|
+
//@}
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
/// \brief Default destructor
|
|
260
|
+
template <class Card>
|
|
261
|
+
forceinline
|
|
262
|
+
PartialSum<Card>::~PartialSum(void){
|
|
263
|
+
assert(mem != NULL);
|
|
264
|
+
Memory::free(mem);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/// \brief Memory allocation for the partial sum structure
|
|
268
|
+
template <class Card>
|
|
269
|
+
forceinline void*
|
|
270
|
+
PartialSum<Card>::operator new(size_t t){
|
|
271
|
+
void* allocated = Memory::malloc(t);
|
|
272
|
+
return allocated;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/// \brief Free memory used by partial sum structure
|
|
276
|
+
template <class Card>
|
|
277
|
+
forceinline void
|
|
278
|
+
PartialSum<Card>::operator delete(void* p){
|
|
279
|
+
Memory::free(p);
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* \brief Default initialization
|
|
284
|
+
*
|
|
285
|
+
* \param first is the miminum value the variables can take
|
|
286
|
+
* \param count is equal to the size \f$ |k| \f$,
|
|
287
|
+
* where \a k denotes the array of cardinalities used
|
|
288
|
+
* in the global cardinality propagator
|
|
289
|
+
* \param elements contains the upper and lower cardinalities for every value
|
|
290
|
+
* \param up denotes the direction whether we sumup the lower or upper cardinality bounds
|
|
291
|
+
* If \a up is true we sumup the upper bounds, otherwise the lower bounds.
|
|
292
|
+
*
|
|
293
|
+
*/
|
|
294
|
+
template <class Card>
|
|
295
|
+
inline
|
|
296
|
+
PartialSum<Card>::PartialSum(int first,
|
|
297
|
+
int count,
|
|
298
|
+
ViewArray<Card>& elements,
|
|
299
|
+
bool up) {
|
|
300
|
+
int i = 0;
|
|
301
|
+
int j = 0;
|
|
302
|
+
// we add three elements at the beginning and two at the end
|
|
303
|
+
size = count + 5;
|
|
304
|
+
// memory allocation
|
|
305
|
+
size_t sum_size = (size) * sizeof(int);
|
|
306
|
+
size_t ds_size = (size) * sizeof(int);
|
|
307
|
+
size_t total = sum_size + ds_size;
|
|
308
|
+
|
|
309
|
+
mem = reinterpret_cast<char*> (Memory::malloc(total));
|
|
310
|
+
sum = reinterpret_cast<int*> (mem);
|
|
311
|
+
ds = reinterpret_cast<int*> (mem + sum_size);
|
|
312
|
+
|
|
313
|
+
for (int z = 0; z < size; z++) {
|
|
314
|
+
sum[z] = 0;
|
|
315
|
+
ds[z] = 0;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/*
|
|
319
|
+
* firstValue and lastValue are sentinels
|
|
320
|
+
* indicating whether an end of the sum has been reached
|
|
321
|
+
*
|
|
322
|
+
*/
|
|
323
|
+
firstValue = first - 3;
|
|
324
|
+
lastValue = first + count + 1;
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
// the first three elements
|
|
328
|
+
for (i = 3; i--; ){
|
|
329
|
+
sum[i] = i;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
int shift = count + 2;
|
|
333
|
+
|
|
334
|
+
/*
|
|
335
|
+
* copy the bounds into sum
|
|
336
|
+
* optimization only those values being indeed
|
|
337
|
+
* variable bounds
|
|
338
|
+
*/
|
|
339
|
+
for (i = 2; i < shift; i++){
|
|
340
|
+
if (up) {
|
|
341
|
+
sum[i + 1] = sum[i] + elements[i - 2].max();
|
|
342
|
+
} else {
|
|
343
|
+
sum[i + 1] = sum[i] + elements[i - 2].min();
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
sum[i + 1] = sum[i] + 1;
|
|
347
|
+
sum[i + 2] = sum[i + 1] + 1;
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
// check for doublets
|
|
351
|
+
i = count + 3;
|
|
352
|
+
j = i + 1;
|
|
353
|
+
for ( ; i > 0; ){
|
|
354
|
+
while(sum[i] == sum[i - 1]) {
|
|
355
|
+
ds[i] = j;
|
|
356
|
+
i--;
|
|
357
|
+
}
|
|
358
|
+
ds[j] = i;
|
|
359
|
+
i--;
|
|
360
|
+
j = ds[j];
|
|
361
|
+
}
|
|
362
|
+
ds[j] = 0;
|
|
363
|
+
// for the sake of having no seg fault
|
|
364
|
+
ds[0] = 0;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* \brief Compute the maximum capacity of an interval I
|
|
369
|
+
*/
|
|
370
|
+
template <class Card>
|
|
371
|
+
forceinline int
|
|
372
|
+
PartialSum<Card>::sumup(int from, int to){
|
|
373
|
+
if (from <= to) {
|
|
374
|
+
return sum[to - firstValue] - sum[from - firstValue - 1];
|
|
375
|
+
} else {
|
|
376
|
+
return sum[to - firstValue - 1] - sum[from - firstValue];
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* \brief Returns the smallest bound of the variables in \a x
|
|
382
|
+
*
|
|
383
|
+
*/
|
|
384
|
+
template <class Card>
|
|
385
|
+
forceinline int
|
|
386
|
+
PartialSum<Card>::minValue(void){
|
|
387
|
+
return firstValue + 3;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* \brief Returns the largest bound of the variables in \a x
|
|
392
|
+
*
|
|
393
|
+
*/
|
|
394
|
+
|
|
395
|
+
template <class Card>
|
|
396
|
+
forceinline int
|
|
397
|
+
PartialSum<Card>::maxValue(void){
|
|
398
|
+
return lastValue - 2;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* \brief Skip neigboured array entries if their values do
|
|
404
|
+
* not differ.
|
|
405
|
+
*
|
|
406
|
+
*/
|
|
407
|
+
template <class Card>
|
|
408
|
+
forceinline int
|
|
409
|
+
PartialSum<Card>::skipNonNullElementsRight(int value) {
|
|
410
|
+
value -= firstValue;
|
|
411
|
+
return (ds[value] < value ? value : ds[value]) + firstValue;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* \brief Skip neigboured array entries if their values do
|
|
416
|
+
* not differ.
|
|
417
|
+
*
|
|
418
|
+
*/
|
|
419
|
+
template <class Card>
|
|
420
|
+
forceinline int
|
|
421
|
+
PartialSum<Card>::skipNonNullElementsLeft(int value) {
|
|
422
|
+
value -= firstValue;
|
|
423
|
+
return (ds[value] > value ? ds[ds[value]] : value) + firstValue;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/// \brief Debugging: print a partial sum structure
|
|
427
|
+
template <class Card>
|
|
428
|
+
void
|
|
429
|
+
PartialSum<Card>::print(void){
|
|
430
|
+
std::cout << "----------\n";
|
|
431
|
+
std::cout << "smallest elem = "<< minValue() << " - "
|
|
432
|
+
<< "largest elem = "<< maxValue() << "\n";
|
|
433
|
+
std::cout << "fsv: "<< firstValue <<" lsv: " << lastValue
|
|
434
|
+
<< " size = "<< size << "\n";
|
|
435
|
+
std::cout << "number of elements = "<< size - 5<<"\n";
|
|
436
|
+
std::cout << "elements: ";
|
|
437
|
+
for (int i = 3; i < size - 2; i++) {
|
|
438
|
+
std::cout << sum[i] - sum[i-1] << " ";
|
|
439
|
+
}
|
|
440
|
+
std::cout <<"\n";
|
|
441
|
+
|
|
442
|
+
std::cout << "sum: ";
|
|
443
|
+
for (int i = 0; i < size; i++) {
|
|
444
|
+
std::cout <<sum[i] << " ";
|
|
445
|
+
}
|
|
446
|
+
std::cout <<"\n";
|
|
447
|
+
std::cout << "ds: ";
|
|
448
|
+
for (int i = 0; i < size; i++) {
|
|
449
|
+
std::cout <<sum[i] << " ";
|
|
450
|
+
}
|
|
451
|
+
std::cout <<"\n";
|
|
452
|
+
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* \brief Check whether the values in the
|
|
457
|
+
* partial sum structure containting
|
|
458
|
+
* the upper cardinality bounds differ
|
|
459
|
+
* from the actual upper bounds of the
|
|
460
|
+
* cardinalities.
|
|
461
|
+
*/
|
|
462
|
+
|
|
463
|
+
template <class Card>
|
|
464
|
+
inline bool
|
|
465
|
+
PartialSum<Card>::check_update_max(ViewArray<Card>& k){
|
|
466
|
+
if (k.size() <= size - 5) {
|
|
467
|
+
return true;
|
|
468
|
+
} else {
|
|
469
|
+
for (int i = 3; i < size - 2; i++) {
|
|
470
|
+
if ((sum[i] - sum[i - 1]) != k[i - 3].max()) {
|
|
471
|
+
return true;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* \brief Check whether the values in the
|
|
480
|
+
* partial sum structure containting
|
|
481
|
+
* the lower cardinality bounds differ
|
|
482
|
+
* from the actual lower bounds of the
|
|
483
|
+
* cardinalities.
|
|
484
|
+
*/
|
|
485
|
+
|
|
486
|
+
template <class Card>
|
|
487
|
+
inline bool
|
|
488
|
+
PartialSum<Card>::check_update_min(ViewArray<Card>& k){
|
|
489
|
+
if (k.size() <= size - 5) {
|
|
490
|
+
return true;
|
|
491
|
+
} else {
|
|
492
|
+
for (int i = 3; i < size - 2; i++) {
|
|
493
|
+
if ((sum[i] - sum[i - 1]) != k[i - 3].min()) {
|
|
494
|
+
return true;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return false;
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/// \brief Return the size of the partial sum structure.
|
|
502
|
+
template <class Card>
|
|
503
|
+
forceinline int
|
|
504
|
+
PartialSum<Card>::getsize(void){
|
|
505
|
+
return size;
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* \brief Container class provding information about the Hall
|
|
511
|
+
* structure of the problem variables.
|
|
512
|
+
*
|
|
513
|
+
* This class is used to
|
|
514
|
+
* keep the number of different arrays small, that is
|
|
515
|
+
* an array of type %HallInfo replaces integer arrays for each
|
|
516
|
+
* of the class members.
|
|
517
|
+
*
|
|
518
|
+
*/
|
|
519
|
+
class HallInfo {
|
|
520
|
+
public:
|
|
521
|
+
/// Represents the union of all lower and upper domain bounds
|
|
522
|
+
int bounds;
|
|
523
|
+
/**
|
|
524
|
+
* \brief critical capacity pointer
|
|
525
|
+
* t represents a predecessor function where \f$ t_i \f$ denotes the
|
|
526
|
+
* predecessor of i in bounds
|
|
527
|
+
*/
|
|
528
|
+
int t;
|
|
529
|
+
/**
|
|
530
|
+
* \brief difference between critical capacities
|
|
531
|
+
*
|
|
532
|
+
* d_i is the difference between the capacities of hall[i].bounds
|
|
533
|
+
* and its predecessor in bounds hall[t[i]].bounds
|
|
534
|
+
*
|
|
535
|
+
*/
|
|
536
|
+
int d;
|
|
537
|
+
/**
|
|
538
|
+
* \brief Hall set pointer
|
|
539
|
+
*
|
|
540
|
+
* If hall[i].h < i then the half-open interval
|
|
541
|
+
* [hall[h[i]].bounds,hall[i].bounds) is containd in a Hall
|
|
542
|
+
* set.
|
|
543
|
+
* Otherwise holds a pointer to the Hall intervall it belongs to.
|
|
544
|
+
*/
|
|
545
|
+
int h;
|
|
546
|
+
/**
|
|
547
|
+
* \brief Stable Set pointer
|
|
548
|
+
*
|
|
549
|
+
*/
|
|
550
|
+
int s;
|
|
551
|
+
/**
|
|
552
|
+
* \brief Potentially Stable Set pointer
|
|
553
|
+
*
|
|
554
|
+
*/
|
|
555
|
+
int ps;
|
|
556
|
+
/**
|
|
557
|
+
* \brief Bound update
|
|
558
|
+
*
|
|
559
|
+
* \a newBound contains either a narrowed domain bound
|
|
560
|
+
* or is stores the old domain bound of a variable.
|
|
561
|
+
*/
|
|
562
|
+
int newBound;
|
|
563
|
+
};
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* \name Path compression
|
|
568
|
+
*
|
|
569
|
+
* Each of the nodes on the path from \a start to \a end
|
|
570
|
+
* becomes a direct child of \a to.
|
|
571
|
+
*
|
|
572
|
+
*/
|
|
573
|
+
|
|
574
|
+
//@{
|
|
575
|
+
/// \brief Path compression for potentially stable set structure
|
|
576
|
+
inline void
|
|
577
|
+
pathset_ps(HallInfo hall[], int start, int end, int to) {
|
|
578
|
+
int k, l;
|
|
579
|
+
for (l=start; (k=l) != end; hall[k].ps=to) {
|
|
580
|
+
l = hall[k].ps;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/// \brief Path compression for stable set structure
|
|
585
|
+
inline void
|
|
586
|
+
pathset_s(HallInfo hall[], int start, int end, int to) {
|
|
587
|
+
int k, l;
|
|
588
|
+
for (l=start; (k=l) != end; hall[k].s=to) {
|
|
589
|
+
l = hall[k].s;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/// \brief Path compression for capacity pointer structure
|
|
594
|
+
inline void
|
|
595
|
+
pathset_t(HallInfo hall[], int start, int end, int to) {
|
|
596
|
+
int k, l;
|
|
597
|
+
for (l=start; (k=l) != end; hall[k].t=to) {
|
|
598
|
+
l = hall[k].t;
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/// \brief Path compression for hall pointer structure
|
|
603
|
+
inline void
|
|
604
|
+
pathset_h(HallInfo hall[], int start, int end, int to) {
|
|
605
|
+
int k, l;
|
|
606
|
+
for (l=start; (k=l) != end; hall[k].h=to) {
|
|
607
|
+
l = hall[k].h;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
//@}
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* \name Path minimum
|
|
614
|
+
*
|
|
615
|
+
* returns the smalles reachable index starting from i
|
|
616
|
+
*
|
|
617
|
+
*/
|
|
618
|
+
//@{
|
|
619
|
+
/// \brief Path minimum for hall pointer structure
|
|
620
|
+
forceinline int
|
|
621
|
+
pathmin_h(const HallInfo hall[], int i) {
|
|
622
|
+
while (hall[i].h < i)
|
|
623
|
+
i = hall[i].h;
|
|
624
|
+
return i;
|
|
625
|
+
}
|
|
626
|
+
/// \brief Path minimum for capacity pointer structure
|
|
627
|
+
forceinline int
|
|
628
|
+
pathmin_t(const HallInfo hall[], int i) {
|
|
629
|
+
while (hall[i].t < i)
|
|
630
|
+
i = hall[i].t;
|
|
631
|
+
return i;
|
|
632
|
+
}
|
|
633
|
+
//@}
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* \name Path maximum
|
|
637
|
+
*
|
|
638
|
+
* returns the greatest reachable index starting from i
|
|
639
|
+
*/
|
|
640
|
+
//@{
|
|
641
|
+
/// \brief Path maximum for hall pointer structure
|
|
642
|
+
forceinline int
|
|
643
|
+
pathmax_h(const HallInfo hall[], int i) {
|
|
644
|
+
while (hall[i].h > i)
|
|
645
|
+
i = hall[i].h;
|
|
646
|
+
return i;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
|
|
650
|
+
/// \brief Path maximum for capacity pointer structure
|
|
651
|
+
forceinline int
|
|
652
|
+
pathmax_t(const HallInfo hall[], int i) {
|
|
653
|
+
while (hall[i].t > i) {
|
|
654
|
+
i = hall[i].t;
|
|
655
|
+
}
|
|
656
|
+
return i;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
/// \brief Path maximum for stable set pointer structure
|
|
660
|
+
forceinline int
|
|
661
|
+
pathmax_s(const HallInfo hall[], int i) {
|
|
662
|
+
while (hall[i].s > i)
|
|
663
|
+
i = hall[i].s;
|
|
664
|
+
return i;
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
/// \brief Path maximum for potentially stable set pointer structure
|
|
668
|
+
forceinline int
|
|
669
|
+
pathmax_ps(const HallInfo hall[], int i) {
|
|
670
|
+
while (hall[i].ps > i)
|
|
671
|
+
i = hall[i].ps;
|
|
672
|
+
return i;
|
|
673
|
+
}
|
|
674
|
+
//@}
|
|
675
|
+
//@}
|
|
676
|
+
|
|
677
|
+
/** \brief Assert consistency in the cardinality specification
|
|
678
|
+
* for bounds propagation.
|
|
679
|
+
*
|
|
680
|
+
* This is done by ensuring that only those values are specified with
|
|
681
|
+
* cardinalities, which are not smaller
|
|
682
|
+
* than the smallest value of all variable domains and not greater
|
|
683
|
+
* than the greatest value of all variable domains.
|
|
684
|
+
*/
|
|
685
|
+
|
|
686
|
+
template <class Card>
|
|
687
|
+
void
|
|
688
|
+
reduce_card(int cmin, int cmax, ViewArray<Card>& k) {
|
|
689
|
+
if (cmin == cmax) {
|
|
690
|
+
int idx = 0;
|
|
691
|
+
while (k[idx].card() != cmax) {
|
|
692
|
+
idx++;
|
|
693
|
+
}
|
|
694
|
+
k[0] = k[idx];
|
|
695
|
+
k.size(1);
|
|
696
|
+
} else {
|
|
697
|
+
|
|
698
|
+
GECODE_AUTOARRAY(bool, zero, k.size());
|
|
699
|
+
int ks = k.size();
|
|
700
|
+
int zc = 0;
|
|
701
|
+
for (int i = 0; i < ks; i++) {
|
|
702
|
+
bool impossible = ( (k[i].counter() == 0) &&
|
|
703
|
+
(k[i].card() < cmin ||
|
|
704
|
+
k[i].card() > cmax));
|
|
705
|
+
|
|
706
|
+
if (impossible) {
|
|
707
|
+
zero[i] = true;
|
|
708
|
+
zc++;
|
|
709
|
+
} else {
|
|
710
|
+
zero[i] = false;
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
|
|
715
|
+
if (zero[ks - 1]) {
|
|
716
|
+
int m = ks;
|
|
717
|
+
while(zero[m - 1]) {
|
|
718
|
+
m--;
|
|
719
|
+
zc--;
|
|
720
|
+
}
|
|
721
|
+
k.size(m);
|
|
722
|
+
}
|
|
723
|
+
|
|
724
|
+
if (zc > 0) {
|
|
725
|
+
int ks = k.size();
|
|
726
|
+
// if there are still zero entries left
|
|
727
|
+
for (int i = 0; i < ks; i++) {
|
|
728
|
+
assert(0 <= i && i < ks);
|
|
729
|
+
if (zero[i]) {
|
|
730
|
+
if (i == ks - 1) {
|
|
731
|
+
break;
|
|
732
|
+
}
|
|
733
|
+
// this cardinality does not occur
|
|
734
|
+
// remove it
|
|
735
|
+
// we need the next non-null entry
|
|
736
|
+
int j = i + 1;
|
|
737
|
+
assert(0 <= j && j < ks);
|
|
738
|
+
if (j < ks) {
|
|
739
|
+
while (zero[j]) {
|
|
740
|
+
j++;
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
if (j > ks - 1) {
|
|
744
|
+
break;
|
|
745
|
+
}
|
|
746
|
+
k[i] = k[j];
|
|
747
|
+
zero[j] = true;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
k.size(ks - zc);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
}}}
|
|
758
|
+
|
|
759
|
+
// STATISTICS: int-prop
|
|
760
|
+
|