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,236 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Patrick Pekczynski <pekczynski@ps.uni-sb.de>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Patrick Pekczynski, 2004
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3512 $
|
|
11
|
+
*
|
|
12
|
+
* This file is part of Gecode, the generic constraint
|
|
13
|
+
* development environment:
|
|
14
|
+
* http://www.gecode.org
|
|
15
|
+
*
|
|
16
|
+
* See the file "LICENSE" for information on usage and
|
|
17
|
+
* redistribution of this file, and for a
|
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
namespace Gecode { namespace Int { namespace GCC {
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* \brief Upper Bounds constraint (UBC) stating
|
|
25
|
+
* \f$ \forall j \in \{0, \dots, |k|-1\}:
|
|
26
|
+
* \#\{i\in\{0, \dots, |x| - 1\} | x_i = card(k_j)\} \leq max(k_j)\f$
|
|
27
|
+
* Hence the ubc constraints the variables such that no value occurs
|
|
28
|
+
* more often than specified by its upper cardinality bound.
|
|
29
|
+
* \param home current space
|
|
30
|
+
* \param x the problem variables
|
|
31
|
+
* \param nb denotes number of unique bounds
|
|
32
|
+
* \param hall contains information about the hall structure of the problem
|
|
33
|
+
* (cf. HallInfo)
|
|
34
|
+
* \param rank ranking information about the variable bounds (cf. Rank)
|
|
35
|
+
* \param ups partial sum structure for the upper cardinality bounds (cf. PartialSum)
|
|
36
|
+
* \param mu permutation \f$ \mu \f$ such that
|
|
37
|
+
* \f$ \forall i\in \{0, \dots, |x|-2\}:
|
|
38
|
+
* max(x_{\mu(i)}) \leq max(x_{\mu(i+1)})\f$
|
|
39
|
+
* \param nu permutation \f$ \nu \f$ such that
|
|
40
|
+
* \f$ \forall i\in \{0, \dots, |x|-2\}:
|
|
41
|
+
* min(x_{\mu(i)}) \leq min(x_{\mu(i+1)})\f$
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
template <class View, class Card, bool shared>
|
|
45
|
+
inline ExecStatus
|
|
46
|
+
ubc(Space* home, ViewArray<View>& x, int& nb,
|
|
47
|
+
HallInfo hall[], Rank rank[],
|
|
48
|
+
PartialSum<Card>* ups,
|
|
49
|
+
int mu[], int nu[]){
|
|
50
|
+
ExecStatus es = ES_FIX;
|
|
51
|
+
|
|
52
|
+
int rightmost = nb + 1; // rightmost accesible value in bounds
|
|
53
|
+
int bsize = nb + 2; // number of unique bounds including sentinels
|
|
54
|
+
|
|
55
|
+
//Narrow lower bounds (UBC)
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Initializing tree structure with the values from bounds
|
|
59
|
+
* and the interval capacities of neighboured values
|
|
60
|
+
* from left to right
|
|
61
|
+
*/
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
hall[0].h = 0;
|
|
65
|
+
hall[0].t = 0;
|
|
66
|
+
hall[0].d = 0;
|
|
67
|
+
|
|
68
|
+
for (int i = 1; i < bsize; i++) {
|
|
69
|
+
int pred = i - 1;
|
|
70
|
+
hall[i].h = pred;
|
|
71
|
+
hall[i].t = pred;
|
|
72
|
+
hall[i].d = ups->sumup(hall[pred].bounds, hall[i].bounds - 1);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
int n = x.size();
|
|
76
|
+
|
|
77
|
+
for (int i = 0; i < n; i++) {
|
|
78
|
+
|
|
79
|
+
// visit intervals in increasing max order
|
|
80
|
+
int x0 = rank[mu[i]].min;
|
|
81
|
+
int succ = x0 + 1;
|
|
82
|
+
int y = rank[mu[i]].max;
|
|
83
|
+
int z = pathmax_t(hall, succ);
|
|
84
|
+
int j = hall[z].t;
|
|
85
|
+
|
|
86
|
+
/* DOMINATION:
|
|
87
|
+
* v^i_j denotes
|
|
88
|
+
* unused values in the current interval. If the difference d
|
|
89
|
+
* between to critical capacities v^i_j and v^i_z
|
|
90
|
+
* is equal to zero, j dominates z
|
|
91
|
+
*
|
|
92
|
+
* i.e. [hall[l].bounds, hall[nb+1].bounds] is not left-maximal and
|
|
93
|
+
* [hall[j].bounds, hall[l].bounds] is a Hall set iff
|
|
94
|
+
* [hall[j].bounds, hall[l].bounds] processing a variable x_i uses up a value in the interval
|
|
95
|
+
* [hall[z].bounds,hall[z+1].bounds] according to the intervals
|
|
96
|
+
* capacity. Therefore, if d = 0
|
|
97
|
+
* the considered value has already been used by processed variables
|
|
98
|
+
* m-times, where m = u[i] for value v_i. Since this value must not
|
|
99
|
+
* be reconsidered the path can be compressed
|
|
100
|
+
*/
|
|
101
|
+
if (--hall[z].d == 0){
|
|
102
|
+
hall[z].t = z + 1;
|
|
103
|
+
z = pathmax_t(hall, hall[z].t);
|
|
104
|
+
if (z >= bsize) {
|
|
105
|
+
z--;
|
|
106
|
+
}
|
|
107
|
+
hall[z].t = j;
|
|
108
|
+
}
|
|
109
|
+
pathset_t(hall, succ, z, z); // path compression
|
|
110
|
+
/* NEGATIVE CAPACITY:
|
|
111
|
+
* A negative capacity results in a failure.Since a
|
|
112
|
+
* negative capacity signals that the number of variables
|
|
113
|
+
* whose domain is contained in the set S is larger than
|
|
114
|
+
* the maximum capacity of S => UBC is not satisfiable,
|
|
115
|
+
* i.e. there are more variables than values to instantiate them
|
|
116
|
+
*/
|
|
117
|
+
|
|
118
|
+
if (hall[z].d < ups->sumup(hall[y].bounds, hall[z].bounds - 1)){
|
|
119
|
+
return ES_FAILED;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/* UPDATING LOWER BOUND:
|
|
123
|
+
* If the lower bound min_i lies inside a Hall interval [a,b]
|
|
124
|
+
* i.e. a <= min_i <=b <= max_i
|
|
125
|
+
* min_i is set to min_i := b+1
|
|
126
|
+
*/
|
|
127
|
+
if (hall[x0].h > x0) {
|
|
128
|
+
int w = pathmax_h(hall, hall[x0].h);
|
|
129
|
+
int m = hall[w].bounds;
|
|
130
|
+
|
|
131
|
+
ModEvent me = x[mu[i]].gq(home, m);
|
|
132
|
+
if (me_failed(me)) {
|
|
133
|
+
return ES_FAILED;
|
|
134
|
+
}
|
|
135
|
+
if (me_modified(me) && (m != x[mu[i]].min())) {
|
|
136
|
+
es = ES_NOFIX;
|
|
137
|
+
}
|
|
138
|
+
if (shared && me_modified(me)) {
|
|
139
|
+
es = ES_NOFIX;
|
|
140
|
+
}
|
|
141
|
+
pathset_h(hall, x0, w, w); // path compression
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* ZEROTEST:
|
|
145
|
+
* (using the difference between capacity pointers)
|
|
146
|
+
* zero capacity => the difference between critical capacity
|
|
147
|
+
* pointers is equal to the maximum capacity of the interval,i.e.
|
|
148
|
+
* the number of variables whose domain is contained in the
|
|
149
|
+
* interval is equal to the sum over all u[i] for a value v_i that
|
|
150
|
+
* lies in the Hall-Intervall which can also be thought of as a
|
|
151
|
+
* Hall-Set
|
|
152
|
+
*
|
|
153
|
+
* ZeroTestLemma: Let k and l be succesive critical indices.
|
|
154
|
+
* v^i_k=0 => v^i_k = max_i+1-l+d
|
|
155
|
+
* <=> v^i_k = y + 1 - z + d
|
|
156
|
+
* <=> d = z-1-y
|
|
157
|
+
* if this equation holds the interval [j,z-1] is a hall intervall
|
|
158
|
+
*/
|
|
159
|
+
|
|
160
|
+
if (hall[z].d == ups->sumup(hall[y].bounds, hall[z].bounds - 1)) {
|
|
161
|
+
/*
|
|
162
|
+
*mark hall interval [j,z-1]
|
|
163
|
+
* hall pointers form a path to the upper bound of the interval
|
|
164
|
+
*/
|
|
165
|
+
int predj = j - 1;
|
|
166
|
+
pathset_h(hall, hall[y].h, predj, y);
|
|
167
|
+
hall[y].h = predj;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/* Narrow upper bounds (UBC)
|
|
172
|
+
* symmetric to the narrowing of the lower bounds
|
|
173
|
+
*/
|
|
174
|
+
for (int i = 0; i < rightmost; i++) {
|
|
175
|
+
int succ = i + 1;
|
|
176
|
+
hall[i].h = succ;
|
|
177
|
+
hall[i].t = succ;
|
|
178
|
+
hall[i].d = ups->sumup(hall[i].bounds, hall[succ].bounds - 1);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
for (int i = n; i--; ) {
|
|
182
|
+
// visit intervals in decreasing min order
|
|
183
|
+
int x0 = rank[nu[i]].max;
|
|
184
|
+
int pred = x0 - 1;
|
|
185
|
+
int y = rank[nu[i]].min;
|
|
186
|
+
int z = pathmin_t(hall, pred);
|
|
187
|
+
int j = hall[z].t;
|
|
188
|
+
|
|
189
|
+
// DOMINATION:
|
|
190
|
+
if (--hall[z].d == 0){
|
|
191
|
+
hall[z].t = z - 1;
|
|
192
|
+
z = pathmin_t(hall, hall[z].t);
|
|
193
|
+
hall[z].t = j;
|
|
194
|
+
}
|
|
195
|
+
pathset_t(hall, pred, z, z);
|
|
196
|
+
|
|
197
|
+
// NEGATIVE CAPACITY:
|
|
198
|
+
if (hall[z].d < ups->sumup(hall[z].bounds,hall[y].bounds-1)){
|
|
199
|
+
return ES_FAILED;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/* UPDATING UPPER BOUND:
|
|
203
|
+
* If the upper bound max_i lies inside a Hall interval [a,b]
|
|
204
|
+
* i.e. min_i <= a <= max_i < b
|
|
205
|
+
* max_i is set to max_i := a-1
|
|
206
|
+
*/
|
|
207
|
+
if (hall[x0].h < x0) {
|
|
208
|
+
int w = pathmin_h(hall, hall[x0].h);
|
|
209
|
+
int m = hall[w].bounds - 1;
|
|
210
|
+
ModEvent me = x[nu[i]].lq(home, m);
|
|
211
|
+
if (me_failed(me)) {
|
|
212
|
+
return ES_FAILED;
|
|
213
|
+
}
|
|
214
|
+
if (me_modified(me) && (m != x[nu[i]].max())) {
|
|
215
|
+
es = ES_NOFIX;
|
|
216
|
+
}
|
|
217
|
+
if (me_modified(me) && shared) {
|
|
218
|
+
es = ES_NOFIX;
|
|
219
|
+
}
|
|
220
|
+
pathset_h(hall, x0, w, w);
|
|
221
|
+
}
|
|
222
|
+
// ZEROTEST
|
|
223
|
+
if (hall[z].d == ups->sumup(hall[z].bounds, hall[y].bounds - 1)) {
|
|
224
|
+
//mark hall interval [y,j]
|
|
225
|
+
int succj = j + 1;
|
|
226
|
+
pathset_h(hall, hall[y].h, succj, y);
|
|
227
|
+
hall[y].h = succj;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return es;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
}}}
|
|
234
|
+
|
|
235
|
+
// STATISTICS: int-prop
|
|
236
|
+
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Patrick Pekczynski <pekczynski@ps.uni-sb.de>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Patrick Pekczynski, 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
|
+
namespace Gecode { namespace Int { namespace GCC {
|
|
22
|
+
/// \brief Perform value propagation.
|
|
23
|
+
template <class View, class Card, bool isView>
|
|
24
|
+
inline ExecStatus
|
|
25
|
+
prop_val(Space* home, ViewArray<View>& x, ViewArray<Card>& k,
|
|
26
|
+
bool& _cardall){
|
|
27
|
+
|
|
28
|
+
bool mod = false;
|
|
29
|
+
int n = x.size();
|
|
30
|
+
int m = k.size();
|
|
31
|
+
|
|
32
|
+
// count[i] denotes how often value k[i].card() occurs in x
|
|
33
|
+
GECODE_AUTOARRAY(int, count, m);
|
|
34
|
+
// stack of values having reached their maximum occurence
|
|
35
|
+
GECODE_AUTOARRAY(int, rem, m);
|
|
36
|
+
// keep track whether a value is already on the stack
|
|
37
|
+
GECODE_AUTOARRAY(bool, onrem, m);
|
|
38
|
+
// stacksize
|
|
39
|
+
int rs = 0;
|
|
40
|
+
|
|
41
|
+
// initialization
|
|
42
|
+
int sum_min = 0;
|
|
43
|
+
int removed = 0;
|
|
44
|
+
for (int i = m; i--; ) {
|
|
45
|
+
|
|
46
|
+
removed += k[i].counter();
|
|
47
|
+
sum_min += k[i].min();
|
|
48
|
+
|
|
49
|
+
count[i] = 0;
|
|
50
|
+
onrem[i] = false;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
for (int i = m; i--; ) {
|
|
54
|
+
// less than or equal than the total number of free variables
|
|
55
|
+
// to satisfy the required occurences
|
|
56
|
+
if (!k[i].assigned()) {
|
|
57
|
+
int mub = n + removed - (sum_min - k[i].min());
|
|
58
|
+
ModEvent me = k[i].lq(home, mub);
|
|
59
|
+
GECODE_ME_CHECK(me);
|
|
60
|
+
mod |= (me_modified(me) && k[i].max() != mub);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Due to lookup operation counting requires O(n \cdot log(n)) time
|
|
65
|
+
bool all_assigned = true;
|
|
66
|
+
// number of assigned views with respect to the current problem size
|
|
67
|
+
int noa = 0;
|
|
68
|
+
// total number of assigned views wrt. the original probem size
|
|
69
|
+
int t_noa = 0;
|
|
70
|
+
for (int i = n; i--; ) {
|
|
71
|
+
bool b = x[i].assigned();
|
|
72
|
+
all_assigned &= b;
|
|
73
|
+
if (b) {
|
|
74
|
+
int idx = lookupValue(k,x[i].val());
|
|
75
|
+
if (idx == -1) {
|
|
76
|
+
return ES_FAILED;
|
|
77
|
+
}
|
|
78
|
+
count[idx]++;
|
|
79
|
+
noa++;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// number of unassigned views
|
|
84
|
+
int non = x.size() - noa;
|
|
85
|
+
|
|
86
|
+
// check for subsumption
|
|
87
|
+
if (all_assigned) {
|
|
88
|
+
|
|
89
|
+
for (int i = m; i--; ) {
|
|
90
|
+
int ci = count[i] + k[i].counter();
|
|
91
|
+
if (!(k[i].min() <= ci && ci <= k[i].max())) {
|
|
92
|
+
return ES_FAILED;
|
|
93
|
+
}
|
|
94
|
+
// the solution contains ci occurences of value k[i].card();
|
|
95
|
+
if (isView) {
|
|
96
|
+
if (!k[i].assigned()) {
|
|
97
|
+
ModEvent me = k[i].eq(home, ci);
|
|
98
|
+
GECODE_ME_CHECK(me);
|
|
99
|
+
mod |= k[i].assigned();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return ES_SUBSUMED;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// total number of unsatisfied miminum occurences
|
|
107
|
+
int req = 0;
|
|
108
|
+
|
|
109
|
+
// number of values whose min requirements are not yet met
|
|
110
|
+
int n_r = 0;
|
|
111
|
+
|
|
112
|
+
// if only one value is unsatisified single holds the index of that value
|
|
113
|
+
int single = 0;
|
|
114
|
+
|
|
115
|
+
for (int i = m; i--; ) {
|
|
116
|
+
int ci = count[i] + k[i].counter();
|
|
117
|
+
t_noa += ci;
|
|
118
|
+
if (ci == 0) { // this works
|
|
119
|
+
req += k[i].min();
|
|
120
|
+
n_r++;
|
|
121
|
+
single = i;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// number of unassigned views cannot satisfy
|
|
125
|
+
// the required minimum occurence
|
|
126
|
+
if (req > non) {
|
|
127
|
+
return ES_FAILED;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// if only one unsatisfied occurences is left
|
|
132
|
+
if (req == non && n_r == 1) {
|
|
133
|
+
for (int i = n; i--; ) {
|
|
134
|
+
// try to assign it
|
|
135
|
+
if (!x[i].assigned()) {
|
|
136
|
+
ModEvent me = x[i].eq(home, k[single].card());
|
|
137
|
+
count[single]++;
|
|
138
|
+
GECODE_ME_CHECK(me);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
for (int i = m; i--; ) {
|
|
143
|
+
int ci = count[i] + k[i].counter();
|
|
144
|
+
// consistency check
|
|
145
|
+
if (!(k[i].min() <= ci && ci <= k[i].max())) {
|
|
146
|
+
return ES_FAILED;
|
|
147
|
+
}
|
|
148
|
+
// the solution contains ci occurences of value k[i].card();
|
|
149
|
+
if (isView) {
|
|
150
|
+
if (!k[i].assigned()) {
|
|
151
|
+
ModEvent me = k[i].eq(home, ci);
|
|
152
|
+
GECODE_ME_CHECK(me);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return ES_SUBSUMED;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
for (int i = m; i--; ) {
|
|
160
|
+
int ci = count[i] + k[i].counter();
|
|
161
|
+
if (ci == k[i].max() && !onrem[i]) {
|
|
162
|
+
rem[rs] = k[i].card();
|
|
163
|
+
k[i].counter(ci);
|
|
164
|
+
rs++;
|
|
165
|
+
onrem[i] = true;
|
|
166
|
+
if (isView) {
|
|
167
|
+
// the solution contains ci occurences of value k[i].card();
|
|
168
|
+
if (!k[i].assigned()) {
|
|
169
|
+
ModEvent me = k[i].eq(home, ci);
|
|
170
|
+
GECODE_ME_CHECK(me);
|
|
171
|
+
mod |= k[i].assigned();
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
if (ci > k[i].max()) {
|
|
176
|
+
return ES_FAILED;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// in case of variable cardinalities
|
|
180
|
+
if (isView) {
|
|
181
|
+
if (!k[i].assigned()) {
|
|
182
|
+
if (ci > k[i].min()) {
|
|
183
|
+
ModEvent me = k[i].gq(home, ci);
|
|
184
|
+
GECODE_ME_CHECK(me);
|
|
185
|
+
mod |= k[i].assigned();
|
|
186
|
+
mod |= (me_modified(me) && k[i].min() != ci);
|
|
187
|
+
}
|
|
188
|
+
int occupied = t_noa - ci;
|
|
189
|
+
int mub = x.size() + removed - occupied;
|
|
190
|
+
|
|
191
|
+
ModEvent me = k[i].lq(home, mub);
|
|
192
|
+
GECODE_ME_CHECK(me);
|
|
193
|
+
mod |= k[i].assigned();
|
|
194
|
+
mod |= (me_failed(me) && k[i].max() != mub);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// reset counter
|
|
199
|
+
count[i] = 0;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// reduce the problem size
|
|
203
|
+
for (int i = n; i--; ) {
|
|
204
|
+
bool b = x[i].assigned();
|
|
205
|
+
if (b) {
|
|
206
|
+
int idx = lookupValue(k,x[i].val());
|
|
207
|
+
if (idx == -1) {
|
|
208
|
+
return ES_FAILED;
|
|
209
|
+
}
|
|
210
|
+
if (onrem[idx]) {
|
|
211
|
+
x[i] = x[--n];
|
|
212
|
+
x.size(n);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// remove alredy satisfied values
|
|
218
|
+
if (rs > 0) {
|
|
219
|
+
IntSet remset(&rem[0], rs);
|
|
220
|
+
IntSetRanges rr(remset);
|
|
221
|
+
for (int i = x.size(); i--;) {
|
|
222
|
+
if (!x[i].assigned()) {
|
|
223
|
+
ModEvent me = x[i].minus(home, rr);
|
|
224
|
+
if (me_failed(me)) {
|
|
225
|
+
return ES_FAILED;
|
|
226
|
+
}
|
|
227
|
+
mod |= x[i].assigned();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
all_assigned = true;
|
|
233
|
+
|
|
234
|
+
for (int i = x.size(); i--; ) {
|
|
235
|
+
bool b = x[i].assigned();
|
|
236
|
+
all_assigned &= b;
|
|
237
|
+
if (b) {
|
|
238
|
+
int idx = lookupValue(k,x[i].val());
|
|
239
|
+
if (idx == -1) {
|
|
240
|
+
return ES_FAILED;
|
|
241
|
+
}
|
|
242
|
+
count[idx]++;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
if (all_assigned) {
|
|
247
|
+
for (int i = k.size(); i--; ) {
|
|
248
|
+
int ci = count[i] + k[i].counter();
|
|
249
|
+
if (!(k[i].min() <= ci && ci <= k[i].max())) {
|
|
250
|
+
return ES_FAILED;
|
|
251
|
+
}
|
|
252
|
+
// the solution contains ci occurences of value k[i].card();
|
|
253
|
+
if (isView) {
|
|
254
|
+
if (!k[i].assigned()) {
|
|
255
|
+
ModEvent me = k[i].eq(home, ci);
|
|
256
|
+
GECODE_ME_CHECK(me);
|
|
257
|
+
mod |= k[i].assigned();
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
return ES_SUBSUMED;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
if (isView) {
|
|
265
|
+
// check again consistnecy of cardinalities
|
|
266
|
+
int reqmin = 0;
|
|
267
|
+
int allmax = 0;
|
|
268
|
+
m = k.size();
|
|
269
|
+
n = x.size();
|
|
270
|
+
for (int i = m; i--; ) {
|
|
271
|
+
int ci = k[i].counter();
|
|
272
|
+
if (ci > k[i].max() ) {
|
|
273
|
+
return ES_FAILED;
|
|
274
|
+
} else {
|
|
275
|
+
allmax += (k[i].max() - ci);
|
|
276
|
+
if (ci < k[i].min()) {
|
|
277
|
+
reqmin += (k[i].min() - ci);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (k[i].min() > n) {
|
|
281
|
+
return ES_FAILED;
|
|
282
|
+
}
|
|
283
|
+
if (!k[i].assigned()) {
|
|
284
|
+
ModEvent me = k[i].lq(home, n);
|
|
285
|
+
if (me_failed(me)) {
|
|
286
|
+
return ES_FAILED;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (n < reqmin) {
|
|
292
|
+
return ES_FAILED;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
if (_cardall && allmax < n) {
|
|
296
|
+
return ES_FAILED;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
return mod ? ES_NOFIX : ES_FIX;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/*
|
|
303
|
+
* The propagator proper
|
|
304
|
+
*
|
|
305
|
+
*/
|
|
306
|
+
|
|
307
|
+
template <class View, class Card, bool isView>
|
|
308
|
+
inline
|
|
309
|
+
Val<View, Card, isView>::Val(Space* home, ViewArray<View>& x0,
|
|
310
|
+
ViewArray<Card>& k0,
|
|
311
|
+
bool all)
|
|
312
|
+
:Propagator(home,true), x(x0), k(k0), card_all(all){
|
|
313
|
+
x.subscribe(home, this, PC_INT_VAL);
|
|
314
|
+
k.subscribe(home, this, PC_INT_VAL);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
template <class View, class Card, bool isView>
|
|
318
|
+
forceinline
|
|
319
|
+
Val<View, Card, isView>::Val(Space* home, bool share,
|
|
320
|
+
Val<View, Card, isView>& p)
|
|
321
|
+
: Propagator(home,share,p), card_all(p.card_all){
|
|
322
|
+
x.update(home,share, p.x);
|
|
323
|
+
k.update(home,share, p.k);
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
template <class View, class Card, bool isView>
|
|
327
|
+
size_t
|
|
328
|
+
Val<View, Card, isView>::dispose(Space* home) {
|
|
329
|
+
if (!home->failed()) {
|
|
330
|
+
x.cancel(home,this, PC_INT_VAL);
|
|
331
|
+
k.cancel(home,this, PC_INT_VAL);
|
|
332
|
+
}
|
|
333
|
+
(void) Propagator::dispose(home);
|
|
334
|
+
return sizeof(*this);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
template <class View, class Card, bool isView>
|
|
338
|
+
Actor*
|
|
339
|
+
Val<View, Card, isView>::copy(Space* home, bool share) {
|
|
340
|
+
return new (home) Val<View, Card, isView>(home,share,*this);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
template <class View, class Card, bool isView>
|
|
344
|
+
ExecStatus
|
|
345
|
+
Val<View, Card, isView>::post(Space* home,
|
|
346
|
+
ViewArray<View>& x0,
|
|
347
|
+
ViewArray<Card>& k0, bool all) {
|
|
348
|
+
new (home) Val<View, Card, isView>(home, x0, k0, all);
|
|
349
|
+
return ES_OK;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* \brief Complexity depends on the time needed for value lookup in \a k
|
|
354
|
+
* which is O(n log n).
|
|
355
|
+
*
|
|
356
|
+
*/
|
|
357
|
+
template <class View, class Card, bool isView>
|
|
358
|
+
PropCost
|
|
359
|
+
Val<View, Card, isView>::cost (void) const {
|
|
360
|
+
return PC_LINEAR_HI;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
template <class View, class Card, bool isView>
|
|
364
|
+
ExecStatus
|
|
365
|
+
Val<View, Card, isView>::propagate(Space* home) {
|
|
366
|
+
assert(x.size() > 0);
|
|
367
|
+
return prop_val<View, Card, isView>(home, x, k, card_all);
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
}}}
|
|
371
|
+
|
|
372
|
+
// STATISTICS: int-prop
|
|
373
|
+
|