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,401 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
* Guido Tack <tack@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Christian Schulte, 2002
|
|
8
|
+
* Guido Tack, 2004
|
|
9
|
+
*
|
|
10
|
+
* Last modified:
|
|
11
|
+
* $Date: 2006-09-19 16:52:16 +0200 (Tue, 19 Sep 2006) $ by $Author: schulte $
|
|
12
|
+
* $Revision: 3684 $
|
|
13
|
+
*
|
|
14
|
+
* This file is part of Gecode, the generic constraint
|
|
15
|
+
* development environment:
|
|
16
|
+
* http://www.gecode.org
|
|
17
|
+
*
|
|
18
|
+
* See the file "LICENSE" for information on usage and
|
|
19
|
+
* redistribution of this file, and for a
|
|
20
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#ifndef __GECODE_INT_COUNT_HH__
|
|
25
|
+
#define __GECODE_INT_COUNT_HH__
|
|
26
|
+
|
|
27
|
+
#include "gecode/int.hh"
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* \namespace Gecode::Int::Count
|
|
31
|
+
* \brief Counting propagators
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
namespace Gecode { namespace Int { namespace Count {
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Relations for domain-consistent counting
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
//@{
|
|
41
|
+
/// Test whether \a x and \a y are equal
|
|
42
|
+
template <class VX>
|
|
43
|
+
RelTest holds(VX x, VX y);
|
|
44
|
+
/// Test whether \a x and \a y are equal
|
|
45
|
+
template <class VX>
|
|
46
|
+
RelTest holds(VX x, ConstIntView y);
|
|
47
|
+
/// Post that all views in \a x are equal to \a y
|
|
48
|
+
template <class VX>
|
|
49
|
+
ExecStatus post_true(Space* home, ViewArray<VX>& x, VX y);
|
|
50
|
+
/// Post that all views in \a x are equal to \a y
|
|
51
|
+
template <class VX>
|
|
52
|
+
ExecStatus post_true(Space* home, ViewArray<VX>& x, ConstIntView y);
|
|
53
|
+
/// Post that all views in \a x are not equal to \a y
|
|
54
|
+
template <class VX>
|
|
55
|
+
ExecStatus post_false(Space* home, ViewArray<VX>& x, VX y);
|
|
56
|
+
/// Post that all views in \a x are not equal to \a y
|
|
57
|
+
template <class VX>
|
|
58
|
+
ExecStatus post_false(Space* home, ViewArray<VX>& x, ConstIntView y);
|
|
59
|
+
//@}
|
|
60
|
+
|
|
61
|
+
}}}
|
|
62
|
+
|
|
63
|
+
#include "gecode/int/count/rel.icc"
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
namespace Gecode { namespace Int { namespace Count {
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* \brief Baseclass for count propagators (integer)
|
|
70
|
+
*
|
|
71
|
+
*/
|
|
72
|
+
template <class VX, class VY>
|
|
73
|
+
class BaseInt : public Propagator {
|
|
74
|
+
protected:
|
|
75
|
+
/// Views still to count
|
|
76
|
+
ViewArray<VX> x;
|
|
77
|
+
/// Views from x[0] ... x[n_s-1] have subscriptions
|
|
78
|
+
int n_s;
|
|
79
|
+
/// View to compare to
|
|
80
|
+
VY y;
|
|
81
|
+
/// Number of views which are equal and have been eliminated
|
|
82
|
+
int c;
|
|
83
|
+
/// Constructor for cloning \a p
|
|
84
|
+
BaseInt(Space* home, bool share, BaseInt& p);
|
|
85
|
+
/// Constructor for creation
|
|
86
|
+
BaseInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
|
|
87
|
+
public:
|
|
88
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
|
89
|
+
virtual PropCost cost(void) const;
|
|
90
|
+
/// Delete propagator and return its size
|
|
91
|
+
virtual size_t dispose(Space* home);
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* \brief %Propagator for counting views (equal integer to number of equal views)
|
|
96
|
+
*
|
|
97
|
+
* Not all combinations of views are possible. The types \a VX
|
|
98
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
99
|
+
*
|
|
100
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
101
|
+
* \ingroup FuncIntProp
|
|
102
|
+
*/
|
|
103
|
+
template <class VX, class VY>
|
|
104
|
+
class EqInt : public BaseInt<VX,VY> {
|
|
105
|
+
protected:
|
|
106
|
+
using BaseInt<VX,VY>::x;
|
|
107
|
+
using BaseInt<VX,VY>::n_s;
|
|
108
|
+
using BaseInt<VX,VY>::y;
|
|
109
|
+
using BaseInt<VX,VY>::c;
|
|
110
|
+
/// Constructor for cloning \a p
|
|
111
|
+
EqInt(Space* home, bool share, EqInt& p);
|
|
112
|
+
/// Constructor for creation
|
|
113
|
+
EqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
|
|
114
|
+
public:
|
|
115
|
+
/// Create copy during cloning
|
|
116
|
+
virtual Actor* copy(Space* home, bool share);
|
|
117
|
+
/// Perform propagation
|
|
118
|
+
virtual ExecStatus propagate(Space* home);
|
|
119
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}=c\f$
|
|
120
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* \brief %Propagator for counting views (greater or equal integer to number of equal views)
|
|
125
|
+
*
|
|
126
|
+
* Not all combinations of views are possible. The types \a VX
|
|
127
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
128
|
+
*
|
|
129
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
130
|
+
* \ingroup FuncIntProp
|
|
131
|
+
*/
|
|
132
|
+
template <class VX, class VY>
|
|
133
|
+
class GqInt : public BaseInt<VX,VY> {
|
|
134
|
+
protected:
|
|
135
|
+
using BaseInt<VX,VY>::x;
|
|
136
|
+
using BaseInt<VX,VY>::n_s;
|
|
137
|
+
using BaseInt<VX,VY>::y;
|
|
138
|
+
using BaseInt<VX,VY>::c;
|
|
139
|
+
/// Constructor for cloning \a p
|
|
140
|
+
GqInt(Space* home, bool share, GqInt& p);
|
|
141
|
+
/// Constructor for creation
|
|
142
|
+
GqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
|
|
143
|
+
public:
|
|
144
|
+
/// Create copy during cloning
|
|
145
|
+
virtual Actor* copy(Space* home, bool share);
|
|
146
|
+
/// Perform propagation
|
|
147
|
+
virtual ExecStatus propagate(Space* home);
|
|
148
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\geq c\f$
|
|
149
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* \brief %Propagator for counting views (less or equal integer to number of equal views)
|
|
154
|
+
*
|
|
155
|
+
* Not all combinations of views are possible. The types \a VX
|
|
156
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
157
|
+
*
|
|
158
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
159
|
+
* \ingroup FuncIntProp
|
|
160
|
+
*/
|
|
161
|
+
template <class VX, class VY>
|
|
162
|
+
class LqInt : public BaseInt<VX,VY> {
|
|
163
|
+
protected:
|
|
164
|
+
using BaseInt<VX,VY>::x;
|
|
165
|
+
using BaseInt<VX,VY>::n_s;
|
|
166
|
+
using BaseInt<VX,VY>::y;
|
|
167
|
+
using BaseInt<VX,VY>::c;
|
|
168
|
+
/// Constructor for cloning \a p
|
|
169
|
+
LqInt(Space* home, bool share, LqInt& p);
|
|
170
|
+
/// Constructor for creation
|
|
171
|
+
LqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c);
|
|
172
|
+
public:
|
|
173
|
+
/// Create copy during cloning
|
|
174
|
+
virtual Actor* copy(Space* home, bool share);
|
|
175
|
+
/// Perform propagation
|
|
176
|
+
virtual ExecStatus propagate(Space* home);
|
|
177
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\geq c\f$
|
|
178
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* \brief %Propagator for counting views (not equal integer to number of equal views)
|
|
183
|
+
*
|
|
184
|
+
* Not all combinations of views are possible. The types \a VX
|
|
185
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
186
|
+
*
|
|
187
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
188
|
+
* \ingroup FuncIntProp
|
|
189
|
+
*/
|
|
190
|
+
template<class VX, class VY>
|
|
191
|
+
class NqInt : public BinaryPropagator<VX,PC_INT_DOM> {
|
|
192
|
+
protected:
|
|
193
|
+
using BinaryPropagator<VX,PC_INT_DOM>::x0;
|
|
194
|
+
using BinaryPropagator<VX,PC_INT_DOM>::x1;
|
|
195
|
+
/// Views not yet subscribed to
|
|
196
|
+
ViewArray<VX> x;
|
|
197
|
+
/// View to compare with
|
|
198
|
+
VY y;
|
|
199
|
+
/// Righthandside
|
|
200
|
+
int c;
|
|
201
|
+
/// Update subscription
|
|
202
|
+
bool resubscribe(Space* home, VX& z);
|
|
203
|
+
/// Constructor for posting
|
|
204
|
+
NqInt(Space* home, ViewArray<VX>& x, VY y, int c);
|
|
205
|
+
/// Constructor for cloning \a p
|
|
206
|
+
NqInt(Space* home, bool share, NqInt& p);
|
|
207
|
+
public:
|
|
208
|
+
/// Copy propagator during cloning
|
|
209
|
+
virtual Actor* copy(Space* home, bool share);
|
|
210
|
+
/// Cost function (defined as PC_LINEAR_LO)
|
|
211
|
+
virtual PropCost cost(void) const;
|
|
212
|
+
/// Perform propagation
|
|
213
|
+
virtual ExecStatus propagate(Space* home);
|
|
214
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\neq c\f$
|
|
215
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, int c);
|
|
216
|
+
/// Delete propagator and return its size
|
|
217
|
+
virtual size_t dispose(Space* home);
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
}}}
|
|
221
|
+
|
|
222
|
+
#include "gecode/int/count/int.icc"
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
namespace Gecode { namespace Int { namespace Count {
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* \brief Base-class for count propagators (view)
|
|
229
|
+
*
|
|
230
|
+
*/
|
|
231
|
+
template <class VX, class VY, class VZ, bool shr>
|
|
232
|
+
class BaseView : public Propagator {
|
|
233
|
+
protected:
|
|
234
|
+
/// Views still to count
|
|
235
|
+
ViewArray<VX> x;
|
|
236
|
+
/// View to compare to
|
|
237
|
+
VY y;
|
|
238
|
+
/// View which yields result of counting
|
|
239
|
+
VZ z;
|
|
240
|
+
/// Number of views which are equal and have been eliminated
|
|
241
|
+
int c;
|
|
242
|
+
/// Constructor for cloning \a p
|
|
243
|
+
BaseView(Space* home, bool shr, BaseView& p);
|
|
244
|
+
/// Constructor for creation
|
|
245
|
+
BaseView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
246
|
+
public:
|
|
247
|
+
/// Delete propagator and return its size
|
|
248
|
+
virtual size_t dispose(Space* home);
|
|
249
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
|
250
|
+
virtual PropCost cost(void) const;
|
|
251
|
+
protected:
|
|
252
|
+
/// Count how many views are equal now
|
|
253
|
+
void count(Space* home);
|
|
254
|
+
/// How many views are at least equal
|
|
255
|
+
int atleast(void) const;
|
|
256
|
+
/// How many views are at most equal
|
|
257
|
+
int atmost(void) const;
|
|
258
|
+
/// Test whether there is sharing of \a z with \a x or \a y
|
|
259
|
+
static bool sharing(const ViewArray<VX>& x, const VY& y, const VZ& z);
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* \brief %Propagator for counting views (equal to number of equal views)
|
|
264
|
+
*
|
|
265
|
+
* Not all combinations of views are possible. The types \a VX
|
|
266
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
267
|
+
*
|
|
268
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
269
|
+
* \ingroup FuncIntProp
|
|
270
|
+
*/
|
|
271
|
+
template <class VX, class VY, class VZ, bool shr>
|
|
272
|
+
class EqView : public BaseView<VX,VY,VZ,shr> {
|
|
273
|
+
protected:
|
|
274
|
+
using BaseView<VX,VY,VZ,shr>::x;
|
|
275
|
+
using BaseView<VX,VY,VZ,shr>::z;
|
|
276
|
+
using BaseView<VX,VY,VZ,shr>::c;
|
|
277
|
+
using BaseView<VX,VY,VZ,shr>::y;
|
|
278
|
+
using BaseView<VX,VY,VZ,shr>::count;
|
|
279
|
+
using BaseView<VX,VY,VZ,shr>::atleast;
|
|
280
|
+
using BaseView<VX,VY,VZ,shr>::atmost;
|
|
281
|
+
|
|
282
|
+
/// Constructor for cloning \a p
|
|
283
|
+
EqView(Space* home, bool shr, EqView& p);
|
|
284
|
+
public:
|
|
285
|
+
/// Constructor for creation
|
|
286
|
+
EqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
287
|
+
/// Create copy during cloning
|
|
288
|
+
virtual Actor* copy(Space* home, bool shr);
|
|
289
|
+
/// Perform propagation
|
|
290
|
+
virtual ExecStatus propagate(Space* home);
|
|
291
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}=z+c\f$
|
|
292
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
/**
|
|
296
|
+
* \brief %Propagator for counting views (different from number of equal views)
|
|
297
|
+
*
|
|
298
|
+
* Not all combinations of views are possible. The types \a VX
|
|
299
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
300
|
+
*
|
|
301
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
302
|
+
* \ingroup FuncIntProp
|
|
303
|
+
*/
|
|
304
|
+
template <class VX, class VY, class VZ, bool shr>
|
|
305
|
+
class NqView : public BaseView<VX,VY,VZ,shr> {
|
|
306
|
+
protected:
|
|
307
|
+
using BaseView<VX,VY,VZ,shr>::x;
|
|
308
|
+
using BaseView<VX,VY,VZ,shr>::z;
|
|
309
|
+
using BaseView<VX,VY,VZ,shr>::c;
|
|
310
|
+
using BaseView<VX,VY,VZ,shr>::y;
|
|
311
|
+
using BaseView<VX,VY,VZ,shr>::count;
|
|
312
|
+
using BaseView<VX,VY,VZ,shr>::atleast;
|
|
313
|
+
using BaseView<VX,VY,VZ,shr>::atmost;
|
|
314
|
+
|
|
315
|
+
/// Constructor for cloning \a p
|
|
316
|
+
NqView(Space* home, bool shr, NqView& p);
|
|
317
|
+
public:
|
|
318
|
+
/// Constructor for creation
|
|
319
|
+
NqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
320
|
+
/// Create copy during cloning
|
|
321
|
+
virtual Actor* copy(Space* home, bool shr);
|
|
322
|
+
/// Perform propagation
|
|
323
|
+
virtual ExecStatus propagate(Space* home);
|
|
324
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\neq z+c\f$
|
|
325
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
326
|
+
};
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* \brief %Propagator for counting views (less or equal to number of equal views)
|
|
330
|
+
*
|
|
331
|
+
* Not all combinations of views are possible. The types \a VX
|
|
332
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
333
|
+
*
|
|
334
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
335
|
+
* \ingroup FuncIntProp
|
|
336
|
+
*/
|
|
337
|
+
template <class VX, class VY, class VZ, bool shr>
|
|
338
|
+
class LqView : public BaseView<VX,VY,VZ,shr> {
|
|
339
|
+
protected:
|
|
340
|
+
using BaseView<VX,VY,VZ,shr>::x;
|
|
341
|
+
using BaseView<VX,VY,VZ,shr>::z;
|
|
342
|
+
using BaseView<VX,VY,VZ,shr>::c;
|
|
343
|
+
using BaseView<VX,VY,VZ,shr>::y;
|
|
344
|
+
using BaseView<VX,VY,VZ,shr>::count;
|
|
345
|
+
using BaseView<VX,VY,VZ,shr>::atleast;
|
|
346
|
+
using BaseView<VX,VY,VZ,shr>::atmost;
|
|
347
|
+
|
|
348
|
+
/// Constructor for cloning \a p
|
|
349
|
+
LqView(Space* home, bool shr, LqView& p);
|
|
350
|
+
public:
|
|
351
|
+
/// Constructor for creation
|
|
352
|
+
LqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
353
|
+
/// Create copy during cloning
|
|
354
|
+
virtual Actor* copy(Space* home, bool shr);
|
|
355
|
+
/// Perform propagation
|
|
356
|
+
virtual ExecStatus propagate(Space* home);
|
|
357
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\leq z+c\f$
|
|
358
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* \brief %Propagator for counting views (greater or equal to number of equal views)
|
|
363
|
+
*
|
|
364
|
+
* Not all combinations of views are possible. The types \a VX
|
|
365
|
+
* and \a VY must be either equal, or \a VY must be ConstIntView.
|
|
366
|
+
*
|
|
367
|
+
* Requires \code #include "gecode/int/count.hh" \endcode
|
|
368
|
+
* \ingroup FuncIntProp
|
|
369
|
+
*/
|
|
370
|
+
template <class VX, class VY, class VZ, bool shr>
|
|
371
|
+
class GqView : public BaseView<VX,VY,VZ,shr> {
|
|
372
|
+
protected:
|
|
373
|
+
using BaseView<VX,VY,VZ,shr>::x;
|
|
374
|
+
using BaseView<VX,VY,VZ,shr>::z;
|
|
375
|
+
using BaseView<VX,VY,VZ,shr>::c;
|
|
376
|
+
using BaseView<VX,VY,VZ,shr>::y;
|
|
377
|
+
using BaseView<VX,VY,VZ,shr>::count;
|
|
378
|
+
using BaseView<VX,VY,VZ,shr>::atleast;
|
|
379
|
+
using BaseView<VX,VY,VZ,shr>::atmost;
|
|
380
|
+
|
|
381
|
+
/// Constructor for cloning \a p
|
|
382
|
+
GqView(Space* home, bool shr, GqView& p);
|
|
383
|
+
public:
|
|
384
|
+
/// Constructor for creation
|
|
385
|
+
GqView(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
386
|
+
/// Create copy during cloning
|
|
387
|
+
virtual Actor* copy(Space* home, bool share);
|
|
388
|
+
/// Perform propagation
|
|
389
|
+
virtual ExecStatus propagate(Space* home);
|
|
390
|
+
/// Post propagator for \f$\#\{i\in\{0,\ldots,|x|-1\}\;|\;x_i=y\}\geq z+c\f$
|
|
391
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, VY y, VZ z, int c);
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
}}}
|
|
395
|
+
|
|
396
|
+
#include "gecode/int/count/view.icc"
|
|
397
|
+
|
|
398
|
+
#endif
|
|
399
|
+
|
|
400
|
+
// STATISTICS: int-prop
|
|
401
|
+
|
|
@@ -0,0 +1,495 @@
|
|
|
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-08 20:36:53 +0200 (Tue, 08 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3538 $
|
|
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 Count {
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* General baseclass
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
template <class VX, class VY>
|
|
30
|
+
forceinline
|
|
31
|
+
BaseInt<VX,VY>::BaseInt(Space* home,
|
|
32
|
+
ViewArray<VX>& x0, int n_s0, VY y0, int c0)
|
|
33
|
+
: Propagator(home), x(x0), n_s(n_s0), y(y0), c(c0) {
|
|
34
|
+
for (int i=n_s; i--; )
|
|
35
|
+
x[i].subscribe(home,this,PC_INT_DOM);
|
|
36
|
+
y.subscribe(home,this,PC_INT_DOM);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
template <class VX, class VY>
|
|
40
|
+
size_t
|
|
41
|
+
BaseInt<VX,VY>::dispose(Space* home) {
|
|
42
|
+
assert(!home->failed());
|
|
43
|
+
for (int i=n_s; i--; )
|
|
44
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
45
|
+
y.cancel(home,this,PC_INT_DOM);
|
|
46
|
+
(void) Propagator::dispose(home);
|
|
47
|
+
return sizeof(*this);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
template <class VX, class VY>
|
|
51
|
+
forceinline
|
|
52
|
+
BaseInt<VX,VY>::BaseInt(Space* home, bool share, BaseInt<VX,VY>& p)
|
|
53
|
+
: Propagator(home,share,p), n_s(p.n_s), c(p.c) {
|
|
54
|
+
x.update(home,share,p.x);
|
|
55
|
+
y.update(home,share,p.y);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
template <class VX, class VY>
|
|
59
|
+
PropCost
|
|
60
|
+
BaseInt<VX,VY>::cost(void) const {
|
|
61
|
+
return cost_lo(x.size(),PC_LINEAR_LO);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Equal propagator (integer rhs)
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
68
|
+
template <class VX, class VY>
|
|
69
|
+
forceinline
|
|
70
|
+
EqInt<VX,VY>::EqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c)
|
|
71
|
+
: BaseInt<VX,VY>(home,x,n_s,y,c) {}
|
|
72
|
+
|
|
73
|
+
template <class VX, class VY>
|
|
74
|
+
ExecStatus
|
|
75
|
+
EqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
|
|
76
|
+
// Eliminate decided views
|
|
77
|
+
int n_x = x.size();
|
|
78
|
+
for (int i=n_x; i--; )
|
|
79
|
+
switch (holds(x[i],y)) {
|
|
80
|
+
case RT_FALSE:
|
|
81
|
+
x[i] = x[--n_x]; break;
|
|
82
|
+
case RT_TRUE:
|
|
83
|
+
x[i] = x[--n_x]; c--; break;
|
|
84
|
+
case RT_MAYBE:
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
GECODE_NEVER;
|
|
88
|
+
}
|
|
89
|
+
x.size(n_x);
|
|
90
|
+
// RHS too small or too large
|
|
91
|
+
if ((c < 0) || (c > n_x))
|
|
92
|
+
return ES_FAILED;
|
|
93
|
+
// All views must be different
|
|
94
|
+
if (c == 0) {
|
|
95
|
+
ExecStatus es = post_false(home,x,y);
|
|
96
|
+
return (es == ES_SUBSUMED) ? ES_OK : es;
|
|
97
|
+
}
|
|
98
|
+
// All views must be equal
|
|
99
|
+
if (c == n_x) {
|
|
100
|
+
ExecStatus es = post_true(home,x,y);
|
|
101
|
+
return (es == ES_SUBSUMED) ? ES_OK : es;
|
|
102
|
+
}
|
|
103
|
+
// Compute how many subscriptions must be created
|
|
104
|
+
int n_s = std::max(c,n_x-c)+1;
|
|
105
|
+
assert(n_s <= n_x);
|
|
106
|
+
(void) new (home) EqInt<VX,VY>(home,x,n_s,y,c);
|
|
107
|
+
return ES_OK;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
template <class VX, class VY>
|
|
111
|
+
forceinline
|
|
112
|
+
EqInt<VX,VY>::EqInt(Space* home, bool share, EqInt<VX,VY>& p)
|
|
113
|
+
: BaseInt<VX,VY>(home,share,p) {}
|
|
114
|
+
|
|
115
|
+
template <class VX, class VY>
|
|
116
|
+
Actor*
|
|
117
|
+
EqInt<VX,VY>::copy(Space* home, bool share) {
|
|
118
|
+
return new (home) EqInt<VX,VY>(home,share,*this);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
template <class VX, class VY>
|
|
122
|
+
ExecStatus
|
|
123
|
+
EqInt<VX,VY>::propagate(Space* home) {
|
|
124
|
+
// Eliminate decided views from subscribed views
|
|
125
|
+
int n_x = x.size();
|
|
126
|
+
for (int i=n_s; i--; )
|
|
127
|
+
switch (holds(x[i],y)) {
|
|
128
|
+
case RT_FALSE:
|
|
129
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
130
|
+
x[i]=x[--n_s]; x[n_s]=x[--n_x];
|
|
131
|
+
break;
|
|
132
|
+
case RT_TRUE:
|
|
133
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
134
|
+
x[i]=x[--n_s]; x[n_s]=x[--n_x]; c--;
|
|
135
|
+
break;
|
|
136
|
+
case RT_MAYBE:
|
|
137
|
+
break;
|
|
138
|
+
default:
|
|
139
|
+
GECODE_NEVER;
|
|
140
|
+
}
|
|
141
|
+
x.size(n_x);
|
|
142
|
+
if ((c < 0) || (c > n_x))
|
|
143
|
+
return ES_FAILED;
|
|
144
|
+
// Eliminate decided views from unsubscribed views
|
|
145
|
+
for (int i=n_x; i-- > n_s; )
|
|
146
|
+
switch (holds(x[i],y)) {
|
|
147
|
+
case RT_FALSE: x[i]=x[--n_x]; break;
|
|
148
|
+
case RT_TRUE: x[i]=x[--n_x]; c--; break;
|
|
149
|
+
case RT_MAYBE: break;
|
|
150
|
+
default: GECODE_NEVER;
|
|
151
|
+
}
|
|
152
|
+
x.size(n_x);
|
|
153
|
+
if ((c < 0) || (c > n_x))
|
|
154
|
+
return ES_FAILED;
|
|
155
|
+
if (c == 0)
|
|
156
|
+
// All views must be different
|
|
157
|
+
return post_false(home,x,y);
|
|
158
|
+
if (c == n_x)
|
|
159
|
+
// All views must be equal
|
|
160
|
+
return post_true(home,x,y);
|
|
161
|
+
int m = std::max(c,n_x-c)+1;
|
|
162
|
+
assert(m <= n_x);
|
|
163
|
+
// Now, there must be new subscriptions from x[n_s] up to x[m-1]
|
|
164
|
+
while (n_s < m)
|
|
165
|
+
x[n_s++].subscribe(home,this,PC_INT_DOM,false);
|
|
166
|
+
return ES_FIX;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/*
|
|
170
|
+
* Greater or equal propagator (integer rhs)
|
|
171
|
+
*
|
|
172
|
+
*/
|
|
173
|
+
template <class VX, class VY>
|
|
174
|
+
forceinline
|
|
175
|
+
GqInt<VX,VY>::GqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c)
|
|
176
|
+
: BaseInt<VX,VY>(home,x,n_s,y,c) {}
|
|
177
|
+
|
|
178
|
+
template <class VX, class VY>
|
|
179
|
+
ExecStatus
|
|
180
|
+
GqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
|
|
181
|
+
// Eliminate decided views
|
|
182
|
+
int n_x = x.size();
|
|
183
|
+
for (int i=n_x; i--; )
|
|
184
|
+
switch (holds(x[i],y)) {
|
|
185
|
+
case RT_FALSE:
|
|
186
|
+
x[i] = x[--n_x]; break;
|
|
187
|
+
case RT_TRUE:
|
|
188
|
+
x[i] = x[--n_x]; c--; break;
|
|
189
|
+
case RT_MAYBE:
|
|
190
|
+
break;
|
|
191
|
+
default:
|
|
192
|
+
GECODE_NEVER;
|
|
193
|
+
}
|
|
194
|
+
x.size(n_x);
|
|
195
|
+
// RHS too large
|
|
196
|
+
if (n_x < c)
|
|
197
|
+
return ES_FAILED;
|
|
198
|
+
// Whatever the x[i] take for values, the inequality is subsumed
|
|
199
|
+
if (c <= 0)
|
|
200
|
+
return ES_OK;
|
|
201
|
+
// All views must be equal
|
|
202
|
+
if (c == n_x) {
|
|
203
|
+
ExecStatus es = post_true(home,x,y);
|
|
204
|
+
return (es == ES_SUBSUMED) ? ES_OK : es;
|
|
205
|
+
}
|
|
206
|
+
(void) new (home) GqInt<VX,VY>(home,x,c+1,y,c);
|
|
207
|
+
return ES_OK;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
template <class VX, class VY>
|
|
211
|
+
forceinline
|
|
212
|
+
GqInt<VX,VY>::GqInt(Space* home, bool share, GqInt<VX,VY>& p)
|
|
213
|
+
: BaseInt<VX,VY>(home,share,p) {}
|
|
214
|
+
|
|
215
|
+
template <class VX, class VY>
|
|
216
|
+
Actor*
|
|
217
|
+
GqInt<VX,VY>::copy(Space* home, bool share) {
|
|
218
|
+
return new (home) GqInt<VX,VY>(home,share,*this);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
template <class VX, class VY>
|
|
222
|
+
ExecStatus
|
|
223
|
+
GqInt<VX,VY>::propagate(Space* home) {
|
|
224
|
+
// Eliminate decided views from subscribed views
|
|
225
|
+
int n_x = x.size();
|
|
226
|
+
for (int i=n_s; i--; )
|
|
227
|
+
switch (holds(x[i],y)) {
|
|
228
|
+
case RT_FALSE:
|
|
229
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
230
|
+
x[i]=x[--n_s]; x[n_s]=x[--n_x];
|
|
231
|
+
break;
|
|
232
|
+
case RT_TRUE:
|
|
233
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
234
|
+
x[i]=x[--n_s]; x[n_s]=x[--n_x]; c--;
|
|
235
|
+
break;
|
|
236
|
+
case RT_MAYBE:
|
|
237
|
+
break;
|
|
238
|
+
default:
|
|
239
|
+
GECODE_NEVER;
|
|
240
|
+
}
|
|
241
|
+
x.size(n_x);
|
|
242
|
+
if (n_x < c)
|
|
243
|
+
return ES_FAILED;
|
|
244
|
+
if (c <= 0)
|
|
245
|
+
return ES_SUBSUMED;
|
|
246
|
+
// Eliminate decided views from unsubscribed views
|
|
247
|
+
for (int i=n_x; i-- > n_s; )
|
|
248
|
+
switch (holds(x[i],y)) {
|
|
249
|
+
case RT_FALSE: x[i]=x[--n_x]; break;
|
|
250
|
+
case RT_TRUE: x[i]=x[--n_x]; c--; break;
|
|
251
|
+
case RT_MAYBE: break;
|
|
252
|
+
default: GECODE_NEVER;
|
|
253
|
+
}
|
|
254
|
+
x.size(n_x);
|
|
255
|
+
if (n_x < c)
|
|
256
|
+
return ES_FAILED;
|
|
257
|
+
if (c <= 0)
|
|
258
|
+
return ES_SUBSUMED;
|
|
259
|
+
if (c == n_x)
|
|
260
|
+
// All views must be equal
|
|
261
|
+
return post_true(home,x,y);
|
|
262
|
+
// Now, there must be new subscriptions from x[n_s] up to x[c+1]
|
|
263
|
+
while (n_s <= c)
|
|
264
|
+
x[n_s++].subscribe(home,this,PC_INT_DOM,false);
|
|
265
|
+
return ES_FIX;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/*
|
|
269
|
+
* Less or equal propagator (integer rhs)
|
|
270
|
+
*
|
|
271
|
+
*/
|
|
272
|
+
template <class VX, class VY>
|
|
273
|
+
forceinline
|
|
274
|
+
LqInt<VX,VY>::LqInt(Space* home, ViewArray<VX>& x, int n_s, VY y, int c)
|
|
275
|
+
: BaseInt<VX,VY>(home,x,n_s,y,c) {}
|
|
276
|
+
|
|
277
|
+
template <class VX, class VY>
|
|
278
|
+
ExecStatus
|
|
279
|
+
LqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
|
|
280
|
+
// Eliminate decided views
|
|
281
|
+
int n_x = x.size();
|
|
282
|
+
for (int i=n_x; i--; )
|
|
283
|
+
switch (holds(x[i],y)) {
|
|
284
|
+
case RT_FALSE:
|
|
285
|
+
x[i] = x[--n_x]; break;
|
|
286
|
+
case RT_TRUE:
|
|
287
|
+
x[i] = x[--n_x]; c--; break;
|
|
288
|
+
case RT_MAYBE:
|
|
289
|
+
break;
|
|
290
|
+
default:
|
|
291
|
+
GECODE_NEVER;
|
|
292
|
+
}
|
|
293
|
+
x.size(n_x);
|
|
294
|
+
if (c < 0)
|
|
295
|
+
return ES_FAILED;
|
|
296
|
+
if (c >= n_x)
|
|
297
|
+
return ES_OK;
|
|
298
|
+
// All views must be different
|
|
299
|
+
if (c == 0) {
|
|
300
|
+
ExecStatus es = post_false(home,x,y);
|
|
301
|
+
return (es == ES_SUBSUMED) ? ES_OK : es;
|
|
302
|
+
}
|
|
303
|
+
(void) new (home) LqInt<VX,VY>(home,x,n_x-c+1,y,c);
|
|
304
|
+
return ES_OK;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
template <class VX, class VY>
|
|
308
|
+
forceinline
|
|
309
|
+
LqInt<VX,VY>::LqInt(Space* home, bool share, LqInt<VX,VY>& p)
|
|
310
|
+
: BaseInt<VX,VY>(home,share,p) {}
|
|
311
|
+
|
|
312
|
+
template <class VX, class VY>
|
|
313
|
+
Actor*
|
|
314
|
+
LqInt<VX,VY>::copy(Space* home, bool share) {
|
|
315
|
+
return new (home) LqInt<VX,VY>(home,share,*this);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
template <class VX, class VY>
|
|
319
|
+
ExecStatus
|
|
320
|
+
LqInt<VX,VY>::propagate(Space* home) {
|
|
321
|
+
// Eliminate decided views from subscribed views
|
|
322
|
+
int n_x = x.size();
|
|
323
|
+
for (int i=n_s; i--; )
|
|
324
|
+
switch (holds(x[i],y)) {
|
|
325
|
+
case RT_FALSE:
|
|
326
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
327
|
+
x[i]=x[--n_s]; x[n_s]=x[--n_x];
|
|
328
|
+
break;
|
|
329
|
+
case RT_TRUE:
|
|
330
|
+
x[i].cancel(home,this,PC_INT_DOM);
|
|
331
|
+
x[i]=x[--n_s]; x[n_s]=x[--n_x]; c--;
|
|
332
|
+
break;
|
|
333
|
+
case RT_MAYBE:
|
|
334
|
+
break;
|
|
335
|
+
default:
|
|
336
|
+
GECODE_NEVER;
|
|
337
|
+
}
|
|
338
|
+
x.size(n_x);
|
|
339
|
+
if (c < 0)
|
|
340
|
+
return ES_FAILED;
|
|
341
|
+
if (c >= n_x)
|
|
342
|
+
return ES_SUBSUMED;
|
|
343
|
+
// Eliminate decided views from unsubscribed views
|
|
344
|
+
for (int i=n_x; i-- > n_s; )
|
|
345
|
+
switch (holds(x[i],y)) {
|
|
346
|
+
case RT_FALSE: x[i]=x[--n_x]; break;
|
|
347
|
+
case RT_TRUE: x[i]=x[--n_x]; c--; break;
|
|
348
|
+
case RT_MAYBE: break;
|
|
349
|
+
default: GECODE_NEVER;
|
|
350
|
+
}
|
|
351
|
+
x.size(n_x);
|
|
352
|
+
if (c < 0)
|
|
353
|
+
return ES_FAILED;
|
|
354
|
+
if (c >= n_x)
|
|
355
|
+
return ES_SUBSUMED;
|
|
356
|
+
if (c == 0)
|
|
357
|
+
// All views must be different
|
|
358
|
+
return post_false(home,x,y);
|
|
359
|
+
// Now, there must be new subscriptions from x[n_s] up to x[n_x-c+1]
|
|
360
|
+
int m = n_x-c;
|
|
361
|
+
while (n_s <= m)
|
|
362
|
+
x[n_s++].subscribe(home,this,PC_INT_DOM,false);
|
|
363
|
+
return ES_FIX;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/*
|
|
367
|
+
* Not-equal propagator (integer rhs)
|
|
368
|
+
*
|
|
369
|
+
*/
|
|
370
|
+
template<class VX, class VY>
|
|
371
|
+
forceinline
|
|
372
|
+
NqInt<VX,VY>::NqInt(Space* home, ViewArray<VX>& x0, VY y0, int c0)
|
|
373
|
+
: BinaryPropagator<VX,PC_INT_DOM>(home,
|
|
374
|
+
x0[x0.size()-2],
|
|
375
|
+
x0[x0.size()-1]), x(x0), y(y0), c(c0) {
|
|
376
|
+
assert(x.size() >= 2);
|
|
377
|
+
x.size(x.size()-2);
|
|
378
|
+
y.subscribe(home,this,PC_INT_DOM);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
template <class VX, class VY>
|
|
382
|
+
size_t
|
|
383
|
+
NqInt<VX,VY>::dispose(Space* home) {
|
|
384
|
+
assert(!home->failed());
|
|
385
|
+
y.cancel(home,this,PC_INT_DOM);
|
|
386
|
+
(void) BinaryPropagator<VX,PC_INT_DOM>::dispose(home);
|
|
387
|
+
return sizeof(*this);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
template<class VX, class VY>
|
|
391
|
+
forceinline
|
|
392
|
+
NqInt<VX,VY>::NqInt(Space* home, bool share, NqInt<VX,VY>& p)
|
|
393
|
+
: BinaryPropagator<VX,PC_INT_DOM>(home,share,p), c(p.c) {
|
|
394
|
+
x.update(home,share,p.x);
|
|
395
|
+
y.update(home,share,p.y);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
template<class VX, class VY>
|
|
399
|
+
forceinline ExecStatus
|
|
400
|
+
NqInt<VX,VY>::post(Space* home, ViewArray<VX>& x, VY y, int c) {
|
|
401
|
+
int n = x.size();
|
|
402
|
+
for (int i=n; i--; )
|
|
403
|
+
switch (holds(x[i],y)) {
|
|
404
|
+
case RT_FALSE: x[i]=x[--n]; break;
|
|
405
|
+
case RT_TRUE: x[i]=x[--n]; c--; break;
|
|
406
|
+
case RT_MAYBE: break;
|
|
407
|
+
default: GECODE_NEVER;
|
|
408
|
+
}
|
|
409
|
+
x.size(n);
|
|
410
|
+
if ((n < c) || (c < 0))
|
|
411
|
+
return ES_OK;
|
|
412
|
+
if (n == 0)
|
|
413
|
+
return (c == 0) ? ES_FAILED : ES_OK;
|
|
414
|
+
if (n == 1) {
|
|
415
|
+
ExecStatus es = (c == 1) ?
|
|
416
|
+
post_false(home,x[0],y) : post_true(home,x[0],y);
|
|
417
|
+
return (es == ES_SUBSUMED) ? ES_OK : es;
|
|
418
|
+
}
|
|
419
|
+
(void) new (home) NqInt(home,x,y,c);
|
|
420
|
+
return ES_OK;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
template<class VX, class VY>
|
|
424
|
+
Actor*
|
|
425
|
+
NqInt<VX,VY>::copy(Space* home, bool share) {
|
|
426
|
+
return new (home) NqInt<VX,VY>(home,share,*this);
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
template<class VX, class VY>
|
|
430
|
+
PropCost
|
|
431
|
+
NqInt<VX,VY>::cost(void) const {
|
|
432
|
+
return PC_LINEAR_LO;
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
template<class VX, class VY>
|
|
436
|
+
forceinline bool
|
|
437
|
+
NqInt<VX,VY>::resubscribe(Space* home, VX& z) {
|
|
438
|
+
switch (holds(z,y)) {
|
|
439
|
+
case RT_FALSE: break;
|
|
440
|
+
case RT_TRUE: c--; break;
|
|
441
|
+
case RT_MAYBE: return true;
|
|
442
|
+
default: GECODE_NEVER;
|
|
443
|
+
}
|
|
444
|
+
int n = x.size();
|
|
445
|
+
for (int i=n; i--; )
|
|
446
|
+
switch (holds(x[i],y)) {
|
|
447
|
+
case RT_FALSE:
|
|
448
|
+
x[i]=x[--n];
|
|
449
|
+
break;
|
|
450
|
+
case RT_TRUE:
|
|
451
|
+
x[i]=x[--n]; c--;
|
|
452
|
+
break;
|
|
453
|
+
case RT_MAYBE:
|
|
454
|
+
// New undecided view found
|
|
455
|
+
z.cancel(home,this,PC_INT_DOM);
|
|
456
|
+
z=x[i]; x[i]=x[--n];
|
|
457
|
+
x.size(n);
|
|
458
|
+
z.subscribe(home,this,PC_INT_DOM,false);
|
|
459
|
+
return true;
|
|
460
|
+
default:
|
|
461
|
+
GECODE_NEVER;
|
|
462
|
+
}
|
|
463
|
+
// All views have been decided
|
|
464
|
+
x.size(0);
|
|
465
|
+
return false;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
template<class VX, class VY>
|
|
469
|
+
ExecStatus
|
|
470
|
+
NqInt<VX,VY>::propagate(Space* home) {
|
|
471
|
+
bool s0 = resubscribe(home,x0);
|
|
472
|
+
bool s1 = resubscribe(home,x1);
|
|
473
|
+
int n = x.size() + s0 + s1;
|
|
474
|
+
if ((n < c) || (c < 0))
|
|
475
|
+
return ES_SUBSUMED;
|
|
476
|
+
if (n == 0)
|
|
477
|
+
return (c == 0) ? ES_FAILED : ES_SUBSUMED;
|
|
478
|
+
if (n == 1) {
|
|
479
|
+
if (s0) {
|
|
480
|
+
return (c == 1) ?
|
|
481
|
+
post_false(home,x0,y) : post_true(home,x0,y);
|
|
482
|
+
} else {
|
|
483
|
+
assert(s1);
|
|
484
|
+
return (c == 1) ?
|
|
485
|
+
post_false(home,x1,y) : post_true(home,x1,y);
|
|
486
|
+
}
|
|
487
|
+
return ES_SUBSUMED;
|
|
488
|
+
}
|
|
489
|
+
return ES_FIX;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
}}}
|
|
493
|
+
|
|
494
|
+
// STATISTICS: int-prop
|
|
495
|
+
|