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,311 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2004
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-09-07 11:03:52 +0200 (Thu, 07 Sep 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3609 $
|
|
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 Linear {
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* Base-class
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
template <class XV, class YV>
|
|
29
|
+
LinBoolView<XV,YV>::LinBoolView(Space* home,
|
|
30
|
+
ViewArray<XV>& x0, YV y0, int c0)
|
|
31
|
+
: Propagator(home), x(x0), y(y0), c(c0) {
|
|
32
|
+
x.subscribe(home,this,PC_INT_VAL);
|
|
33
|
+
y.subscribe(home,this,PC_INT_BND);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
template <class XV, class YV>
|
|
37
|
+
size_t
|
|
38
|
+
LinBoolView<XV,YV>::dispose(Space* home) {
|
|
39
|
+
assert(!home->failed());
|
|
40
|
+
x.cancel(home,this,PC_INT_VAL);
|
|
41
|
+
y.cancel(home,this,PC_INT_BND);
|
|
42
|
+
(void) Propagator::dispose(home);
|
|
43
|
+
return sizeof(*this);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
template <class XV, class YV>
|
|
47
|
+
forceinline
|
|
48
|
+
LinBoolView<XV,YV>::LinBoolView(Space* home, bool share, LinBoolView& p)
|
|
49
|
+
: Propagator(home,share,p), c(p.c) {
|
|
50
|
+
x.update(home,share,p.x);
|
|
51
|
+
y.update(home,share,p.y);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
template <class XV, class YV>
|
|
55
|
+
PropCost
|
|
56
|
+
LinBoolView<XV,YV>::cost(void) const {
|
|
57
|
+
return cost_lo(x.size(),PC_LINEAR_LO);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* Equality propagator
|
|
64
|
+
*
|
|
65
|
+
*/
|
|
66
|
+
template <class XV, class YV>
|
|
67
|
+
forceinline
|
|
68
|
+
EqBoolView<XV,YV>::EqBoolView(Space* home, ViewArray<XV>& x, YV y, int c)
|
|
69
|
+
: LinBoolView<XV,YV>(home,x,y,c) {}
|
|
70
|
+
|
|
71
|
+
template <class XV, class YV>
|
|
72
|
+
ExecStatus
|
|
73
|
+
EqBoolView<XV,YV>::post(Space* home, ViewArray<XV>& x, YV y, int c) {
|
|
74
|
+
if (y.assigned())
|
|
75
|
+
return EqBoolInt<XV>::post(home,x,y.val()+c);
|
|
76
|
+
int n = x.size();
|
|
77
|
+
for (int i = n; i--; )
|
|
78
|
+
if (x[i].one()) {
|
|
79
|
+
x[i]=x[--n]; c--;
|
|
80
|
+
} else if (x[i].zero()) {
|
|
81
|
+
x[i]=x[--n];
|
|
82
|
+
}
|
|
83
|
+
x.size(n);
|
|
84
|
+
GECODE_ME_CHECK(y.lq(home,n-c));
|
|
85
|
+
GECODE_ME_CHECK(y.gq(home,-c));
|
|
86
|
+
if (n == 0)
|
|
87
|
+
return ES_OK;
|
|
88
|
+
if (y.min()+c == n) {
|
|
89
|
+
assert(y.assigned());
|
|
90
|
+
for (int i = n; i--; )
|
|
91
|
+
x[i].t_one_none(home);
|
|
92
|
+
return ES_OK;
|
|
93
|
+
}
|
|
94
|
+
if (y.max()+c == 0) {
|
|
95
|
+
assert(y.assigned());
|
|
96
|
+
for (int i = n; i--; )
|
|
97
|
+
x[i].t_zero_none(home);
|
|
98
|
+
return ES_OK;
|
|
99
|
+
}
|
|
100
|
+
(void) new (home) EqBoolView<XV,YV>(home,x,y,c);
|
|
101
|
+
return ES_OK;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
template <class XV, class YV>
|
|
105
|
+
forceinline
|
|
106
|
+
EqBoolView<XV,YV>::EqBoolView(Space* home, bool share, EqBoolView<XV,YV>& p)
|
|
107
|
+
: LinBoolView<XV,YV>(home,share,p) {}
|
|
108
|
+
|
|
109
|
+
template <class XV, class YV>
|
|
110
|
+
Actor*
|
|
111
|
+
EqBoolView<XV,YV>::copy(Space* home, bool share) {
|
|
112
|
+
return new (home) EqBoolView<XV,YV>(home,share,*this);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
template <class XV, class YV>
|
|
116
|
+
ExecStatus
|
|
117
|
+
EqBoolView<XV,YV>::propagate(Space* home) {
|
|
118
|
+
int n = x.size();
|
|
119
|
+
for (int i = n; i--; )
|
|
120
|
+
if (x[i].one()) {
|
|
121
|
+
x[i]=x[--n]; c--;
|
|
122
|
+
} else if (x[i].zero()) {
|
|
123
|
+
x[i]=x[--n];
|
|
124
|
+
}
|
|
125
|
+
x.size(n);
|
|
126
|
+
GECODE_ME_CHECK(y.lq(home,n-c));
|
|
127
|
+
GECODE_ME_CHECK(y.gq(home,-c));
|
|
128
|
+
if (n == 0)
|
|
129
|
+
return ES_SUBSUMED;
|
|
130
|
+
if (y.min()+c == n) {
|
|
131
|
+
assert(y.assigned());
|
|
132
|
+
for (int i = n; i--; )
|
|
133
|
+
x[i].t_one_none(home);
|
|
134
|
+
return ES_SUBSUMED;
|
|
135
|
+
}
|
|
136
|
+
if (y.max()+c == 0) {
|
|
137
|
+
assert(y.assigned());
|
|
138
|
+
for (int i = n; i--; )
|
|
139
|
+
x[i].t_zero_none(home);
|
|
140
|
+
return ES_SUBSUMED;
|
|
141
|
+
}
|
|
142
|
+
if (y.assigned()) {
|
|
143
|
+
GECODE_ES_CHECK(EqBoolInt<XV>::post(home,x,y.val()+c));
|
|
144
|
+
return ES_SUBSUMED;
|
|
145
|
+
}
|
|
146
|
+
return ES_FIX;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
/*
|
|
151
|
+
* Disequality propagator
|
|
152
|
+
*
|
|
153
|
+
*/
|
|
154
|
+
template <class XV, class YV>
|
|
155
|
+
forceinline
|
|
156
|
+
NqBoolView<XV,YV>::NqBoolView(Space* home, ViewArray<XV>& x, YV y, int c)
|
|
157
|
+
: LinBoolView<XV,YV>(home,x,y,c) {}
|
|
158
|
+
|
|
159
|
+
template <class XV, class YV>
|
|
160
|
+
ExecStatus
|
|
161
|
+
NqBoolView<XV,YV>::post(Space* home, ViewArray<XV>& x, YV y, int c) {
|
|
162
|
+
if (y.assigned())
|
|
163
|
+
return NqBoolInt<XV>::post(home,x,y.val()+c);
|
|
164
|
+
int n = x.size();
|
|
165
|
+
for (int i = n; i--; )
|
|
166
|
+
if (x[i].one()) {
|
|
167
|
+
x[i]=x[--n]; c--;
|
|
168
|
+
} else if (x[i].zero()) {
|
|
169
|
+
x[i]=x[--n];
|
|
170
|
+
}
|
|
171
|
+
x.size(n);
|
|
172
|
+
if ((n-c < y.min() ) || (-c > y.max()))
|
|
173
|
+
return ES_OK;
|
|
174
|
+
if (n == 0) {
|
|
175
|
+
GECODE_ME_CHECK(y.nq(home,-c));
|
|
176
|
+
return ES_OK;
|
|
177
|
+
}
|
|
178
|
+
if ((n == 1) && y.assigned()) {
|
|
179
|
+
if (y.val()+c == 1) {
|
|
180
|
+
x[0].t_zero_none(home);
|
|
181
|
+
} else {
|
|
182
|
+
assert(y.val()+c == 0);
|
|
183
|
+
x[0].t_one_none(home);
|
|
184
|
+
}
|
|
185
|
+
return ES_OK;
|
|
186
|
+
}
|
|
187
|
+
(void) new (home) NqBoolView<XV,YV>(home,x,y,c);
|
|
188
|
+
return ES_OK;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
template <class XV, class YV>
|
|
193
|
+
forceinline
|
|
194
|
+
NqBoolView<XV,YV>::NqBoolView(Space* home, bool share, NqBoolView<XV,YV>& p)
|
|
195
|
+
: LinBoolView<XV,YV>(home,share,p) {}
|
|
196
|
+
|
|
197
|
+
template <class XV, class YV>
|
|
198
|
+
Actor*
|
|
199
|
+
NqBoolView<XV,YV>::copy(Space* home, bool share) {
|
|
200
|
+
return new (home) NqBoolView<XV,YV>(home,share,*this);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
template <class XV, class YV>
|
|
205
|
+
ExecStatus
|
|
206
|
+
NqBoolView<XV,YV>::propagate(Space* home) {
|
|
207
|
+
int n = x.size();
|
|
208
|
+
for (int i = n; i--; )
|
|
209
|
+
if (x[i].one()) {
|
|
210
|
+
x[i]=x[--n]; c--;
|
|
211
|
+
} else if (x[i].zero()) {
|
|
212
|
+
x[i]=x[--n];
|
|
213
|
+
}
|
|
214
|
+
x.size(n);
|
|
215
|
+
if ((n-c < y.min() ) || (-c > y.max()))
|
|
216
|
+
return ES_SUBSUMED;
|
|
217
|
+
if (n == 0) {
|
|
218
|
+
GECODE_ME_CHECK(y.nq(home,-c));
|
|
219
|
+
return ES_SUBSUMED;
|
|
220
|
+
}
|
|
221
|
+
if ((n == 1) && y.assigned()) {
|
|
222
|
+
if (y.val()+c == 1) {
|
|
223
|
+
x[0].t_zero_none(home);
|
|
224
|
+
} else {
|
|
225
|
+
assert(y.val()+c == 0);
|
|
226
|
+
x[0].t_one_none(home);
|
|
227
|
+
}
|
|
228
|
+
return ES_SUBSUMED;
|
|
229
|
+
}
|
|
230
|
+
return ES_FIX;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
/*
|
|
235
|
+
* Greater or equal propagator
|
|
236
|
+
*
|
|
237
|
+
*/
|
|
238
|
+
template <class XV, class YV>
|
|
239
|
+
forceinline
|
|
240
|
+
GqBoolView<XV,YV>::GqBoolView(Space* home, ViewArray<XV>& x, YV y, int c)
|
|
241
|
+
: LinBoolView<XV,YV>(home,x,y,c) {}
|
|
242
|
+
|
|
243
|
+
template <class XV, class YV>
|
|
244
|
+
ExecStatus
|
|
245
|
+
GqBoolView<XV,YV>::post(Space* home, ViewArray<XV>& x, YV y, int c) {
|
|
246
|
+
if (y.assigned())
|
|
247
|
+
return GqBoolInt<XV>::post(home,x,y.val()+c);
|
|
248
|
+
// Eliminate assigned views
|
|
249
|
+
int n = x.size();
|
|
250
|
+
for (int i = n; i--; )
|
|
251
|
+
if (x[i].one()) {
|
|
252
|
+
x[i]=x[--n]; c--;
|
|
253
|
+
} else if (x[i].zero()) {
|
|
254
|
+
x[i]=x[--n];
|
|
255
|
+
}
|
|
256
|
+
x.size(n);
|
|
257
|
+
GECODE_ME_CHECK(y.lq(home,n-c));
|
|
258
|
+
if (-c >= y.max())
|
|
259
|
+
return ES_OK;
|
|
260
|
+
if (y.min()+c == n) {
|
|
261
|
+
for (int i = n; i--; )
|
|
262
|
+
x[i].t_one_none(home);
|
|
263
|
+
return ES_OK;
|
|
264
|
+
}
|
|
265
|
+
(void) new (home) GqBoolView<XV,YV>(home,x,y,c);
|
|
266
|
+
return ES_OK;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
template <class XV, class YV>
|
|
271
|
+
forceinline
|
|
272
|
+
GqBoolView<XV,YV>::GqBoolView(Space* home, bool share, GqBoolView<XV,YV>& p)
|
|
273
|
+
: LinBoolView<XV,YV>(home,share,p) {}
|
|
274
|
+
|
|
275
|
+
template <class XV, class YV>
|
|
276
|
+
Actor*
|
|
277
|
+
GqBoolView<XV,YV>::copy(Space* home, bool share) {
|
|
278
|
+
return new (home) GqBoolView<XV,YV>(home,share,*this);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
template <class XV, class YV>
|
|
283
|
+
ExecStatus
|
|
284
|
+
GqBoolView<XV,YV>::propagate(Space* home) {
|
|
285
|
+
int n = x.size();
|
|
286
|
+
for (int i = n; i--; )
|
|
287
|
+
if (x[i].one()) {
|
|
288
|
+
x[i]=x[--n]; c--;
|
|
289
|
+
} else if (x[i].zero()) {
|
|
290
|
+
x[i]=x[--n];
|
|
291
|
+
}
|
|
292
|
+
x.size(n);
|
|
293
|
+
GECODE_ME_CHECK(y.lq(home,n-c));
|
|
294
|
+
if (-c >= y.max())
|
|
295
|
+
return ES_SUBSUMED;
|
|
296
|
+
if (y.min()+c == n) {
|
|
297
|
+
for (int i = n; i--; )
|
|
298
|
+
x[i].t_one_none(home);
|
|
299
|
+
return ES_SUBSUMED;
|
|
300
|
+
}
|
|
301
|
+
if (y.assigned()) {
|
|
302
|
+
GECODE_ES_CHECK(GqBoolInt<XV>::post(home,x,y.val()+c));
|
|
303
|
+
return ES_SUBSUMED;
|
|
304
|
+
}
|
|
305
|
+
return ES_FIX;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
}}}
|
|
309
|
+
|
|
310
|
+
// STATISTICS: int-prop
|
|
311
|
+
|
|
@@ -0,0 +1,503 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2006
|
|
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
|
+
#include "gecode/int/linear.hh"
|
|
23
|
+
|
|
24
|
+
#include "gecode/iter.hh"
|
|
25
|
+
|
|
26
|
+
namespace Gecode { namespace Int { namespace Linear {
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* \brief Set for support information
|
|
30
|
+
*
|
|
31
|
+
* Records supported positions of values such that with iteration
|
|
32
|
+
* the supported values can be reconstructed.
|
|
33
|
+
*
|
|
34
|
+
*/
|
|
35
|
+
class SupportSet {
|
|
36
|
+
private:
|
|
37
|
+
/// Number of bits per unsigned integer
|
|
38
|
+
static const unsigned int bpui = sizeof(unsigned int) * 8;
|
|
39
|
+
/// Array of bits
|
|
40
|
+
unsigned int* bits;
|
|
41
|
+
public:
|
|
42
|
+
/// Initialize support set with cardinality \arg n
|
|
43
|
+
void init(unsigned int n);
|
|
44
|
+
/// Record that there is support at position \arg i
|
|
45
|
+
void support(unsigned int i);
|
|
46
|
+
/// Check whether position \arg i has support
|
|
47
|
+
bool supported(unsigned int i) const;
|
|
48
|
+
|
|
49
|
+
private:
|
|
50
|
+
/// Support-based iterator
|
|
51
|
+
class ResultIter : public ViewValues<IntView> {
|
|
52
|
+
protected:
|
|
53
|
+
/// The support set used
|
|
54
|
+
const SupportSet* s;
|
|
55
|
+
/// The current position of the value
|
|
56
|
+
unsigned int p;
|
|
57
|
+
public:
|
|
58
|
+
/// Initialize iterator
|
|
59
|
+
ResultIter(const SupportSet* s0, const IntView& x);
|
|
60
|
+
/// Increment to next supported value
|
|
61
|
+
void operator++(void);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
public:
|
|
65
|
+
/// Perform tell according to recorded support information on \arg x
|
|
66
|
+
ModEvent tell(Space* home, IntView& x) const;
|
|
67
|
+
/// Release memory
|
|
68
|
+
void dispose(void);
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* \brief Base-class for support-based iterator
|
|
73
|
+
*
|
|
74
|
+
*/
|
|
75
|
+
template <class Val>
|
|
76
|
+
class SupportIter {
|
|
77
|
+
protected:
|
|
78
|
+
/// Integer coefficient for view
|
|
79
|
+
int a;
|
|
80
|
+
/// Integer view
|
|
81
|
+
IntView x;
|
|
82
|
+
/// Set of support for values in x
|
|
83
|
+
SupportSet s;
|
|
84
|
+
/// Current value
|
|
85
|
+
int c;
|
|
86
|
+
/// Position of current value
|
|
87
|
+
unsigned int p;
|
|
88
|
+
/// Lower bound information for value
|
|
89
|
+
Val l;
|
|
90
|
+
/// Upper bound information for value
|
|
91
|
+
Val u;
|
|
92
|
+
public:
|
|
93
|
+
/// Initialize view
|
|
94
|
+
void init(int a, const IntView& x, Val l, Val u);
|
|
95
|
+
/// Record value at current position as supported
|
|
96
|
+
void support(void);
|
|
97
|
+
/// Tell back new variable domain according to support found
|
|
98
|
+
ModEvent tell(Space* home);
|
|
99
|
+
/// Finalize memory for support set
|
|
100
|
+
void dispose(void);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* \brief Support-based iterator for positive view
|
|
106
|
+
*
|
|
107
|
+
*/
|
|
108
|
+
template <class Val>
|
|
109
|
+
class PosSupportIter : public SupportIter<Val> {
|
|
110
|
+
private:
|
|
111
|
+
/// Iterate ranges of integer view in increasing order
|
|
112
|
+
IntVarImpFwd i;
|
|
113
|
+
// Using-declarations for dependant names
|
|
114
|
+
using SupportIter<Val>::a;
|
|
115
|
+
using SupportIter<Val>::x;
|
|
116
|
+
using SupportIter<Val>::s;
|
|
117
|
+
using SupportIter<Val>::c;
|
|
118
|
+
using SupportIter<Val>::p;
|
|
119
|
+
using SupportIter<Val>::l;
|
|
120
|
+
using SupportIter<Val>::u;
|
|
121
|
+
public:
|
|
122
|
+
/// Reset iterator to beginning and adjust \arg d accordingly
|
|
123
|
+
bool reset(Val& d);
|
|
124
|
+
/// Adjust \arg d and return true if next value still works
|
|
125
|
+
bool adjust(Val& d);
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* \brief Support-based iterator for negative view
|
|
131
|
+
*
|
|
132
|
+
*/
|
|
133
|
+
template <class Val>
|
|
134
|
+
class NegSupportIter : public SupportIter<Val> {
|
|
135
|
+
private:
|
|
136
|
+
/// Iterate ranges of integer view in decreasing order
|
|
137
|
+
IntVarImpBwd i;
|
|
138
|
+
// Using-declarations for dependant names
|
|
139
|
+
using SupportIter<Val>::a;
|
|
140
|
+
using SupportIter<Val>::x;
|
|
141
|
+
using SupportIter<Val>::s;
|
|
142
|
+
using SupportIter<Val>::c;
|
|
143
|
+
using SupportIter<Val>::p;
|
|
144
|
+
using SupportIter<Val>::l;
|
|
145
|
+
using SupportIter<Val>::u;
|
|
146
|
+
public:
|
|
147
|
+
/// Reset iterator to beginning and adjust \arg d accordingly
|
|
148
|
+
bool reset(Val& d);
|
|
149
|
+
/// Adjust \arg d and return true if next value still works
|
|
150
|
+
bool adjust(Val& d);
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
/*
|
|
155
|
+
* Support set
|
|
156
|
+
*
|
|
157
|
+
*/
|
|
158
|
+
forceinline void
|
|
159
|
+
SupportSet::init(unsigned int n) {
|
|
160
|
+
bits = Memory::bmalloc<unsigned int>((n / bpui) + 1);
|
|
161
|
+
for (unsigned int i = (n / bpui) + 1; i--; )
|
|
162
|
+
bits[i] = 0;
|
|
163
|
+
}
|
|
164
|
+
forceinline void
|
|
165
|
+
SupportSet::support(unsigned int i) {
|
|
166
|
+
unsigned int p = i / bpui;
|
|
167
|
+
bits[p] |= 1 << (i-p*bpui);
|
|
168
|
+
}
|
|
169
|
+
forceinline bool
|
|
170
|
+
SupportSet::supported(unsigned int i) const {
|
|
171
|
+
unsigned int p = i / bpui;
|
|
172
|
+
return (bits[p] & (1 << (i-p*bpui))) != 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
forceinline
|
|
176
|
+
SupportSet::ResultIter::ResultIter(const SupportSet* s0, const IntView& x)
|
|
177
|
+
: ViewValues<IntView>(x), s(s0), p(0) {
|
|
178
|
+
while (ViewValues<IntView>::operator()() && !s->supported(p)) {
|
|
179
|
+
ViewValues<IntView>::operator++(); ++p;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
forceinline void
|
|
183
|
+
SupportSet::ResultIter::operator++(void) {
|
|
184
|
+
do {
|
|
185
|
+
ViewValues<IntView>::operator++(); ++p;
|
|
186
|
+
} while (ViewValues<IntView>::operator()() && !s->supported(p));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
inline ModEvent
|
|
191
|
+
SupportSet::tell(Space* home, IntView& x) const {
|
|
192
|
+
unsigned int n = x.size() / bpui;
|
|
193
|
+
// Check whether all bits are zero: failure
|
|
194
|
+
for (unsigned int i=n+1; i--; )
|
|
195
|
+
if (bits[i] != 0)
|
|
196
|
+
goto all;
|
|
197
|
+
return ME_INT_FAILED;
|
|
198
|
+
all:
|
|
199
|
+
// Check whether all bits are one: nothing changed
|
|
200
|
+
for (unsigned int i=n; i--; )
|
|
201
|
+
if (bits[i] != ~0U)
|
|
202
|
+
goto tell;
|
|
203
|
+
// Now check the bits in the last word
|
|
204
|
+
for (unsigned int i=n*bpui; i<x.size(); i++)
|
|
205
|
+
if (!supported(i))
|
|
206
|
+
goto tell;
|
|
207
|
+
return ME_INT_NONE;
|
|
208
|
+
tell:
|
|
209
|
+
{
|
|
210
|
+
ResultIter i(this,x);
|
|
211
|
+
Iter::Values::ToRanges<ResultIter> r(i);
|
|
212
|
+
return x.narrow(home,r);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
forceinline void
|
|
217
|
+
SupportSet::dispose(void) {
|
|
218
|
+
Memory::free(bits);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
/*
|
|
223
|
+
* Base-class for support-based iterator
|
|
224
|
+
*
|
|
225
|
+
*/
|
|
226
|
+
template <class Val>
|
|
227
|
+
forceinline void
|
|
228
|
+
SupportIter<Val>::init(int a0, const IntView& x0, Val l0, Val u0) {
|
|
229
|
+
a=a0; x=x0; l=l0; u=u0;
|
|
230
|
+
s.init(x.size());
|
|
231
|
+
}
|
|
232
|
+
template <class Val>
|
|
233
|
+
forceinline void
|
|
234
|
+
SupportIter<Val>::support(void) {
|
|
235
|
+
s.support(p);
|
|
236
|
+
}
|
|
237
|
+
template <class Val>
|
|
238
|
+
forceinline ModEvent
|
|
239
|
+
SupportIter<Val>::tell(Space* home) {
|
|
240
|
+
return s.tell(home,x);
|
|
241
|
+
}
|
|
242
|
+
template <class Val>
|
|
243
|
+
forceinline void
|
|
244
|
+
SupportIter<Val>::dispose(void) {
|
|
245
|
+
s.dispose();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
/*
|
|
250
|
+
* Support-based iterator for positive view
|
|
251
|
+
*
|
|
252
|
+
*/
|
|
253
|
+
template <class Val>
|
|
254
|
+
forceinline bool
|
|
255
|
+
PosSupportIter<Val>::reset(Val& d) {
|
|
256
|
+
// Way too small, no value can make it big enough
|
|
257
|
+
if (d + static_cast<Val>(a)*x.max() < u)
|
|
258
|
+
return false;
|
|
259
|
+
// Restart iterator and position of values
|
|
260
|
+
i.init(x.variable()); p = 0;
|
|
261
|
+
// Skip all ranges which are too small
|
|
262
|
+
while (d + static_cast<Val>(a)*i.max() < u) {
|
|
263
|
+
p += i.width(); ++i;
|
|
264
|
+
}
|
|
265
|
+
// There is at least one range left (check of max)
|
|
266
|
+
assert(i());
|
|
267
|
+
// Initialize current range and adjust value
|
|
268
|
+
c = i.min();
|
|
269
|
+
// Skip all values which are too small
|
|
270
|
+
while (d + static_cast<Val>(a)*c < u) {
|
|
271
|
+
p++; c++;
|
|
272
|
+
}
|
|
273
|
+
// Adjust to new value
|
|
274
|
+
d += static_cast<Val>(a) * c;
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
template <class Val>
|
|
278
|
+
forceinline bool
|
|
279
|
+
PosSupportIter<Val>::adjust(Val& d) {
|
|
280
|
+
// Current value
|
|
281
|
+
Val v = static_cast<Val>(a) * c;
|
|
282
|
+
// Subtract current value from d
|
|
283
|
+
d -= v;
|
|
284
|
+
// Move to next position (number of value)
|
|
285
|
+
p++;
|
|
286
|
+
// Still in the same range
|
|
287
|
+
if (c < i.max()) {
|
|
288
|
+
// Decrement current values
|
|
289
|
+
c += 1; v += a;
|
|
290
|
+
} else {
|
|
291
|
+
// Go to next range
|
|
292
|
+
++i;
|
|
293
|
+
if (!i())
|
|
294
|
+
return false;
|
|
295
|
+
c = i.min(); v = static_cast<Val>(a) * c;
|
|
296
|
+
}
|
|
297
|
+
// Is d with the current value too large?
|
|
298
|
+
if (d + v > l)
|
|
299
|
+
return false;
|
|
300
|
+
// Update d
|
|
301
|
+
d += v;
|
|
302
|
+
return true;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
/*
|
|
307
|
+
* Support-based iterator for negative view
|
|
308
|
+
*
|
|
309
|
+
*/
|
|
310
|
+
template <class Val>
|
|
311
|
+
forceinline bool
|
|
312
|
+
NegSupportIter<Val>::reset(Val& d) {
|
|
313
|
+
// Way too small, no value can make it big enough
|
|
314
|
+
if (d + static_cast<Val>(a)*x.min() < u)
|
|
315
|
+
return false;
|
|
316
|
+
// Restart iterator and position of values
|
|
317
|
+
i.init(x.variable()); p = x.size()-1;
|
|
318
|
+
// Skip all ranges which are too small
|
|
319
|
+
while (d + static_cast<Val>(a)*i.min() < u) {
|
|
320
|
+
p -= i.width(); ++i;
|
|
321
|
+
}
|
|
322
|
+
// There is at least one range left (check of max)
|
|
323
|
+
assert(i());
|
|
324
|
+
// Initialize current range
|
|
325
|
+
c = i.max();
|
|
326
|
+
// Skip all values which are too small
|
|
327
|
+
while (d + static_cast<Val>(a)*c < u) {
|
|
328
|
+
p--; c--;
|
|
329
|
+
}
|
|
330
|
+
// Adjust to new value
|
|
331
|
+
d += static_cast<Val>(a) * c;
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
template <class Val>
|
|
335
|
+
forceinline bool
|
|
336
|
+
NegSupportIter<Val>::adjust(Val& d) {
|
|
337
|
+
// Current value
|
|
338
|
+
Val v = static_cast<Val>(a) * c;
|
|
339
|
+
// Subtract current value from d
|
|
340
|
+
d -= v;
|
|
341
|
+
// Move to next position (number of value)
|
|
342
|
+
p--;
|
|
343
|
+
// Still in the same range
|
|
344
|
+
if (c > i.min()) {
|
|
345
|
+
// Decrement current values
|
|
346
|
+
c -= 1; v -= a;
|
|
347
|
+
} else {
|
|
348
|
+
// Go to next range
|
|
349
|
+
++i;
|
|
350
|
+
if (!i())
|
|
351
|
+
return false;
|
|
352
|
+
c = i.max(); v = static_cast<Val>(a) * c;
|
|
353
|
+
}
|
|
354
|
+
// Is d with the current value too large?
|
|
355
|
+
if (d + v > l)
|
|
356
|
+
return false;
|
|
357
|
+
// Update d
|
|
358
|
+
d += v;
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
|
|
364
|
+
/*
|
|
365
|
+
* The domain-consisten equality propagator
|
|
366
|
+
*
|
|
367
|
+
*/
|
|
368
|
+
template <class Val, class View>
|
|
369
|
+
forceinline
|
|
370
|
+
DomEq<Val,View>::DomEq(Space* home,
|
|
371
|
+
ViewArray<View >& x, ViewArray<View >& y,
|
|
372
|
+
Val c)
|
|
373
|
+
: Lin<Val,View,View,PC_INT_DOM>(home,x,y,c) {}
|
|
374
|
+
|
|
375
|
+
template <class Val, class View>
|
|
376
|
+
ExecStatus
|
|
377
|
+
DomEq<Val,View>::post(Space* home,
|
|
378
|
+
ViewArray<View>& x, ViewArray<View>& y,
|
|
379
|
+
Val c) {
|
|
380
|
+
(void) new (home) DomEq<Val,View>(home,x,y,c);
|
|
381
|
+
return ES_OK;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
template <class Val, class View>
|
|
385
|
+
forceinline
|
|
386
|
+
DomEq<Val,View>::DomEq(Space* home, bool share, DomEq<Val,View>& p)
|
|
387
|
+
: Lin<Val,View,View,PC_INT_DOM>(home,share,p) {}
|
|
388
|
+
|
|
389
|
+
template <class Val, class View>
|
|
390
|
+
Actor*
|
|
391
|
+
DomEq<Val,View>::copy(Space* home, bool share) {
|
|
392
|
+
return new (home) DomEq<Val,View>(home,share,*this);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
template <class Val, class View>
|
|
396
|
+
PropCost
|
|
397
|
+
DomEq<Val,View>::cost(void) const {
|
|
398
|
+
return (View::pme(this) != ME_INT_DOM)
|
|
399
|
+
? cost_hi(x.size()+y.size(),PC_LINEAR_LO)
|
|
400
|
+
: cost_hi(x.size()+y.size(),PC_CRAZY_HI);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
template <class Val, class View>
|
|
404
|
+
ExecStatus
|
|
405
|
+
DomEq<Val,View>::propagate(Space* home) {
|
|
406
|
+
if (View::pme(this) != ME_INT_DOM) {
|
|
407
|
+
ExecStatus es = prop_bnd<Val,View,View>(this,home,x,y,c);
|
|
408
|
+
if ((es == ES_SUBSUMED) || (es == ES_FAILED))
|
|
409
|
+
return es;
|
|
410
|
+
return ES_FIX_PARTIAL(View::pme(ME_INT_DOM));
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Value of equation for partial assignment
|
|
414
|
+
Val d = -c;
|
|
415
|
+
|
|
416
|
+
int n = x.size();
|
|
417
|
+
int m = y.size();
|
|
418
|
+
|
|
419
|
+
// Create support-base iterators
|
|
420
|
+
GECODE_AUTOARRAY(PosSupportIter<Val>, xp, n);
|
|
421
|
+
GECODE_AUTOARRAY(NegSupportIter<Val>, yp, m);
|
|
422
|
+
|
|
423
|
+
// Initialize views for assignments
|
|
424
|
+
{
|
|
425
|
+
Val l = 0;
|
|
426
|
+
Val u = 0;
|
|
427
|
+
for (int j=m; j--; ) {
|
|
428
|
+
yp[j].init(-y[j].scale(),y[j].base(),l,u);
|
|
429
|
+
l += y[j].max(); u += y[j].min();
|
|
430
|
+
}
|
|
431
|
+
for (int i=n; i--; ) {
|
|
432
|
+
xp[i].init(x[i].scale(),x[i].base(),l,u);
|
|
433
|
+
l -= x[i].min(); u -= x[i].max();
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Collect support information by iterating assignments
|
|
438
|
+
{
|
|
439
|
+
// Force reset of all iterators in first round
|
|
440
|
+
int i = 0;
|
|
441
|
+
int j = 0;
|
|
442
|
+
|
|
443
|
+
next_i:
|
|
444
|
+
// Reset all iterators for positive views and update d
|
|
445
|
+
while (i<n) {
|
|
446
|
+
if (!xp[i].reset(d)) goto prev_i;
|
|
447
|
+
i++;
|
|
448
|
+
}
|
|
449
|
+
next_j:
|
|
450
|
+
// Reset all iterators for negative views and update d
|
|
451
|
+
while (j<m) {
|
|
452
|
+
if (!yp[j].reset(d)) goto prev_j;
|
|
453
|
+
j++;
|
|
454
|
+
}
|
|
455
|
+
// Check whether current assignment is solution
|
|
456
|
+
if (d == 0) {
|
|
457
|
+
// Record support
|
|
458
|
+
for (int is=n; is--; ) xp[is].support();
|
|
459
|
+
for (int js=m; js--; ) yp[js].support();
|
|
460
|
+
}
|
|
461
|
+
prev_j:
|
|
462
|
+
// Try iterating to next assignment: negative views
|
|
463
|
+
while (j>0) {
|
|
464
|
+
if (yp[j-1].adjust(d)) goto next_j;
|
|
465
|
+
j--;
|
|
466
|
+
}
|
|
467
|
+
prev_i:
|
|
468
|
+
// Try iterating to next assignment: positive views
|
|
469
|
+
while (i>0) {
|
|
470
|
+
if (xp[i-1].adjust(d)) goto next_i;
|
|
471
|
+
i--;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
// Tell back new variable domains
|
|
476
|
+
ExecStatus es = ES_SUBSUMED;
|
|
477
|
+
for (int i=n; i--; ) {
|
|
478
|
+
ModEvent me = xp[i].tell(home);
|
|
479
|
+
if (me_failed(me)) {
|
|
480
|
+
es = ES_FAILED; goto dispose;
|
|
481
|
+
}
|
|
482
|
+
if (!x[i].assigned())
|
|
483
|
+
es = ES_FIX;
|
|
484
|
+
}
|
|
485
|
+
for (int j=m; j--; ) {
|
|
486
|
+
ModEvent me = yp[j].tell(home);
|
|
487
|
+
if (me_failed(me)) {
|
|
488
|
+
es = ES_FAILED; goto dispose;
|
|
489
|
+
}
|
|
490
|
+
if (!y[j].assigned())
|
|
491
|
+
es = ES_FIX;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
// Release memory
|
|
495
|
+
dispose:
|
|
496
|
+
for (int i=n; i--; ) xp[i].dispose();
|
|
497
|
+
for (int j=m; j--; ) yp[j].dispose();
|
|
498
|
+
return es;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
}}}
|
|
502
|
+
|
|
503
|
+
// STATISTICS: int-prop
|