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,338 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Patrick Pekczynski <pekczynski@ps.uni-sb.de>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Patrick Pekczynski, 2004/2005
|
|
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
|
+
#ifndef __GECODE_INT_GCC_HH__
|
|
23
|
+
#define __GECODE_INT_GCC_HH__
|
|
24
|
+
|
|
25
|
+
#include "gecode/int.hh"
|
|
26
|
+
#include "gecode/support/sort.hh"
|
|
27
|
+
#include "gecode/support/static-stack.hh"
|
|
28
|
+
#include "gecode/int/gcc/gccbndsup.icc"
|
|
29
|
+
#include "gecode/int/gcc/graphsup.icc"
|
|
30
|
+
#include "gecode/int/gcc/occur.icc"
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* \namespace Gecode::Int::GCC
|
|
34
|
+
* \brief Global cardinality propagators
|
|
35
|
+
* \note The global cardinality propagator with fixed cardinalities does not
|
|
36
|
+
* not support sharing!
|
|
37
|
+
*
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
namespace Gecode { namespace Int { namespace GCC {
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* \brief Bounds-consistent global cardinality propagator
|
|
44
|
+
* \par [Reference]
|
|
45
|
+
* The algorithm is taken from: \n
|
|
46
|
+
\verbatim
|
|
47
|
+
@PROCEEDINGS{quimper-efficient,
|
|
48
|
+
title = {An Efficient Bounds Consistency Algorithm
|
|
49
|
+
for the Global Cardinality Constraint},
|
|
50
|
+
year = {2003},
|
|
51
|
+
volume = {2833},
|
|
52
|
+
address = {Kinsale, Ireland},
|
|
53
|
+
month = {September},
|
|
54
|
+
author = {Claude-Guy Quimper and Peter van Beek
|
|
55
|
+
and Alejandro L�pez-Ortiz
|
|
56
|
+
and Alexander Golynski and Sayyed Bashir Sadjad},
|
|
57
|
+
booktitle = {Proceedings of the 9th International Conference
|
|
58
|
+
on Principles and Practice of
|
|
59
|
+
Constraint Programming},
|
|
60
|
+
pages = {600--614},
|
|
61
|
+
url = {http://ai.uwaterloo.ca/~vanbeek/publications},
|
|
62
|
+
}
|
|
63
|
+
@TECHREPORT{quimper-efficientTR,
|
|
64
|
+
author = {Claude-Guy Quimper and Peter van Beek
|
|
65
|
+
and Alejandro L�pez-Ortiz
|
|
66
|
+
and Alexander Golynski and
|
|
67
|
+
Sayyed Bashir Sadjad},
|
|
68
|
+
title = {An Efficient Bounds Consistency Algorithm
|
|
69
|
+
for the Global Cardinality Constraint,
|
|
70
|
+
Technical Report},
|
|
71
|
+
institution = {School of Computer Science,
|
|
72
|
+
University of Waterloo, Waterloo, Canada},
|
|
73
|
+
year = {2003},
|
|
74
|
+
url = {http://ai.uwaterloo.ca/~vanbeek/publications},
|
|
75
|
+
}
|
|
76
|
+
\endverbatim
|
|
77
|
+
*
|
|
78
|
+
* This implementation uses the code that is provided
|
|
79
|
+
* by Peter Van Beek:\n
|
|
80
|
+
* http://ai.uwaterloo.ca/~vanbeek/software/software.html
|
|
81
|
+
* The code here has only been slightly modified to fit Gecode
|
|
82
|
+
* (taking idempotent/non-idempotent propagation into account)
|
|
83
|
+
* and uses a more efficient layout of datastructures (keeping the
|
|
84
|
+
* number of different arrays small).
|
|
85
|
+
*
|
|
86
|
+
* The Bnd class is used to post the propagator and BndImp
|
|
87
|
+
* is the actual implementation taking shared variables into account.
|
|
88
|
+
*
|
|
89
|
+
* Requires \code #include "gecode/int/gcc.hh" \endcode
|
|
90
|
+
* \ingroup FuncIntProp
|
|
91
|
+
*/
|
|
92
|
+
|
|
93
|
+
template <class View, class Card, bool isView>
|
|
94
|
+
class Bnd{
|
|
95
|
+
public:
|
|
96
|
+
/**
|
|
97
|
+
* \brief Post propagator for views \a x and cardinalities \a k
|
|
98
|
+
*
|
|
99
|
+
* \a all denotes whether the propagator uses all value occuring
|
|
100
|
+
* in the domains of the problem vies specified in \a x. Also
|
|
101
|
+
* checks whether \a x and \a k contain shared views.
|
|
102
|
+
*/
|
|
103
|
+
static ExecStatus post(Space* home,
|
|
104
|
+
ViewArray<View>& x,
|
|
105
|
+
ViewArray<Card>& k,
|
|
106
|
+
bool all);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* \brief Implementation of the bounds consistent
|
|
111
|
+
* global cardinality propagator
|
|
112
|
+
*/
|
|
113
|
+
template <class View, class Card, bool isView, bool shared>
|
|
114
|
+
class BndImp : public Propagator {
|
|
115
|
+
friend class Bnd<View, Card, isView>;
|
|
116
|
+
protected:
|
|
117
|
+
/// Views on which to perform bounds-propagation
|
|
118
|
+
ViewArray<View> x;
|
|
119
|
+
/// Array containing either fixed cardinalities or CardViews
|
|
120
|
+
ViewArray<Card> k;
|
|
121
|
+
/**
|
|
122
|
+
* \brief Data structure storing the sum of the views lower bounds
|
|
123
|
+
* Necessary for reasoning about the interval capacities in the
|
|
124
|
+
* propagation algorithm.
|
|
125
|
+
*/
|
|
126
|
+
PartialSum<Card>* lps;
|
|
127
|
+
/// Data structure storing the sum of the views upper bounds
|
|
128
|
+
PartialSum<Card>* ups;
|
|
129
|
+
/**
|
|
130
|
+
* \brief Stores whether cardinalities are all assigned
|
|
131
|
+
*
|
|
132
|
+
* If all cardinalities are assigned the propagation algorithm
|
|
133
|
+
* only has to perform propagation for the upper bounds.
|
|
134
|
+
*/
|
|
135
|
+
bool card_fixed;
|
|
136
|
+
/**
|
|
137
|
+
* \brief Stores whether all values in domains of the x-views are used
|
|
138
|
+
* for cardinality reasoning or whether we only use a subset of them.
|
|
139
|
+
*/
|
|
140
|
+
bool card_all;
|
|
141
|
+
/**
|
|
142
|
+
* \brief Stores whether the minium required occurences of
|
|
143
|
+
* the cardinalities are all zero. If so, we do not need
|
|
144
|
+
* to perform lower bounds propagation.
|
|
145
|
+
*/
|
|
146
|
+
bool skip_lbc;
|
|
147
|
+
/// Constructor for posting
|
|
148
|
+
BndImp(Space* home, ViewArray<View>&, ViewArray<Card>&, bool, bool, bool);
|
|
149
|
+
/// Constructor for cloning \a p
|
|
150
|
+
BndImp(Space* home, bool share, BndImp<View, Card, isView, shared>& p);
|
|
151
|
+
|
|
152
|
+
public:
|
|
153
|
+
/// Destructor
|
|
154
|
+
virtual size_t dispose(Space* home);
|
|
155
|
+
/// Flush partial sum data structures
|
|
156
|
+
virtual void flush(void);
|
|
157
|
+
/// Copy propagator during cloning
|
|
158
|
+
virtual Actor* copy(Space* home, bool share);
|
|
159
|
+
/// Cost funtion returning dynamic PC_LINEAR_HI.
|
|
160
|
+
virtual PropCost cost (void) const;
|
|
161
|
+
/// Perform propagation
|
|
162
|
+
virtual ExecStatus propagate(Space* home);
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* \brief Performs bounds-consistent global cardinality propagation
|
|
167
|
+
*
|
|
168
|
+
* This function implements the propagation algorithm for
|
|
169
|
+
* the bounds-consistent global cardinality propagator implemented
|
|
170
|
+
* in GCC::Bnd. It is available as seperate function in order
|
|
171
|
+
* to allow staging for GCC::Dom and GCC::Bnd though staging is
|
|
172
|
+
* currently not used due to technical difficulties.
|
|
173
|
+
*/
|
|
174
|
+
template <class View, class Card, bool isView, bool shared>
|
|
175
|
+
ExecStatus prop_bnd(Space* home, ViewArray<View>&, ViewArray<Card>&,
|
|
176
|
+
PartialSum<Card>*&, PartialSum<Card>*&,
|
|
177
|
+
bool, bool, bool);
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* \brief Domain-consistent global cardinality propagator
|
|
181
|
+
* \par [Reference]
|
|
182
|
+
* The algorithm is taken from: \n
|
|
183
|
+
* \anchor CardVarNPCompl
|
|
184
|
+
\verbatim
|
|
185
|
+
@PROCEEDINGS{improvedgcc,
|
|
186
|
+
title = {Improved Algorithms for the
|
|
187
|
+
Global Cardinality Constraint},
|
|
188
|
+
year = {2004},
|
|
189
|
+
volume = {3528},
|
|
190
|
+
address = {Toronto, Canada},
|
|
191
|
+
month = {September},
|
|
192
|
+
author = {Claude-Guy Quimper and Peter van Beek and
|
|
193
|
+
Alejandro L�pez-Ortiz and Alexander Golynski},
|
|
194
|
+
booktitle = {Proceedings of the 10th International
|
|
195
|
+
Conference on Principles and Practice of
|
|
196
|
+
Constraint Programming},
|
|
197
|
+
url = {http://ai.uwaterloo.ca/~vanbeek/publications},
|
|
198
|
+
}
|
|
199
|
+
\endverbatim
|
|
200
|
+
*
|
|
201
|
+
* Requires \code #include "gecode/int/gcc.hh" \endcode
|
|
202
|
+
* \ingroup FuncIntProp
|
|
203
|
+
*/
|
|
204
|
+
|
|
205
|
+
template <class View, class Card, bool isView>
|
|
206
|
+
class Dom : public Propagator {
|
|
207
|
+
protected:
|
|
208
|
+
/// Views on which to perform domain-propagation
|
|
209
|
+
ViewArray<View> x;
|
|
210
|
+
/**
|
|
211
|
+
* \brief Views used to channel information between \c x and \c k
|
|
212
|
+
* (\f$ x \subseteq y \f$).
|
|
213
|
+
*/
|
|
214
|
+
ViewArray<View> y;
|
|
215
|
+
/// Array containing either fixed cardinalities or CardViews
|
|
216
|
+
ViewArray<Card> k;
|
|
217
|
+
/// Propagation is performed on a variable-value graph (used as cache)
|
|
218
|
+
VarValGraph<View, Card, isView>* vvg;
|
|
219
|
+
/**
|
|
220
|
+
* \brief Stores whether cardinalities are all assigned
|
|
221
|
+
*
|
|
222
|
+
* If all cardinalities are assigned the propagation algorithm
|
|
223
|
+
* only has to perform propagation for the upper bounds.
|
|
224
|
+
*/
|
|
225
|
+
bool card_fixed;
|
|
226
|
+
/**
|
|
227
|
+
* \brief Stores whether all values in domains of the x-views are used
|
|
228
|
+
* for cardinality reasoning or whether we only use a subset of them.
|
|
229
|
+
*/
|
|
230
|
+
bool card_all;
|
|
231
|
+
/// Constructor for cloning \a p
|
|
232
|
+
Dom(Space* home, bool share, Dom<View, Card, isView>& p);
|
|
233
|
+
/// Constructor for posting
|
|
234
|
+
Dom(Space* home, ViewArray<View>&, ViewArray<Card>&, bool, bool);
|
|
235
|
+
|
|
236
|
+
public:
|
|
237
|
+
/// Destructor including deallocation of variable-value graph
|
|
238
|
+
virtual size_t dispose(Space* home);
|
|
239
|
+
/// Flush variable-value graph
|
|
240
|
+
virtual void flush(void);
|
|
241
|
+
/// Copy propagator during cloning
|
|
242
|
+
virtual Actor* copy(Space* home, bool share);
|
|
243
|
+
/**
|
|
244
|
+
* \brief Cost function
|
|
245
|
+
*
|
|
246
|
+
* As the propagation stronlgy depends on the domain size of the
|
|
247
|
+
* views on which propagation is performed, the propagation costs
|
|
248
|
+
* are computed as follows, where \c d denotes the size of the
|
|
249
|
+
* largest domain of a view in \c x:
|
|
250
|
+
* - dynamic PC_LINEAR_LO ( \f$ d < 6\f$ )
|
|
251
|
+
* - dynamic PC_LINEAR_HI ( \f$ 6 \leq d < \frac{n}{2} \f$ )
|
|
252
|
+
* - dynamic PC_QUADRATIC_LO ( \f$ \frac{n}{2} \leq d < n^2 \f$)
|
|
253
|
+
* - dynamic PC_CUBIC_LO ( \f$ n^2 \leq d \f$)
|
|
254
|
+
*/
|
|
255
|
+
virtual PropCost cost (void) const;
|
|
256
|
+
/// Perform propagation
|
|
257
|
+
virtual ExecStatus propagate(Space* home);
|
|
258
|
+
/**
|
|
259
|
+
* \brief Post propagator for views \a x and cardinalities \a k
|
|
260
|
+
*
|
|
261
|
+
* \a all denotes whether the propagator uses all value occuring
|
|
262
|
+
* in the domains of the problem vies specified in \a x.
|
|
263
|
+
*/
|
|
264
|
+
static ExecStatus post(Space* home,
|
|
265
|
+
ViewArray<View>& x, ViewArray<Card>& k,
|
|
266
|
+
bool all);
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* \brief Value consistent global cardinality propagator
|
|
271
|
+
*
|
|
272
|
+
* Requires \code #include "gecode/int/gcc.hh" \endcode
|
|
273
|
+
* \ingroup FuncIntProp
|
|
274
|
+
*/
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
template <class View, class Card, bool isView>
|
|
278
|
+
class Val : public Propagator {
|
|
279
|
+
protected:
|
|
280
|
+
/// Views on which to perform value-propagation
|
|
281
|
+
ViewArray<View> x;
|
|
282
|
+
/// Array containing either fixed cardinalities or CardViews
|
|
283
|
+
ViewArray<Card> k;
|
|
284
|
+
/**
|
|
285
|
+
* \brief Stores whether all values in domains of the x-views are used
|
|
286
|
+
* for cardinality reasoning or whether we only use a subset of them.
|
|
287
|
+
*/
|
|
288
|
+
bool card_all;
|
|
289
|
+
/// Constructor for cloning \a p
|
|
290
|
+
Val(Space* home, bool share, Val<View, Card, isView>& p );
|
|
291
|
+
/// Constructor for posting
|
|
292
|
+
Val(Space* home, ViewArray<View>&, ViewArray<Card>&, bool);
|
|
293
|
+
|
|
294
|
+
public:
|
|
295
|
+
/// Destructor
|
|
296
|
+
virtual size_t dispose(Space* home);
|
|
297
|
+
/// Copy propagator during cloning
|
|
298
|
+
virtual Actor* copy(Space* home, bool share);
|
|
299
|
+
/// Cost funtion returning dynamic PC_LINEAR_HI.
|
|
300
|
+
virtual PropCost cost (void) const;
|
|
301
|
+
/// Perform propagation
|
|
302
|
+
virtual ExecStatus propagate(Space* home);
|
|
303
|
+
/**
|
|
304
|
+
* \brief Post propagator for views \a x and cardinalities \a k
|
|
305
|
+
*
|
|
306
|
+
* \a all denotes whether the propagator uses all value occuring
|
|
307
|
+
* in the domains of the problem vies specified in \a x.
|
|
308
|
+
*/
|
|
309
|
+
static ExecStatus post(Space* home,
|
|
310
|
+
ViewArray<View>& x, ViewArray<Card>& k,
|
|
311
|
+
bool all);
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* \brief Performs value-consistent global cardinality propagation
|
|
316
|
+
*
|
|
317
|
+
* This function implements the propagation algorithm for
|
|
318
|
+
* the value-consistent global cardinality propagator implemented
|
|
319
|
+
* in GCC::Val.
|
|
320
|
+
*/
|
|
321
|
+
|
|
322
|
+
template <class View, class Card, bool isView>
|
|
323
|
+
ExecStatus prop_val(Space* home, ViewArray<View>&, ViewArray<Card>&,
|
|
324
|
+
bool&);
|
|
325
|
+
|
|
326
|
+
}}}
|
|
327
|
+
|
|
328
|
+
#include "gecode/int/gcc/ubc.icc"
|
|
329
|
+
#include "gecode/int/gcc/lbc.icc"
|
|
330
|
+
#include "gecode/int/gcc/val.icc"
|
|
331
|
+
#include "gecode/int/gcc/bnd.icc"
|
|
332
|
+
#include "gecode/int/gcc/dom.icc"
|
|
333
|
+
|
|
334
|
+
#endif
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
// STATISTICS: int-prop
|
|
338
|
+
|
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Patrick Pekczynski <pekczynski@ps.uni-sb.de>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Patrick Pekczynski, 2004/2005
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3512 $
|
|
11
|
+
*
|
|
12
|
+
* This file is part of Gecode, the generic constraint
|
|
13
|
+
* development environment:
|
|
14
|
+
* http://www.gecode.org
|
|
15
|
+
*
|
|
16
|
+
* See the file "LICENSE" for information on usage and
|
|
17
|
+
* redistribution of this file, and for a
|
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
namespace Gecode { namespace Int { namespace GCC {
|
|
23
|
+
|
|
24
|
+
/// \brief Perform bounds propagation
|
|
25
|
+
template <class View, class Card, bool isView, bool shared>
|
|
26
|
+
inline ExecStatus
|
|
27
|
+
prop_bnd(Space* home, ViewArray<View>& x, ViewArray<Card>& k,
|
|
28
|
+
PartialSum<Card>*& lps, PartialSum<Card>*& ups,
|
|
29
|
+
bool card_fixed, bool card_all, bool nolbc){
|
|
30
|
+
|
|
31
|
+
bool all_assigned = true;
|
|
32
|
+
bool mod = false;
|
|
33
|
+
int smin = 0;
|
|
34
|
+
int smax = 0;
|
|
35
|
+
|
|
36
|
+
if (isView) {
|
|
37
|
+
// if a cardinality of first or last value is
|
|
38
|
+
// out of the variable bounds (cardvar == 0)
|
|
39
|
+
// reduce cardinality variables
|
|
40
|
+
|
|
41
|
+
int m = k.size();
|
|
42
|
+
bool locut = k[0].max() == 0;
|
|
43
|
+
bool hicut = k[m - 1].max() == 0;
|
|
44
|
+
|
|
45
|
+
if (locut) {
|
|
46
|
+
int low = k[0].card();
|
|
47
|
+
for (int i = 0; i < x.size(); i++) {
|
|
48
|
+
ModEvent me = x[i].gr(home, low);
|
|
49
|
+
GECODE_ME_CHECK(me);
|
|
50
|
+
mod |= me_modified(me) && (x[i].min() != low + 1);
|
|
51
|
+
mod |= shared && me_modified(me);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (hicut) {
|
|
55
|
+
int hi = k[m - 1].card();
|
|
56
|
+
for (int i = 0; i < x.size(); i++) {
|
|
57
|
+
ModEvent me = x[i].le(home, hi);
|
|
58
|
+
GECODE_ME_CHECK(me);
|
|
59
|
+
mod |= me_modified(me) && (x[i].max() != hi - 1);
|
|
60
|
+
mod |= shared && me_modified(me);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (locut || hicut) {
|
|
65
|
+
int cmin = k[0].card();
|
|
66
|
+
int cmax = k[m - 1].card();
|
|
67
|
+
if (k[0].max() == 0) {
|
|
68
|
+
cmin = k[1].card();
|
|
69
|
+
}
|
|
70
|
+
if (k[m - 1].max() == 0) {
|
|
71
|
+
cmax = k[m - 2].card();
|
|
72
|
+
}
|
|
73
|
+
reduce_card<Card>(cmin, cmax, k);
|
|
74
|
+
|
|
75
|
+
if (lps != NULL) {
|
|
76
|
+
delete lps; lps = NULL;
|
|
77
|
+
assert(ups != NULL);
|
|
78
|
+
delete ups; ups = NULL;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
GECODE_AUTOARRAY(int, count, k.size());
|
|
84
|
+
for (int i = k.size(); i--; ) {
|
|
85
|
+
count[i] = 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
int noa = 0;
|
|
89
|
+
int single = 0;
|
|
90
|
+
int xlb = 0;
|
|
91
|
+
int xub = 0;
|
|
92
|
+
|
|
93
|
+
for (int i = x.size(); i--; ) {
|
|
94
|
+
bool b = x[i].assigned();
|
|
95
|
+
xlb += x[i].min();
|
|
96
|
+
xub += x[i].max();
|
|
97
|
+
all_assigned &= b;
|
|
98
|
+
if (b) {
|
|
99
|
+
noa++;
|
|
100
|
+
int idx = lookupValue(k,x[i].val());
|
|
101
|
+
// reduction is essential for order on value nodes in dom
|
|
102
|
+
// hence introduce test for failed lookup
|
|
103
|
+
if (idx == -1) {
|
|
104
|
+
return ES_FAILED;
|
|
105
|
+
}
|
|
106
|
+
count[idx]++;
|
|
107
|
+
} else {
|
|
108
|
+
single = i;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (isView) {
|
|
113
|
+
// before propagation performs inferences on cardinality variables:
|
|
114
|
+
if (noa > 0) {
|
|
115
|
+
int n = x.size();
|
|
116
|
+
int ks = k.size();
|
|
117
|
+
|
|
118
|
+
for (int i = ks; i--; ) {
|
|
119
|
+
if (!k[i].assigned()) {
|
|
120
|
+
int ub = n - (noa - count[i]);
|
|
121
|
+
int lb = count[i];
|
|
122
|
+
ModEvent melq = k[i].lq(home, ub);
|
|
123
|
+
GECODE_ME_CHECK(melq);
|
|
124
|
+
mod |= me_modified(melq) && (k[i].max() != ub);
|
|
125
|
+
mod |= shared && me_modified(melq);
|
|
126
|
+
|
|
127
|
+
ModEvent megq = k[i].gq(home, lb);
|
|
128
|
+
GECODE_ME_CHECK(megq);
|
|
129
|
+
mod |= me_modified(megq) && (k[i].min() != lb);
|
|
130
|
+
mod |= shared && me_modified(megq);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (!card_consistent<View, Card>(smin, smax, x, k, card_all)) {
|
|
136
|
+
return ES_FAILED;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// can only modified cardinality variables
|
|
140
|
+
GECODE_ES_CHECK((prop_card<View, Card, shared>(home, x, k, mod)));
|
|
141
|
+
|
|
142
|
+
// mimicking linear constraint
|
|
143
|
+
int smax = 0;
|
|
144
|
+
int smin = 0;
|
|
145
|
+
int total_min = 0;
|
|
146
|
+
int total_max = 0;
|
|
147
|
+
for (int i = k.size(); i--; ) {
|
|
148
|
+
smax += k[i].max();
|
|
149
|
+
total_min += k[i].card() * k[i].min();
|
|
150
|
+
total_max += k[i].card() * k[i].max();
|
|
151
|
+
}
|
|
152
|
+
int xsmax = x.size() - smax;
|
|
153
|
+
int xsmin = x.size() - smin;
|
|
154
|
+
smax = 0;
|
|
155
|
+
smin = 0;
|
|
156
|
+
bool card_ass = true;
|
|
157
|
+
for (int i = k.size(); i--; ) {
|
|
158
|
+
int lb = xsmax + k[i].max();
|
|
159
|
+
int ub = xsmin + k[i].min();
|
|
160
|
+
ModEvent me = k[i].gq(home, lb);
|
|
161
|
+
GECODE_ME_CHECK(me);
|
|
162
|
+
mod |= me_modified(me) && (k[i].min() != lb);
|
|
163
|
+
mod |= shared && me_modified(me);
|
|
164
|
+
smax += k[i].max();
|
|
165
|
+
|
|
166
|
+
me = k[i].lq(home, ub);
|
|
167
|
+
GECODE_ME_CHECK(me);
|
|
168
|
+
mod |= me_modified(me) && (k[i].max() != ub);
|
|
169
|
+
mod |= shared && me_modified(me);
|
|
170
|
+
card_ass &= k[i].assigned();
|
|
171
|
+
}
|
|
172
|
+
if (card_ass) {
|
|
173
|
+
if (smax < x.size() || smax > x.size()) {
|
|
174
|
+
return ES_FAILED;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// redundant linear constraint
|
|
178
|
+
for (int i = x.size(); i--; ) {
|
|
179
|
+
if (!x[i].assigned()) {
|
|
180
|
+
int xmin = xub - x[i].max();
|
|
181
|
+
int xgq = total_max - xmin;
|
|
182
|
+
|
|
183
|
+
int xmax = xlb - x[i].min();
|
|
184
|
+
int xlq = total_max - xmax;
|
|
185
|
+
|
|
186
|
+
ModEvent me = x[i].gq(home, xgq);
|
|
187
|
+
GECODE_ME_CHECK(me);
|
|
188
|
+
mod |= me_modified(me) && (x[i].min() != xgq);
|
|
189
|
+
mod |= shared && me_modified(me);
|
|
190
|
+
|
|
191
|
+
me = x[i].lq(home, xlq);
|
|
192
|
+
GECODE_ME_CHECK(me);
|
|
193
|
+
mod |= me_modified(me) && (x[i].max() != xlq);
|
|
194
|
+
mod |= shared && me_modified(me);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
for (int i = k.size(); i--; ) {
|
|
201
|
+
count[i] = 0;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
all_assigned = true;
|
|
205
|
+
noa = 0;
|
|
206
|
+
single = 0;
|
|
207
|
+
|
|
208
|
+
for (int i = x.size(); i--; ) {
|
|
209
|
+
bool b = x[i].assigned();
|
|
210
|
+
xlb += x[i].min();
|
|
211
|
+
xub += x[i].max();
|
|
212
|
+
all_assigned &= b;
|
|
213
|
+
if (b) {
|
|
214
|
+
noa++;
|
|
215
|
+
int idx = lookupValue(k,x[i].val());
|
|
216
|
+
// reduction is essential for order on value nodes in dom
|
|
217
|
+
// hence introduce test for failed lookup
|
|
218
|
+
if (idx == -1) {
|
|
219
|
+
return ES_FAILED;
|
|
220
|
+
}
|
|
221
|
+
count[idx]++;
|
|
222
|
+
} else {
|
|
223
|
+
single = i;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
if (all_assigned) {
|
|
228
|
+
for (int i = k.size(); i--; ) {
|
|
229
|
+
int ci = count[i];
|
|
230
|
+
if (! (k[i].min() <= ci && ci <= k[i].max())) {
|
|
231
|
+
return ES_FAILED;
|
|
232
|
+
} else {
|
|
233
|
+
if (isView) {
|
|
234
|
+
if (!k[i].assigned()) {
|
|
235
|
+
ModEvent me = k[i].eq(home, ci);
|
|
236
|
+
GECODE_ME_CHECK(me);
|
|
237
|
+
mod |= k[i].assigned();
|
|
238
|
+
}
|
|
239
|
+
all_assigned &= k[i].assigned();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (all_assigned) {
|
|
244
|
+
return ES_SUBSUMED;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (isView) {
|
|
249
|
+
// check again for zero entries at first or last position
|
|
250
|
+
int m = k.size();
|
|
251
|
+
bool locut = k[0].max() == 0;
|
|
252
|
+
bool hicut = k[m - 1].max() == 0;
|
|
253
|
+
|
|
254
|
+
if (locut) {
|
|
255
|
+
int low = k[0].card();
|
|
256
|
+
for (int i = 0; i < x.size(); i++) {
|
|
257
|
+
ModEvent me = x[i].gr(home, low);
|
|
258
|
+
GECODE_ME_CHECK(me);
|
|
259
|
+
mod |= me_modified(me) && (x[i].min() != low + 1);
|
|
260
|
+
mod |= shared && me_modified(me);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (hicut) {
|
|
264
|
+
int hi = k[m - 1].card();
|
|
265
|
+
for (int i = 0; i < x.size(); i++) {
|
|
266
|
+
ModEvent me = x[i].le(home, hi);
|
|
267
|
+
GECODE_ME_CHECK(me);
|
|
268
|
+
mod |= me_modified(me) && (x[i].max() != hi - 1);
|
|
269
|
+
mod |= shared && me_modified(me);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
if (locut || hicut) {
|
|
274
|
+
int cmin = k[0].card();
|
|
275
|
+
int cmax = k[m - 1].card();
|
|
276
|
+
if (k[0].max() == 0) {
|
|
277
|
+
cmin = k[1].card();
|
|
278
|
+
}
|
|
279
|
+
if (k[m - 1].max() == 0) {
|
|
280
|
+
cmax = k[m - 2].card();
|
|
281
|
+
}
|
|
282
|
+
reduce_card<Card>(cmin, cmax, k);
|
|
283
|
+
|
|
284
|
+
if (lps != NULL) {
|
|
285
|
+
delete lps;
|
|
286
|
+
lps = NULL;
|
|
287
|
+
assert(ups != NULL);
|
|
288
|
+
delete ups;
|
|
289
|
+
ups = NULL;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
ExecStatus es_ubc = ES_FIX;
|
|
295
|
+
ExecStatus es_lbc = ES_FIX;
|
|
296
|
+
int n = x.size();
|
|
297
|
+
|
|
298
|
+
GECODE_AUTOARRAY(int, mu, n);
|
|
299
|
+
GECODE_AUTOARRAY(int, nu, n);
|
|
300
|
+
|
|
301
|
+
for (int i = n; i--; ) {
|
|
302
|
+
nu[i] = i;
|
|
303
|
+
mu[i] = i;
|
|
304
|
+
}
|
|
305
|
+
// Create sorting permutation mu according to the variables upper bounds
|
|
306
|
+
MaxInc<View> max_inc(x);
|
|
307
|
+
Support::quicksort<int, MaxInc<View> >(mu, n, max_inc);
|
|
308
|
+
|
|
309
|
+
// Create sorting permutation nu according to the variables lower bounds
|
|
310
|
+
MinInc<View> min_inc(x);
|
|
311
|
+
Support::quicksort<int, MinInc<View> >(nu, n, min_inc);
|
|
312
|
+
|
|
313
|
+
if (isView) {
|
|
314
|
+
// assert guaranteed bounds in the set of all values for variable case
|
|
315
|
+
assert(k[0].card() == x[nu[0]].min());
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// ensure that only values are considered lying in the variable domain
|
|
319
|
+
int cur_minx = x[nu[0]].min();
|
|
320
|
+
if (lps == NULL) {
|
|
321
|
+
assert (ups == NULL);
|
|
322
|
+
lps = new PartialSum<Card>(cur_minx, k.size(), k, false);
|
|
323
|
+
ups = new PartialSum<Card>(cur_minx, k.size(), k, true);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
if (isView) {
|
|
327
|
+
// if there has been a change to the cardinality variables
|
|
328
|
+
// reconstruction of the partial sum structure is necessary
|
|
329
|
+
if (lps->check_update_min(k)) {
|
|
330
|
+
delete lps;
|
|
331
|
+
lps = new PartialSum<Card>(cur_minx, k.size(), k, false);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (ups->check_update_max(k)) {
|
|
335
|
+
delete ups;
|
|
336
|
+
ups = new PartialSum<Card>(cur_minx, k.size(), k, true);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// already holds by construction
|
|
341
|
+
assert(lps->minValue() == ups->minValue());
|
|
342
|
+
assert(lps->maxValue() == ups->maxValue());
|
|
343
|
+
|
|
344
|
+
bool minima_equal = lps->minValue() == ups->minValue();
|
|
345
|
+
bool maxima_equal = lps->maxValue() == ups->maxValue();
|
|
346
|
+
|
|
347
|
+
if (!minima_equal || !maxima_equal ) {
|
|
348
|
+
delete lps;
|
|
349
|
+
lps = new PartialSum<Card>(cur_minx, k.size(), k, false);
|
|
350
|
+
delete ups;
|
|
351
|
+
ups = new PartialSum<Card>(cur_minx, k.size(), k, true);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// assert that the minimal value of the partial sum structure for
|
|
355
|
+
// LBC is consistent with the smallest value a variable can take
|
|
356
|
+
assert(lps->minValue() <= x[nu[0]].min());
|
|
357
|
+
// assert that the maximal value of the partial sum structure for
|
|
358
|
+
// UBC is consistent with the largest value a variable can take
|
|
359
|
+
assert(x[mu[x.size() - 1]].max() <= ups->maxValue());
|
|
360
|
+
|
|
361
|
+
/*
|
|
362
|
+
* Setup rank and bounds info
|
|
363
|
+
* Since this implementation is based on the theory of Hall Intervals
|
|
364
|
+
* additional datastructures are needed in order to represent these
|
|
365
|
+
* intervals and the "partial-sum" data structure (cf."gcc/gccbndsup.icc")
|
|
366
|
+
*
|
|
367
|
+
*/
|
|
368
|
+
|
|
369
|
+
GECODE_AUTOARRAY(HallInfo, hall, (2 * n + 2));
|
|
370
|
+
GECODE_AUTOARRAY(Rank, rank, n);
|
|
371
|
+
|
|
372
|
+
int nb = 0;
|
|
373
|
+
// setup bounds and rank
|
|
374
|
+
int min = x[nu[0]].min();
|
|
375
|
+
int max = x[mu[0]].max() + 1;
|
|
376
|
+
int last = lps->firstValue + 1; //equivalent to last = min -2
|
|
377
|
+
hall[0].bounds = last;
|
|
378
|
+
|
|
379
|
+
/*
|
|
380
|
+
* First the algorithm merges the arrays minsorted and maxsorted
|
|
381
|
+
* into bounds i.e. hall[].bounds contains the ordered union
|
|
382
|
+
* of the lower and upper domain bounds including two sentinels
|
|
383
|
+
* at the beginning and at the end of the set
|
|
384
|
+
* ( the upper variable bounds in this union are increased by 1 )
|
|
385
|
+
*/
|
|
386
|
+
|
|
387
|
+
{
|
|
388
|
+
int i = 0;
|
|
389
|
+
int j = 0;
|
|
390
|
+
while (true) {
|
|
391
|
+
if (i < n && min < max) {
|
|
392
|
+
if (min != last) {
|
|
393
|
+
last = min;
|
|
394
|
+
hall[++nb].bounds = last;
|
|
395
|
+
}
|
|
396
|
+
rank[nu[i]].min = nb;
|
|
397
|
+
if (++i < n) {
|
|
398
|
+
min = x[nu[i]].min();
|
|
399
|
+
}
|
|
400
|
+
} else {
|
|
401
|
+
if (max != last) {
|
|
402
|
+
last = max;
|
|
403
|
+
hall[++nb].bounds = last;
|
|
404
|
+
}
|
|
405
|
+
rank[mu[j]].max = nb;
|
|
406
|
+
if (++j == n) {
|
|
407
|
+
break;
|
|
408
|
+
}
|
|
409
|
+
max = x[mu[j]].max() + 1;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
int rightmost = nb + 1; // rightmost accesible value in bounds
|
|
415
|
+
hall[rightmost].bounds = ups->lastValue + 1 ;
|
|
416
|
+
|
|
417
|
+
nolbc = true;
|
|
418
|
+
for (int i = k.size(); i--; ) {
|
|
419
|
+
nolbc &= (k[i].min() == 0);
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
if (!card_fixed && !nolbc) {
|
|
423
|
+
es_lbc = lbc<View, Card, shared>(home, x, nb, hall, rank,lps, mu, nu);
|
|
424
|
+
if (es_lbc == ES_FAILED || es_lbc == ES_SUBSUMED) {
|
|
425
|
+
return es_lbc;
|
|
426
|
+
}
|
|
427
|
+
mod |= (es_lbc == ES_NOFIX);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
es_ubc = ubc<View, Card, shared>(home, x, nb, hall, rank, ups, mu, nu);
|
|
431
|
+
if (es_ubc == ES_FAILED || es_ubc == ES_SUBSUMED) {
|
|
432
|
+
return es_ubc;
|
|
433
|
+
}
|
|
434
|
+
mod |= (es_ubc == ES_NOFIX);
|
|
435
|
+
|
|
436
|
+
if (isView) {
|
|
437
|
+
GECODE_ES_CHECK((prop_card<View, Card, shared>(home, x, k, mod)));
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
all_assigned = true;
|
|
441
|
+
noa = 0;
|
|
442
|
+
single = 0;
|
|
443
|
+
for (int i = k.size(); i--; ) {
|
|
444
|
+
count[i] = 0;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
for (int i = x.size(); i--; ) {
|
|
448
|
+
bool b = x[i].assigned();
|
|
449
|
+
all_assigned &= b;
|
|
450
|
+
if (b) {
|
|
451
|
+
noa++;
|
|
452
|
+
int idx = lookupValue(k,x[i].val());
|
|
453
|
+
count[idx]++;
|
|
454
|
+
} else {
|
|
455
|
+
single = i;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
if (all_assigned) {
|
|
460
|
+
for (int i = k.size(); i--; ) {
|
|
461
|
+
int ci = count[i];
|
|
462
|
+
if (! (k[i].min() <= ci && ci <= k[i].max())) {
|
|
463
|
+
return ES_FAILED;
|
|
464
|
+
} else {
|
|
465
|
+
if (isView) {
|
|
466
|
+
if (!k[i].assigned()) {
|
|
467
|
+
ModEvent me = k[i].eq(home, ci);
|
|
468
|
+
GECODE_ME_CHECK(me);
|
|
469
|
+
mod |= k[i].assigned();
|
|
470
|
+
}
|
|
471
|
+
all_assigned &= k[i].assigned();
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
if (all_assigned) {
|
|
476
|
+
return ES_SUBSUMED;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
return mod ? ES_NOFIX : ES_FIX;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// for posting
|
|
484
|
+
template <class View, class Card, bool isView, bool shared>
|
|
485
|
+
inline
|
|
486
|
+
BndImp<View, Card, isView, shared>::
|
|
487
|
+
BndImp(Space* home, ViewArray<View>& x0, ViewArray<Card>& k0,
|
|
488
|
+
bool cf, bool all, bool nolbc) :
|
|
489
|
+
Propagator(home, true), x(x0), k(k0), lps(NULL), ups(NULL),
|
|
490
|
+
card_fixed(cf), card_all(all), skip_lbc(nolbc) {
|
|
491
|
+
x.subscribe(home, this, PC_INT_BND);
|
|
492
|
+
k.subscribe(home, this, PC_INT_BND);
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
// for cloning
|
|
496
|
+
template <class View, class Card, bool isView, bool shared>
|
|
497
|
+
forceinline
|
|
498
|
+
BndImp<View, Card, isView, shared>::
|
|
499
|
+
BndImp(Space* home, bool share, BndImp<View, Card, isView, shared>& p)
|
|
500
|
+
: Propagator(home, share, p), lps(NULL), ups(NULL),
|
|
501
|
+
card_fixed(p.card_fixed), card_all(p.card_all),
|
|
502
|
+
skip_lbc(p.skip_lbc) {
|
|
503
|
+
x.update(home, share, p.x);
|
|
504
|
+
k.update(home, share, p.k);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
template <class View, class Card, bool isView, bool shared>
|
|
508
|
+
size_t
|
|
509
|
+
BndImp<View, Card, isView, shared>::dispose(Space* home){
|
|
510
|
+
if (!home->failed()) {
|
|
511
|
+
x.cancel(home,this, PC_INT_BND);
|
|
512
|
+
k.cancel(home,this, PC_INT_BND);
|
|
513
|
+
}
|
|
514
|
+
if (lps != NULL) {
|
|
515
|
+
delete lps;
|
|
516
|
+
}
|
|
517
|
+
if (ups != NULL) {
|
|
518
|
+
delete ups;
|
|
519
|
+
}
|
|
520
|
+
(void) Propagator::dispose(home);
|
|
521
|
+
return sizeof(*this);
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
template <class View, class Card, bool isView, bool shared>
|
|
525
|
+
Actor*
|
|
526
|
+
BndImp<View, Card, isView, shared>::copy(Space* home, bool share){
|
|
527
|
+
return new (home) BndImp<View, Card, isView, shared>
|
|
528
|
+
(home, share, *this);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
template <class View, class Card, bool isView, bool shared>
|
|
532
|
+
PropCost
|
|
533
|
+
BndImp<View, Card, isView, shared>::cost (void) const {
|
|
534
|
+
/*
|
|
535
|
+
* The bounds consistent version of the Global Cardinality constraint
|
|
536
|
+
* has a theoretical complexity of
|
|
537
|
+
* O(t + n\cdot log(n)) with
|
|
538
|
+
* n = number of variables
|
|
539
|
+
* t = time needed to sort the domain bounds of the variables
|
|
540
|
+
*/
|
|
541
|
+
PropCost pc = PC_LINEAR_HI;
|
|
542
|
+
return cost_hi(x.size(),pc);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
template <class View, class Card, bool isView, bool shared>
|
|
546
|
+
ExecStatus
|
|
547
|
+
BndImp<View, Card, isView, shared>::propagate(Space* home) {
|
|
548
|
+
return prop_bnd<View, Card, isView, shared>
|
|
549
|
+
(home, x, k, lps, ups, card_fixed, card_all, skip_lbc);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* \brief Sharing test for the bounds-consistent global cardinality
|
|
554
|
+
* propagator.
|
|
555
|
+
*
|
|
556
|
+
* Due to parametrization on the problem views, \a View1 and the
|
|
557
|
+
* cardinality views, \a View2 the test can be applied for both cases
|
|
558
|
+
* of fixed cardinalities and cardinality variables.
|
|
559
|
+
*/
|
|
560
|
+
template <class View1, class View2>
|
|
561
|
+
class SharingTest {
|
|
562
|
+
public:
|
|
563
|
+
/**
|
|
564
|
+
* \brief Test whether the problem views in \a x0 or the
|
|
565
|
+
* cardinality views in \a k0 contain shared views.
|
|
566
|
+
*/
|
|
567
|
+
static bool shared(Space* home, ViewArray<View1>& x0,
|
|
568
|
+
ViewArray<View2>& k0) {
|
|
569
|
+
ViewArray<View1> xc(home, x0.size()+k0.size());
|
|
570
|
+
for (int i = 0; i < x0.size(); i++) {
|
|
571
|
+
xc[i] = x0[i];
|
|
572
|
+
}
|
|
573
|
+
for (int i = x0.size(); i < x0.size()+k0.size(); i++) {
|
|
574
|
+
xc[i] = k0[i - x0.size()].intview();
|
|
575
|
+
}
|
|
576
|
+
return xc.shared();
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* \brief Specialization of class SharingTest for the case of fixed
|
|
582
|
+
* cardinalities using IntView as \a View1 and OccurBndsView as \a View2
|
|
583
|
+
*/
|
|
584
|
+
template <>
|
|
585
|
+
class SharingTest<IntView,OccurBndsView> {
|
|
586
|
+
public:
|
|
587
|
+
/// Test whether the problem views in \a x0 contain shared views.
|
|
588
|
+
static bool shared(Space* home,
|
|
589
|
+
ViewArray<IntView>& xs, ViewArray<OccurBndsView>&) {
|
|
590
|
+
return xs.shared();
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
|
|
594
|
+
template <class View, class Card, bool isView>
|
|
595
|
+
ExecStatus
|
|
596
|
+
Bnd<View, Card, isView>::post(Space* home,
|
|
597
|
+
ViewArray<View>& x0,
|
|
598
|
+
ViewArray<Card>& k0,
|
|
599
|
+
bool all) {
|
|
600
|
+
bool cardfix = true;
|
|
601
|
+
bool nolbc = true;
|
|
602
|
+
for (int i = k0.size(); i--; ) {
|
|
603
|
+
cardfix &= k0[i].assigned();
|
|
604
|
+
nolbc &= (k0[i].min() == 0);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
if (SharingTest<View,Card>::shared(home,x0,k0)) {
|
|
608
|
+
new (home) BndImp<View, Card, isView, true>
|
|
609
|
+
(home, x0, k0, cardfix, all, nolbc);
|
|
610
|
+
} else {
|
|
611
|
+
new (home) BndImp<View, Card, isView, false>
|
|
612
|
+
(home, x0, k0, cardfix, all, nolbc);
|
|
613
|
+
}
|
|
614
|
+
return ES_OK;
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
template <class View, class Card, bool isView, bool shared>
|
|
618
|
+
void
|
|
619
|
+
BndImp<View, Card, isView, shared>::flush(void){
|
|
620
|
+
delete lps;
|
|
621
|
+
lps = NULL;
|
|
622
|
+
delete ups;
|
|
623
|
+
ups = NULL;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
}}}
|
|
627
|
+
|
|
628
|
+
// STATISTICS: int-prop
|
|
629
|
+
|