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,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Contributing authors:
|
|
6
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
7
|
+
*
|
|
8
|
+
* Copyright:
|
|
9
|
+
* Guido Tack, 2004, 2005
|
|
10
|
+
*
|
|
11
|
+
* Last modified:
|
|
12
|
+
* $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
|
|
13
|
+
* $Revision: 3188 $
|
|
14
|
+
*
|
|
15
|
+
* This file is part of Gecode, the generic constraint
|
|
16
|
+
* development environment:
|
|
17
|
+
* http://www.gecode.org
|
|
18
|
+
*
|
|
19
|
+
* See the file "LICENSE" for information on usage and
|
|
20
|
+
* redistribution of this file, and for a
|
|
21
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
#include "gecode/set.hh"
|
|
26
|
+
#include "gecode/iter.hh"
|
|
27
|
+
#include "gecode/set/rel.hh"
|
|
28
|
+
#include "gecode/set/rel-op.hh"
|
|
29
|
+
|
|
30
|
+
namespace Gecode {
|
|
31
|
+
using namespace Gecode::Set;
|
|
32
|
+
using namespace Gecode::Set::Rel;
|
|
33
|
+
using namespace Gecode::Set::RelOp;
|
|
34
|
+
|
|
35
|
+
void
|
|
36
|
+
rel(Space* home, SetVar x, SetOpType op, SetVar y, SetRelType r, SetVar z) {
|
|
37
|
+
rel_op_post<SetView,SetView,SetView>(home, x, op, y, r, z);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
void
|
|
41
|
+
rel(Space* home, SetOpType op, const SetVarArgs& x, SetVar y) {
|
|
42
|
+
if (home->failed()) return;
|
|
43
|
+
ViewArray<SetView> xa(home,x);
|
|
44
|
+
switch(op) {
|
|
45
|
+
case SOT_UNION:
|
|
46
|
+
GECODE_ES_FAIL(home,(RelOp::UnionN<SetView,SetView>::post(home, xa, y)));
|
|
47
|
+
break;
|
|
48
|
+
case SOT_DUNION:
|
|
49
|
+
GECODE_ES_FAIL(home,
|
|
50
|
+
(RelOp::PartitionN<SetView,SetView>::post(home, xa, y)));
|
|
51
|
+
break;
|
|
52
|
+
case SOT_INTER:
|
|
53
|
+
{
|
|
54
|
+
GECODE_ES_FAIL(home,
|
|
55
|
+
(RelOp::IntersectionN<SetView,SetView>
|
|
56
|
+
::post(home, xa, y)));
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
case SOT_MINUS:
|
|
60
|
+
throw InvalidRelation("rel minus");
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
void
|
|
66
|
+
rel(Space* home, SetOpType op, const IntVarArgs& x, SetVar y) {
|
|
67
|
+
if (home->failed()) return;
|
|
68
|
+
ViewArray<SingletonView> xa(home,x.size());
|
|
69
|
+
for (int i=x.size(); i--;) {
|
|
70
|
+
Int::IntView iv(x[i]);
|
|
71
|
+
SingletonView sv(iv);
|
|
72
|
+
xa[i] = sv;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
switch(op) {
|
|
76
|
+
case SOT_UNION:
|
|
77
|
+
GECODE_ES_FAIL(home,(RelOp::UnionN<SingletonView,SetView>
|
|
78
|
+
::post(home, xa, y)));
|
|
79
|
+
break;
|
|
80
|
+
case SOT_DUNION:
|
|
81
|
+
GECODE_ES_FAIL(home,(RelOp::PartitionN<SingletonView,SetView>
|
|
82
|
+
::post(home, xa, y)));
|
|
83
|
+
break;
|
|
84
|
+
case SOT_INTER:
|
|
85
|
+
GECODE_ES_FAIL(home,
|
|
86
|
+
(RelOp::IntersectionN<SingletonView,SetView>
|
|
87
|
+
::post(home, xa, y)));
|
|
88
|
+
break;
|
|
89
|
+
case SOT_MINUS:
|
|
90
|
+
throw InvalidRelation("rel minus");
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// STATISTICS: set-post
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
* Christian Schulte <schulte@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Contributing authors:
|
|
7
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
8
|
+
*
|
|
9
|
+
* Copyright:
|
|
10
|
+
* Guido Tack, 2004
|
|
11
|
+
* Christian Schulte, 2004
|
|
12
|
+
* Gabor Szokoli, 2004
|
|
13
|
+
*
|
|
14
|
+
* Last modified:
|
|
15
|
+
* $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
|
|
16
|
+
* $Revision: 3188 $
|
|
17
|
+
*
|
|
18
|
+
* This file is part of Gecode, the generic constraint
|
|
19
|
+
* development environment:
|
|
20
|
+
* http://www.gecode.org
|
|
21
|
+
*
|
|
22
|
+
* See the file "LICENSE" for information on usage and
|
|
23
|
+
* redistribution of this file, and for a
|
|
24
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
#ifndef __GECODE_SET_RELOP_HH__
|
|
29
|
+
#define __GECODE_SET_RELOP_HH__
|
|
30
|
+
|
|
31
|
+
#include "gecode/set.hh"
|
|
32
|
+
#include "gecode/iter.hh"
|
|
33
|
+
#include "gecode/set/rel.hh"
|
|
34
|
+
|
|
35
|
+
namespace Gecode { namespace Set { namespace RelOp {
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* \namespace Gecode::Set::RelOp
|
|
39
|
+
* \brief Standard set operation propagators
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* \brief %Propagator for the superset of intersection
|
|
44
|
+
*
|
|
45
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
46
|
+
* \ingroup FuncSetProp
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
template <class View0, class View1, class View2>
|
|
50
|
+
class SuperOfInter :
|
|
51
|
+
public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
52
|
+
View2,PC_SET_CLUB> {
|
|
53
|
+
protected:
|
|
54
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
55
|
+
View2,PC_SET_CLUB>::x0;
|
|
56
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
57
|
+
View2,PC_SET_CLUB>::x1;
|
|
58
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
59
|
+
View2,PC_SET_CLUB>::x2;
|
|
60
|
+
/// Constructor for cloning \a p
|
|
61
|
+
SuperOfInter(Space* home, bool share,SuperOfInter& p);
|
|
62
|
+
/// Constructor for posting
|
|
63
|
+
SuperOfInter(Space* home,View0, View1, View2);
|
|
64
|
+
public:
|
|
65
|
+
/// Copy propagator during cloning
|
|
66
|
+
virtual Actor* copy(Space* home,bool);
|
|
67
|
+
/// Perform propagation
|
|
68
|
+
virtual ExecStatus propagate(Space* home);
|
|
69
|
+
/// Post propagator \f$ z \supseteq x \cap y\f$
|
|
70
|
+
static ExecStatus post(Space* home, View0 x, View1 y, View2 z);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* \brief %Propagator for the subset of union
|
|
75
|
+
*
|
|
76
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
77
|
+
* \ingroup FuncSetProp
|
|
78
|
+
*/
|
|
79
|
+
template <class View0, class View1, class View2>
|
|
80
|
+
class SubOfUnion :
|
|
81
|
+
public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
82
|
+
View2,PC_SET_ANY> {
|
|
83
|
+
protected:
|
|
84
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
85
|
+
View2,PC_SET_ANY>::x0;
|
|
86
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
87
|
+
View2,PC_SET_ANY>::x1;
|
|
88
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
89
|
+
View2,PC_SET_ANY>::x2;
|
|
90
|
+
/// Constructor for cloning \a p
|
|
91
|
+
SubOfUnion(Space* home, bool share,SubOfUnion& p);
|
|
92
|
+
/// Constructor for posting
|
|
93
|
+
SubOfUnion(Space* home,View0, View1, View2);
|
|
94
|
+
public:
|
|
95
|
+
/// Copy propagator during cloning
|
|
96
|
+
virtual Actor* copy(Space* home,bool);
|
|
97
|
+
/// Perform propagation
|
|
98
|
+
virtual ExecStatus propagate(Space* home);
|
|
99
|
+
/// Post propagator \f$ z \subseteq x \cap y\f$
|
|
100
|
+
static ExecStatus post(Space* home,View0 x,View1 y,View2 z);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* \brief %Propagator for ternary intersection
|
|
106
|
+
*
|
|
107
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
108
|
+
* \ingroup FuncSetProp
|
|
109
|
+
*/
|
|
110
|
+
template <class View0, class View1, class View2>
|
|
111
|
+
class Intersection:
|
|
112
|
+
public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
113
|
+
View2,PC_SET_ANY> {
|
|
114
|
+
protected:
|
|
115
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
116
|
+
View2,PC_SET_ANY>::x0;
|
|
117
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
118
|
+
View2,PC_SET_ANY>::x1;
|
|
119
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
120
|
+
View2,PC_SET_ANY>::x2;
|
|
121
|
+
/// Constructor for cloning \a p
|
|
122
|
+
Intersection(Space* home, bool share,Intersection& p);
|
|
123
|
+
/// Constructor for posting
|
|
124
|
+
Intersection(Space* home,View0,View1,View2);
|
|
125
|
+
public:
|
|
126
|
+
/// Copy propagator during cloning
|
|
127
|
+
virtual Actor* copy(Space* home,bool);
|
|
128
|
+
/// Perform propagation
|
|
129
|
+
virtual ExecStatus propagate(Space* home);
|
|
130
|
+
/// Post propagator \f$ z=x\cap y\f$
|
|
131
|
+
static ExecStatus post(Space* home,View0 x,View1 y,View2 z);
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* \brief %Propagator for ternary union
|
|
136
|
+
*
|
|
137
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
138
|
+
* \ingroup FuncSetProp
|
|
139
|
+
*/
|
|
140
|
+
template <class View0, class View1, class View2>
|
|
141
|
+
class Union:
|
|
142
|
+
public InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
143
|
+
View2,PC_SET_ANY> {
|
|
144
|
+
protected:
|
|
145
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
146
|
+
View2,PC_SET_ANY>::x0;
|
|
147
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
148
|
+
View2,PC_SET_ANY>::x1;
|
|
149
|
+
using InhomTernaryPropagator<View0,PC_SET_ANY,View1,PC_SET_ANY,
|
|
150
|
+
View2,PC_SET_ANY>::x2;
|
|
151
|
+
/// Constructor for cloning \a p
|
|
152
|
+
Union(Space* home, bool share,Union& p);
|
|
153
|
+
/// Constructor for posting
|
|
154
|
+
Union(Space* home,View0,View1,View2);
|
|
155
|
+
public:
|
|
156
|
+
/// Copy propagator during cloning
|
|
157
|
+
virtual Actor* copy(Space* home,bool);
|
|
158
|
+
/// Perform propagation
|
|
159
|
+
virtual ExecStatus propagate(Space* home);
|
|
160
|
+
/// Post propagator \f$ z=x\cup y\f$
|
|
161
|
+
static ExecStatus post(Space* home,View0 x,View1 y,View2 z);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* \brief %Propagator for nary intersection
|
|
166
|
+
*
|
|
167
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
168
|
+
* \ingroup FuncSetProp
|
|
169
|
+
*/
|
|
170
|
+
template <class View0, class View1>
|
|
171
|
+
class IntersectionN : public InhomNaryOnePropagator<View0,PC_SET_ANY,
|
|
172
|
+
View1,PC_SET_ANY> {
|
|
173
|
+
protected:
|
|
174
|
+
using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::x;
|
|
175
|
+
using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::y;
|
|
176
|
+
/// Whether the any views share a variable implementation
|
|
177
|
+
bool shared;
|
|
178
|
+
/// Intersection of the determined \f$x_i\f$ (which are dropped)
|
|
179
|
+
LUBndSet intOfDets;
|
|
180
|
+
/// Constructor for cloning \a p
|
|
181
|
+
IntersectionN(Space* home, bool share,IntersectionN& p);
|
|
182
|
+
/// Constructor for posting
|
|
183
|
+
IntersectionN(Space* home,ViewArray<View0>&, View1);
|
|
184
|
+
public:
|
|
185
|
+
virtual PropCost cost(void) const;
|
|
186
|
+
/// Copy propagator during cloning
|
|
187
|
+
virtual Actor* copy(Space* home,bool);
|
|
188
|
+
/// Perform propagation
|
|
189
|
+
virtual ExecStatus propagate(Space* home);
|
|
190
|
+
/// Post propagator \f$ x = \bigcap_{i\in\{0,\dots,n-1\}} y_i \f$
|
|
191
|
+
static ExecStatus post(Space* home,ViewArray<View0>& y,View1 x);
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* \brief %Propagator for nary union
|
|
196
|
+
*
|
|
197
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
198
|
+
* \ingroup FuncSetProp
|
|
199
|
+
*/
|
|
200
|
+
template <class View0, class View1>
|
|
201
|
+
class UnionN : public InhomNaryOnePropagator<View0,PC_SET_ANY,
|
|
202
|
+
View1,PC_SET_ANY> {
|
|
203
|
+
protected:
|
|
204
|
+
using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::x;
|
|
205
|
+
using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::y;
|
|
206
|
+
/// Whether the any views share a variable implementation
|
|
207
|
+
bool shared;
|
|
208
|
+
/// Union of the determined \f$x_i\f$ (which are dropped)
|
|
209
|
+
GLBndSet unionOfDets;
|
|
210
|
+
/// Constructor for cloning \a p
|
|
211
|
+
UnionN(Space* home, bool share,UnionN& p);
|
|
212
|
+
/// Constructor for posting
|
|
213
|
+
UnionN(Space* home,ViewArray<View0>&,View1);
|
|
214
|
+
public:
|
|
215
|
+
/// Copy propagator during cloning
|
|
216
|
+
virtual Actor* copy(Space* home, bool);
|
|
217
|
+
/// Perform propagation
|
|
218
|
+
virtual ExecStatus propagate(Space* home);
|
|
219
|
+
virtual PropCost cost(void) const;
|
|
220
|
+
/// Post propagator \f$ x = \bigcup_{i\in\{0,\dots,n-1\}} y_i \f$
|
|
221
|
+
static ExecStatus post(Space* home,ViewArray<View0>& y,View1 x);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* \brief %Propagator for nary partition
|
|
227
|
+
*
|
|
228
|
+
* Requires \code #include "gecode/set/rel-op.hh" \endcode
|
|
229
|
+
* \ingroup FuncSetProp
|
|
230
|
+
*/
|
|
231
|
+
template <class View0, class View1>
|
|
232
|
+
class PartitionN : public InhomNaryOnePropagator<View0,PC_SET_ANY,
|
|
233
|
+
View1,PC_SET_ANY> {
|
|
234
|
+
protected:
|
|
235
|
+
using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::x;
|
|
236
|
+
using InhomNaryOnePropagator<View0,PC_SET_ANY,View1,PC_SET_ANY>::y;
|
|
237
|
+
/// Whether the any views share a variable implementation
|
|
238
|
+
bool shared;
|
|
239
|
+
/// Union of the determined \f$x_i\f$ (which are dropped)
|
|
240
|
+
GLBndSet unionOfDets;
|
|
241
|
+
/// Constructor for cloning \a p
|
|
242
|
+
PartitionN(Space* home, bool share,PartitionN& p);
|
|
243
|
+
/// Constructor for posting
|
|
244
|
+
PartitionN(Space* home,ViewArray<View0>&, View1);
|
|
245
|
+
public:
|
|
246
|
+
/// Copy propagator during cloning
|
|
247
|
+
virtual Actor* copy(Space* home,bool);
|
|
248
|
+
/// Perform propagation
|
|
249
|
+
virtual ExecStatus propagate(Space* home);
|
|
250
|
+
virtual PropCost cost(void) const;
|
|
251
|
+
/// Post propagator \f$ x = \biguplus_{i\in\{0,\dots,n-1\}} y_i \f$
|
|
252
|
+
static ExecStatus post(Space* home,ViewArray<View0>& y,View1 x);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
}}}
|
|
256
|
+
|
|
257
|
+
#include "gecode/set/rel-op/common.icc"
|
|
258
|
+
#include "gecode/set/rel-op/superofinter.icc"
|
|
259
|
+
#include "gecode/set/rel-op/subofunion.icc"
|
|
260
|
+
#include "gecode/set/rel-op/inter.icc"
|
|
261
|
+
#include "gecode/set/rel-op/union.icc"
|
|
262
|
+
#include "gecode/set/rel-op/partition.icc"
|
|
263
|
+
#include "gecode/set/rel-op/post.icc"
|
|
264
|
+
|
|
265
|
+
#endif
|
|
266
|
+
|
|
267
|
+
// STATISTICS: set-prop
|
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
* Christian Schulte <schulte@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Contributing authors:
|
|
7
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
8
|
+
*
|
|
9
|
+
* Copyright:
|
|
10
|
+
* Guido Tack, 2004
|
|
11
|
+
* Christian Schulte, 2004
|
|
12
|
+
* Gabor Szokoli, 2004
|
|
13
|
+
*
|
|
14
|
+
* Last modified:
|
|
15
|
+
* $Date: 2006-08-25 17:31:32 +0200 (Fri, 25 Aug 2006) $ by $Author: tack $
|
|
16
|
+
* $Revision: 3573 $
|
|
17
|
+
*
|
|
18
|
+
* This file is part of Gecode, the generic constraint
|
|
19
|
+
* development environment:
|
|
20
|
+
* http://www.gecode.org
|
|
21
|
+
*
|
|
22
|
+
* See the file "LICENSE" for information on usage and
|
|
23
|
+
* redistribution of this file, and for a
|
|
24
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
25
|
+
*
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
namespace Gecode {
|
|
29
|
+
|
|
30
|
+
template <class View0, class View1>
|
|
31
|
+
forceinline bool
|
|
32
|
+
viewarrayshared(const ViewArray<View0>& va,
|
|
33
|
+
const View1& y) {
|
|
34
|
+
return va.shared(y);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
template <>
|
|
38
|
+
forceinline bool
|
|
39
|
+
viewarrayshared<Set::SingletonView,Set::SetView>
|
|
40
|
+
(const ViewArray<Set::SingletonView>& va, const Set::SetView& y) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
template <>
|
|
45
|
+
forceinline bool
|
|
46
|
+
viewarrayshared<Set::ComplementView<Set::SingletonView>,Set::SetView>
|
|
47
|
+
(const ViewArray<Set::ComplementView<Set::SingletonView> >& va,
|
|
48
|
+
const Set::SetView& y) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
template <>
|
|
53
|
+
forceinline bool
|
|
54
|
+
viewarrayshared<Set::ComplementView<Set::SingletonView>,
|
|
55
|
+
Set::ComplementView<Set::SetView> >
|
|
56
|
+
(const ViewArray<Set::ComplementView<Set::SingletonView> >& va,
|
|
57
|
+
const Set::ComplementView<Set::SetView>& y) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
namespace Set { namespace RelOp {
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Detect sharing between 3 variables
|
|
66
|
+
*
|
|
67
|
+
*/
|
|
68
|
+
template <class View0, class View1, class View2>
|
|
69
|
+
forceinline bool
|
|
70
|
+
shared(View0 v0, View1 v1, View2 v2) {
|
|
71
|
+
return shared(v0,v1) || shared(v0,v2) || shared(v1,v2);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
template <class View0, class View1, class View2>
|
|
75
|
+
ExecStatus unionCard(Space* home,
|
|
76
|
+
bool& retmodified, View0& x0, View1& x1, View2& x2) {
|
|
77
|
+
bool modified = false;
|
|
78
|
+
do {
|
|
79
|
+
retmodified |= modified;
|
|
80
|
+
modified = false;
|
|
81
|
+
|
|
82
|
+
{
|
|
83
|
+
LubRanges<View0> x0ub(x0);
|
|
84
|
+
LubRanges<View1> x1ub(x1);
|
|
85
|
+
Iter::Ranges::Inter<LubRanges<View0>, LubRanges<View1> > i1(x0ub,x1ub);
|
|
86
|
+
unsigned int s1 = Iter::Ranges::size(i1);
|
|
87
|
+
unsigned int res = std::max(x0.cardMin()+
|
|
88
|
+
(x1.cardMin()<s1 ?
|
|
89
|
+
0 : x1.cardMin()-s1),
|
|
90
|
+
std::max(x0.cardMin(),
|
|
91
|
+
x1.cardMin()));
|
|
92
|
+
GECODE_ME_CHECK_MODIFIED(modified, x2.cardMin(home,res));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
{
|
|
96
|
+
LubRanges<View0> x0ub(x0);
|
|
97
|
+
LubRanges<View1> x1ub(x1);
|
|
98
|
+
Iter::Ranges::Union<LubRanges<View0>, LubRanges<View1> > u1(x0ub,x1ub);
|
|
99
|
+
unsigned int s1 = Iter::Ranges::size(u1);
|
|
100
|
+
GECODE_ME_CHECK_MODIFIED(modified,
|
|
101
|
+
x2.cardMax(home,
|
|
102
|
+
std::min(x0.cardMax()+x1.cardMax(),s1)));
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (x2.cardMin() > x1.cardMax())
|
|
106
|
+
GECODE_ME_CHECK_MODIFIED(modified,
|
|
107
|
+
x0.cardMin(home,x2.cardMin() - x1.cardMax()));
|
|
108
|
+
|
|
109
|
+
if (x2.cardMin() > x0.cardMax())
|
|
110
|
+
GECODE_ME_CHECK_MODIFIED(modified,
|
|
111
|
+
x1.cardMin(home,x2.cardMin() - x0.cardMax()));
|
|
112
|
+
|
|
113
|
+
GECODE_ME_CHECK_MODIFIED(modified,
|
|
114
|
+
x0.cardMax(home,x2.cardMax()));
|
|
115
|
+
GECODE_ME_CHECK_MODIFIED(modified,
|
|
116
|
+
x1.cardMax(home,x2.cardMax()));
|
|
117
|
+
} while(modified);
|
|
118
|
+
return ES_FIX;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
template <class View0, class View1>
|
|
122
|
+
ExecStatus
|
|
123
|
+
unionNCard(Space* home, bool& modified, ViewArray<View0>& x,
|
|
124
|
+
View1& y, GLBndSet& unionOfDets) {
|
|
125
|
+
int xsize = x.size();
|
|
126
|
+
// Max(Xi.cardMin) <= y.card <= Sum(Xi.cardMax)
|
|
127
|
+
// Xi.card <=y.cardMax
|
|
128
|
+
unsigned int cardMaxSum=unionOfDets.size();
|
|
129
|
+
bool maxValid = true;
|
|
130
|
+
for (int i=xsize; i--; ){
|
|
131
|
+
cardMaxSum+=x[i].cardMax();
|
|
132
|
+
if (cardMaxSum < x[i].cardMax()) { maxValid = false; } //overflow
|
|
133
|
+
GECODE_ME_CHECK_MODIFIED(modified, y.cardMin(home,x[i].cardMin()) );
|
|
134
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMax(home,y.cardMax()) );
|
|
135
|
+
}
|
|
136
|
+
if (maxValid) {
|
|
137
|
+
GECODE_ME_CHECK_MODIFIED(modified, y.cardMax(home,cardMaxSum));
|
|
138
|
+
}
|
|
139
|
+
//y.cardMin - Sum(Xj.cardMax) <= Xi.card
|
|
140
|
+
|
|
141
|
+
//TODO: overflow management is a waste now.
|
|
142
|
+
{
|
|
143
|
+
GECODE_AUTOARRAY(unsigned int, rightSum, xsize);
|
|
144
|
+
rightSum[xsize-1]=0;
|
|
145
|
+
|
|
146
|
+
for (int i=x.size()-1;i--;) {
|
|
147
|
+
rightSum[i] = rightSum[i+1] + x[i+1].cardMax();
|
|
148
|
+
if (rightSum[i] < rightSum[i+1]) {
|
|
149
|
+
//overflow, fill the rest of the array.
|
|
150
|
+
for (int j=i; j>0;j--) {
|
|
151
|
+
rightSum[j]=Limits::Set::card_max;
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
//Size of union of determied vars missing from x sneaked in here:
|
|
158
|
+
unsigned int leftAcc=unionOfDets.size();
|
|
159
|
+
|
|
160
|
+
for (int i=0; i<xsize;i++) {
|
|
161
|
+
unsigned int jsum = leftAcc+rightSum[i];
|
|
162
|
+
//If jsum did not overflow and is less than y.cardMin:
|
|
163
|
+
if (jsum >= leftAcc && jsum < y.cardMin()) {
|
|
164
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMin(home,y.cardMin()-jsum));
|
|
165
|
+
}
|
|
166
|
+
leftAcc += x[i].cardMax();
|
|
167
|
+
if (leftAcc < x[i].cardMax()) {leftAcc = Limits::Set::card_max;}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
//y.cardMin - |U(Xj.ub)| <= Xi.card
|
|
172
|
+
|
|
173
|
+
{
|
|
174
|
+
GECODE_AUTOARRAY(GLBndSet, rightUnion, xsize);
|
|
175
|
+
rightUnion[xsize-1].init(home);
|
|
176
|
+
for (int i=xsize-1;i--;){
|
|
177
|
+
BndSetRanges prev(rightUnion[i+1]);
|
|
178
|
+
LubRanges<View0> prevX(x[i+1]);
|
|
179
|
+
Iter::Ranges::Union< BndSetRanges,LubRanges<View0> >
|
|
180
|
+
iter(prev,prevX);
|
|
181
|
+
rightUnion[i].init(home);
|
|
182
|
+
rightUnion[i].includeI(home, iter);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
//union of determied vars missing from x sneaked in here:
|
|
186
|
+
GLBndSet leftAcc;
|
|
187
|
+
leftAcc.update(home,unionOfDets);
|
|
188
|
+
for (int i=0; i<xsize; i++) {
|
|
189
|
+
BndSetRanges left(leftAcc);
|
|
190
|
+
BndSetRanges right(rightUnion[i]);
|
|
191
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
192
|
+
BndSetRanges> iter(left, right);
|
|
193
|
+
unsigned int unionSize = Iter::Ranges::size(iter);
|
|
194
|
+
if (y.cardMin() > unionSize) {
|
|
195
|
+
GECODE_ME_CHECK_MODIFIED(modified,
|
|
196
|
+
x[i].cardMin(home, y.cardMin() - unionSize) );
|
|
197
|
+
}
|
|
198
|
+
LubRanges<View0> xiub(x[i]);
|
|
199
|
+
leftAcc.includeI(home, xiub);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
for (int i=xsize; i--;)
|
|
203
|
+
rightUnion[i].dispose(home);
|
|
204
|
+
leftAcc.dispose(home);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
//no need for this: |y.lb - U(Xj.cardMax)| <= S.card
|
|
208
|
+
|
|
209
|
+
return ES_NOFIX;
|
|
210
|
+
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/*
|
|
214
|
+
* Xi UB is subset of YUB
|
|
215
|
+
* Subscribes to Y UB
|
|
216
|
+
*/
|
|
217
|
+
template <class View0, class View1>
|
|
218
|
+
ExecStatus
|
|
219
|
+
unionNXiUB(Space* home,
|
|
220
|
+
bool& modified, ViewArray<View0>& x, View1& y,
|
|
221
|
+
GLBndSet & unionOfDets) {
|
|
222
|
+
int xsize = x.size();
|
|
223
|
+
for (int i=xsize; i--; ) {
|
|
224
|
+
LubRanges<View1> yub(y);
|
|
225
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].intersectI(home, yub));
|
|
226
|
+
}
|
|
227
|
+
return ES_FIX;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// cardinality rules for PartitionN constraint
|
|
231
|
+
template <class View0, class View1>
|
|
232
|
+
ExecStatus
|
|
233
|
+
partitionNCard(Space* home,
|
|
234
|
+
bool& modified, ViewArray<View0>& x, View1& y,
|
|
235
|
+
GLBndSet& unionOfDets) {
|
|
236
|
+
unsigned int cardMinSum=unionOfDets.size();
|
|
237
|
+
unsigned int cardMaxSum=unionOfDets.size();
|
|
238
|
+
int xsize = x.size();
|
|
239
|
+
for (int i=xsize; i--; ) {
|
|
240
|
+
cardMinSum+=x[i].cardMin();
|
|
241
|
+
if (cardMinSum < x[i].cardMin()) {
|
|
242
|
+
//sum of mins overflows: fail the space.
|
|
243
|
+
GECODE_ME_CHECK(ME_SET_FAILED);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
GECODE_ME_CHECK_MODIFIED(modified, y.cardMin(home,cardMinSum));
|
|
247
|
+
for (int i=xsize; i--; ) {
|
|
248
|
+
cardMaxSum+=x[i].cardMax();
|
|
249
|
+
if (cardMaxSum < x[i].cardMax()) {
|
|
250
|
+
//sum of maxes overflows: no useful information to tell.
|
|
251
|
+
goto overflow;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
GECODE_ME_CHECK_MODIFIED(modified, y.cardMax(home,cardMaxSum));
|
|
255
|
+
overflow:
|
|
256
|
+
|
|
257
|
+
//Cardinality of each x[i] limited by cardinality of y minus all x[j]s:
|
|
258
|
+
|
|
259
|
+
{
|
|
260
|
+
GECODE_AUTOARRAY(unsigned int, rightMinSum, xsize);
|
|
261
|
+
GECODE_AUTOARRAY(unsigned int, rightMaxSum, xsize);
|
|
262
|
+
rightMinSum[xsize-1]=0;
|
|
263
|
+
rightMaxSum[xsize-1]=0;
|
|
264
|
+
|
|
265
|
+
for (int i=x.size()-1;i--;) {
|
|
266
|
+
rightMaxSum[i] = rightMaxSum[i+1] + x[i+1].cardMax();
|
|
267
|
+
if (rightMaxSum[i] < rightMaxSum[i+1]) {
|
|
268
|
+
//overflow, fill the rest of the array.
|
|
269
|
+
for (int j=i; j>0;j--) {
|
|
270
|
+
rightMaxSum[j]=Limits::Set::card_max;
|
|
271
|
+
}
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
rightMinSum[i] = rightMinSum[i+1] + x[i+1].cardMin();
|
|
276
|
+
if (rightMinSum[i] < rightMinSum[i+1]) {
|
|
277
|
+
//overflow, fail the space
|
|
278
|
+
GECODE_ME_CHECK(ME_SET_FAILED);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
}
|
|
283
|
+
unsigned int leftMinAcc=unionOfDets.size();
|
|
284
|
+
unsigned int leftMaxAcc=unionOfDets.size();
|
|
285
|
+
|
|
286
|
+
for (int i=0; i<xsize;i++) {
|
|
287
|
+
unsigned int maxSum = leftMaxAcc+rightMaxSum[i];
|
|
288
|
+
unsigned int minSum = leftMinAcc+rightMinSum[i];
|
|
289
|
+
//If maxSum did not overflow and is less than y.cardMin:
|
|
290
|
+
if (maxSum >= leftMaxAcc && maxSum < y.cardMin()) {
|
|
291
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMin(home,y.cardMin()-maxSum));
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
//Overflow, fail.
|
|
295
|
+
if (minSum < leftMinAcc || y.cardMax() < minSum) {
|
|
296
|
+
GECODE_ME_CHECK(ME_SET_FAILED);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].cardMax(home,y.cardMax()-minSum));
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
leftMaxAcc += x[i].cardMax();
|
|
303
|
+
if (leftMaxAcc < x[i].cardMax()) {leftMaxAcc = Limits::Set::card_max;}
|
|
304
|
+
leftMinAcc += x[i].cardMin();
|
|
305
|
+
if (leftMinAcc < x[i].cardMin()) {GECODE_ME_CHECK(ME_SET_FAILED);}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return ES_NOFIX;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Xi LB includes YLB minus union Xj UB
|
|
313
|
+
// Xi UB is subset of YUB minus union of Xj LBs
|
|
314
|
+
template <class View0, class View1>
|
|
315
|
+
ExecStatus
|
|
316
|
+
partitionNXi(Space* home,
|
|
317
|
+
bool& modified, ViewArray<View0>& x, View1& y) {
|
|
318
|
+
int xsize = x.size();
|
|
319
|
+
GECODE_AUTOARRAY(GLBndSet, afterUB, xsize);
|
|
320
|
+
GECODE_AUTOARRAY(GLBndSet, afterLB, xsize);
|
|
321
|
+
|
|
322
|
+
{
|
|
323
|
+
GLBndSet sofarAfterUB;
|
|
324
|
+
GLBndSet sofarAfterLB;
|
|
325
|
+
for (int i=xsize; i--;) {
|
|
326
|
+
afterUB[i].init(home);
|
|
327
|
+
afterLB[i].init(home);
|
|
328
|
+
afterUB[i].update(home,sofarAfterUB);
|
|
329
|
+
afterLB[i].update(home,sofarAfterLB);
|
|
330
|
+
LubRanges<View0> xiub(x[i]);
|
|
331
|
+
GlbRanges<View0> xilb(x[i]);
|
|
332
|
+
sofarAfterUB.includeI(home,xiub);
|
|
333
|
+
sofarAfterLB.includeI(home,xilb);
|
|
334
|
+
}
|
|
335
|
+
sofarAfterUB.dispose(home);
|
|
336
|
+
sofarAfterLB.dispose(home);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
{
|
|
340
|
+
GLBndSet sofarBeforeUB;
|
|
341
|
+
GLBndSet sofarBeforeLB;
|
|
342
|
+
for (int i=0; i<xsize; i++) {
|
|
343
|
+
LubRanges<View1> yub(y);
|
|
344
|
+
BndSetRanges slb(sofarBeforeLB);
|
|
345
|
+
BndSetRanges afterlb(afterLB[i]);
|
|
346
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
347
|
+
BndSetRanges> xjlb(slb, afterlb);
|
|
348
|
+
Iter::Ranges::Diff<LubRanges<View1>,
|
|
349
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
350
|
+
BndSetRanges> > diff1(yub, xjlb);
|
|
351
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].intersectI(home,diff1));
|
|
352
|
+
|
|
353
|
+
GlbRanges<View1> ylb(y);
|
|
354
|
+
BndSetRanges sub(sofarBeforeUB);
|
|
355
|
+
BndSetRanges afterub(afterUB[i]);
|
|
356
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
357
|
+
BndSetRanges> xjub(sub, afterub);
|
|
358
|
+
Iter::Ranges::Diff<GlbRanges<View1>,
|
|
359
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
360
|
+
BndSetRanges> > diff2(ylb, xjub);
|
|
361
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].includeI(home,diff2));
|
|
362
|
+
|
|
363
|
+
LubRanges<View0> xiub(x[i]);
|
|
364
|
+
GlbRanges<View0> xilb(x[i]);
|
|
365
|
+
sofarBeforeUB.includeI(home,xiub);
|
|
366
|
+
sofarBeforeLB.includeI(home,xilb);
|
|
367
|
+
}
|
|
368
|
+
sofarBeforeLB.dispose(home);
|
|
369
|
+
sofarBeforeUB.dispose(home);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
for (int i=xsize;i--;) {
|
|
373
|
+
afterUB[i].dispose(home);
|
|
374
|
+
afterLB[i].dispose(home);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
return ES_NOFIX;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// Xi UB is subset of YUB minus union of Xj LBs
|
|
381
|
+
template <class View0, class View1>
|
|
382
|
+
ExecStatus
|
|
383
|
+
partitionNXiUB(Space* home,
|
|
384
|
+
bool& modified, ViewArray<View0>& x, View1& y,
|
|
385
|
+
GLBndSet& unionOfDets) {
|
|
386
|
+
int xsize = x.size();
|
|
387
|
+
GECODE_AUTOARRAY(GLBndSet, afterLB, xsize);
|
|
388
|
+
|
|
389
|
+
{
|
|
390
|
+
GLBndSet sofarAfterLB;
|
|
391
|
+
for (int i=xsize; i--;) {
|
|
392
|
+
afterLB[i].init(home);
|
|
393
|
+
afterLB[i].update(home,sofarAfterLB);
|
|
394
|
+
GlbRanges<View0> xilb(x[i]);
|
|
395
|
+
sofarAfterLB.includeI(home,xilb);
|
|
396
|
+
}
|
|
397
|
+
sofarAfterLB.dispose(home);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
{
|
|
401
|
+
GLBndSet sofarBeforeLB;
|
|
402
|
+
sofarBeforeLB.update(home,unionOfDets);
|
|
403
|
+
for (int i=0; i<xsize; i++) {
|
|
404
|
+
LubRanges<View1> yub(y);
|
|
405
|
+
BndSetRanges slb(sofarBeforeLB);
|
|
406
|
+
BndSetRanges afterlb(afterLB[i]);
|
|
407
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
408
|
+
BndSetRanges> xjlb(slb, afterlb);
|
|
409
|
+
Iter::Ranges::Diff<LubRanges<View1>,
|
|
410
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
411
|
+
BndSetRanges> > diff1(yub, xjlb);
|
|
412
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].intersectI(home,diff1));
|
|
413
|
+
|
|
414
|
+
GlbRanges<View0> xilb(x[i]);
|
|
415
|
+
sofarBeforeLB.includeI(home,xilb);
|
|
416
|
+
}
|
|
417
|
+
sofarBeforeLB.dispose(home);
|
|
418
|
+
}
|
|
419
|
+
for (int i=xsize; i--;)
|
|
420
|
+
afterLB[i].dispose(home);
|
|
421
|
+
return ES_NOFIX;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// Xi LB includes YLB minus union Xj UB
|
|
425
|
+
template <class View0, class View1>
|
|
426
|
+
ExecStatus
|
|
427
|
+
partitionNXiLB(Space* home,
|
|
428
|
+
bool& modified, ViewArray<View0>& x, View1& y,
|
|
429
|
+
GLBndSet& unionOfDets) {
|
|
430
|
+
int xsize = x.size();
|
|
431
|
+
GECODE_AUTOARRAY(GLBndSet, afterUB, xsize);
|
|
432
|
+
|
|
433
|
+
{
|
|
434
|
+
GLBndSet sofarAfterUB;
|
|
435
|
+
for (int i=xsize; i--;) {
|
|
436
|
+
afterUB[i].init(home);
|
|
437
|
+
afterUB[i].update(home,sofarAfterUB);
|
|
438
|
+
LubRanges<View0> xiub(x[i]);
|
|
439
|
+
sofarAfterUB.includeI(home,xiub);
|
|
440
|
+
}
|
|
441
|
+
sofarAfterUB.dispose(home);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
{
|
|
445
|
+
//The union of previously determined x[j]-s is added to the mix here:
|
|
446
|
+
GLBndSet sofarBeforeUB;
|
|
447
|
+
sofarBeforeUB.update(home,unionOfDets);
|
|
448
|
+
for (int i=0; i<xsize; i++) {
|
|
449
|
+
GlbRanges<View1> ylb(y);
|
|
450
|
+
BndSetRanges sub(sofarBeforeUB);
|
|
451
|
+
BndSetRanges afterub(afterUB[i]);
|
|
452
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
453
|
+
BndSetRanges> xjub(sub, afterub);
|
|
454
|
+
Iter::Ranges::Diff<GlbRanges<View1>,
|
|
455
|
+
Iter::Ranges::Union<BndSetRanges,
|
|
456
|
+
BndSetRanges> > diff2(ylb, xjub);
|
|
457
|
+
GECODE_ME_CHECK_MODIFIED(modified, x[i].includeI(home,diff2));
|
|
458
|
+
|
|
459
|
+
LubRanges<View0> xiub(x[i]);
|
|
460
|
+
sofarBeforeUB.includeI(home,xiub);
|
|
461
|
+
}
|
|
462
|
+
sofarBeforeUB.dispose(home);
|
|
463
|
+
}
|
|
464
|
+
for (int i=xsize;i--;)
|
|
465
|
+
afterUB[i].dispose(home);
|
|
466
|
+
return ES_NOFIX;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
// Y LB contains union of X LBs
|
|
470
|
+
template <class View0, class View1>
|
|
471
|
+
ExecStatus
|
|
472
|
+
partitionNYLB(Space* home,
|
|
473
|
+
bool& modified, ViewArray<View0>& x, View1& y,
|
|
474
|
+
GLBndSet& unionOfDets) {
|
|
475
|
+
assert(unionOfDets.isConsistent());
|
|
476
|
+
int xsize = x.size();
|
|
477
|
+
GECODE_AUTOARRAY(GlbRanges<View0>,xLBs,xsize);
|
|
478
|
+
int nonEmptyCounter=0;
|
|
479
|
+
for (int i = xsize; i--; ) {
|
|
480
|
+
GlbRanges<View0> r(x[i]);
|
|
481
|
+
if (r()) {
|
|
482
|
+
xLBs[nonEmptyCounter] = r;
|
|
483
|
+
nonEmptyCounter++;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
if (nonEmptyCounter !=0) {
|
|
487
|
+
Iter::Ranges::NaryUnion<GlbRanges<View0> >
|
|
488
|
+
xLBUnion(xLBs,nonEmptyCounter);
|
|
489
|
+
BndSetRanges dets(unionOfDets);
|
|
490
|
+
Iter::Ranges::Union<Iter::Ranges::NaryUnion<GlbRanges<View0> >,
|
|
491
|
+
BndSetRanges>
|
|
492
|
+
allUnion(xLBUnion,dets);
|
|
493
|
+
GECODE_ME_CHECK_MODIFIED(modified, y.includeI(home,allUnion));
|
|
494
|
+
}
|
|
495
|
+
return ES_FIX;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
// Y UB is subset of union of X UBs
|
|
499
|
+
template <class View0, class View1>
|
|
500
|
+
ExecStatus
|
|
501
|
+
partitionNYUB(Space* home,
|
|
502
|
+
bool& modified, ViewArray<View0>& x, View1& y,
|
|
503
|
+
GLBndSet& unionOfDets) {
|
|
504
|
+
int xsize = x.size();
|
|
505
|
+
GECODE_AUTOARRAY(LubRanges<View0>,xUBs,xsize);
|
|
506
|
+
int nonEmptyCounter=0;
|
|
507
|
+
for (int i = xsize; i--; ) {
|
|
508
|
+
LubRanges<View0> r(x[i]);
|
|
509
|
+
if (r()) {
|
|
510
|
+
xUBs[nonEmptyCounter] = r;
|
|
511
|
+
nonEmptyCounter++;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
if (nonEmptyCounter !=0) {
|
|
515
|
+
Iter::Ranges::NaryUnion<LubRanges<View0> >
|
|
516
|
+
xUBUnion(xUBs,nonEmptyCounter);
|
|
517
|
+
BndSetRanges dets(unionOfDets);
|
|
518
|
+
Iter::Ranges::Union<Iter::Ranges::NaryUnion<LubRanges<View0> >,
|
|
519
|
+
BndSetRanges>
|
|
520
|
+
fullUnion(xUBUnion, dets);
|
|
521
|
+
GECODE_ME_CHECK_MODIFIED(modified, y.intersectI(home,fullUnion));
|
|
522
|
+
}
|
|
523
|
+
return ES_FIX;
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
}}}
|
|
527
|
+
|
|
528
|
+
// STATISTICS: set-prop
|