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,666 @@
|
|
|
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
|
+
|
|
22
|
+
namespace Gecode { namespace Int { namespace Sortedness {
|
|
23
|
+
|
|
24
|
+
/// Debugging: Print a View
|
|
25
|
+
template<class View>
|
|
26
|
+
void pview(View& v){
|
|
27
|
+
if (v.min() == v.max()) {
|
|
28
|
+
std::cout << v.min() <<" ";
|
|
29
|
+
} else {
|
|
30
|
+
if (v.range()){
|
|
31
|
+
std::cout << "["<<v.min() <<".."<<v.max()<<"] ";
|
|
32
|
+
} else {
|
|
33
|
+
std::cout << "{";
|
|
34
|
+
ViewValues<View> iter(v);
|
|
35
|
+
while(iter()){
|
|
36
|
+
std::cout << iter.val() <<",";
|
|
37
|
+
++iter;
|
|
38
|
+
}
|
|
39
|
+
std::cout << "} ";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Debugging: Print a ViewTuple
|
|
45
|
+
template <class T, unsigned int n>
|
|
46
|
+
inline std::ostream&
|
|
47
|
+
operator<<(std::ostream& os, ViewTuple<T,n>& xs) {
|
|
48
|
+
if (n > 1) { os << "<";}
|
|
49
|
+
if (xs[0].min() == xs[0].max()) {
|
|
50
|
+
os << xs[0].min();
|
|
51
|
+
if (n > 1) {
|
|
52
|
+
std::cout << ",";
|
|
53
|
+
if (xs[1].min() == xs[1].max()) {
|
|
54
|
+
os << xs[1].min() <<" ";
|
|
55
|
+
} else {
|
|
56
|
+
os << "["<<xs[1].min() <<".."<<xs[1].max()<<"]("<<xs[1].range()<<") ";
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
os << "["<<xs[0].min() <<".."<<xs[0].max()<<"]("<<xs[0].range()<<")";
|
|
61
|
+
if (n > 1) {
|
|
62
|
+
std::cout << ", ";
|
|
63
|
+
if (xs[1].min() == xs[1].max()) {
|
|
64
|
+
os << xs[1].min() <<" ";
|
|
65
|
+
} else {
|
|
66
|
+
os << "["<<xs[1].min() <<".."<<xs[1].max()<<"]("<<xs[1].range()<<") ";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// else {
|
|
71
|
+
// os << "{";
|
|
72
|
+
// ViewValues<View> iter(xs[0]);
|
|
73
|
+
// while(iter()){
|
|
74
|
+
// os << iter.val() <<",";
|
|
75
|
+
// ++iter;
|
|
76
|
+
// }
|
|
77
|
+
// os << "} ";
|
|
78
|
+
// }
|
|
79
|
+
if (n > 1) { os << ">";}
|
|
80
|
+
return os;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* \brief Storage class for mininmum and maximum of a variable.
|
|
85
|
+
*/
|
|
86
|
+
class Rank {
|
|
87
|
+
public:
|
|
88
|
+
// stores the mininmum of a variable
|
|
89
|
+
int min;
|
|
90
|
+
// stores the mininmum of a variable
|
|
91
|
+
int max;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* \brief Representation of a strongly connected component
|
|
96
|
+
*
|
|
97
|
+
* Used with the implicit array representation of the
|
|
98
|
+
* bipartite oriented intersection graph.
|
|
99
|
+
*/
|
|
100
|
+
class SccComponent {
|
|
101
|
+
public:
|
|
102
|
+
/// Leftmost y-node in a scc
|
|
103
|
+
int leftmost;
|
|
104
|
+
/// Direct left neighbour of an y-node in a scc
|
|
105
|
+
int left;
|
|
106
|
+
/// Direct right neighbour of an y-node in a scc
|
|
107
|
+
int right;
|
|
108
|
+
/// Rightmost reachable y-node in a scc
|
|
109
|
+
int rightmost;
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* \brief Subsumption test
|
|
114
|
+
*
|
|
115
|
+
* The propagator for Sortedness is subsumed if all
|
|
116
|
+
* variables of the ViewArrays
|
|
117
|
+
* \a x, \a y and \a z are determined and
|
|
118
|
+
* \ref SortednessSemantics "the Semantics of Sortedness"
|
|
119
|
+
* are respected. \n
|
|
120
|
+
* In addition to the subsumption test check_subsumption
|
|
121
|
+
* determines, whether we can reduce the orginial problem
|
|
122
|
+
* to a smaller one, by dropping already matched variables.
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
template<class View, class Tuple, bool Perm>
|
|
126
|
+
forceinline bool
|
|
127
|
+
check_subsumption(Space* home,
|
|
128
|
+
ViewArray<Tuple>& xz,
|
|
129
|
+
ViewArray<View>& y,
|
|
130
|
+
bool& subsumed,
|
|
131
|
+
int& dropfst) {
|
|
132
|
+
|
|
133
|
+
dropfst = 0;
|
|
134
|
+
subsumed = true;
|
|
135
|
+
int xs = xz.size();
|
|
136
|
+
for (int i = 0; i < xs ; i++) {
|
|
137
|
+
if (Perm) {
|
|
138
|
+
subsumed &= (xz[i][0].assigned() &&
|
|
139
|
+
xz[i][1].assigned() &&
|
|
140
|
+
y[xz[i][1].val()].assigned());
|
|
141
|
+
if (subsumed) {
|
|
142
|
+
if (xz[i][0].val() != y[xz[i][1].val()].val()) {
|
|
143
|
+
return false;
|
|
144
|
+
} else {
|
|
145
|
+
if (xz[i][1].val() == i) {
|
|
146
|
+
dropfst++;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
} else {
|
|
151
|
+
subsumed &= (xz[i][0].assigned() && y[i].assigned());
|
|
152
|
+
if (subsumed) {
|
|
153
|
+
if (xz[i][0].val() != y[i].val()) {
|
|
154
|
+
return false;
|
|
155
|
+
} else {
|
|
156
|
+
dropfst++;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* \brief Item used to construct the OfflineMin sequence
|
|
166
|
+
*
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
class OfflineMinItem{
|
|
170
|
+
public:
|
|
171
|
+
/// Root node representing the set the vertex belongs to
|
|
172
|
+
int root;
|
|
173
|
+
/// Predecessor in the tree representation of the set
|
|
174
|
+
int parent;
|
|
175
|
+
/// Ranking of the set given by its cardinality
|
|
176
|
+
int rank;
|
|
177
|
+
/// Name or label of a set
|
|
178
|
+
int name;
|
|
179
|
+
/**
|
|
180
|
+
* \brief Initial set label
|
|
181
|
+
*
|
|
182
|
+
* This label represents the iteration index \f$i\f$
|
|
183
|
+
* and hence the index of an insert instruction
|
|
184
|
+
* in the complete Offline-Min sequence
|
|
185
|
+
*/
|
|
186
|
+
int iset;
|
|
187
|
+
/// Successor in the Offline-Min sequence
|
|
188
|
+
int succ;
|
|
189
|
+
/// Predecessor in the Offline-Min sequence
|
|
190
|
+
int pred;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* \brief Offline-Min datastructure
|
|
195
|
+
* Used to compute the perfect matching between the unsorted views
|
|
196
|
+
* \a x and the sorted views \a y.
|
|
197
|
+
*/
|
|
198
|
+
class OfflineMin {
|
|
199
|
+
private:
|
|
200
|
+
OfflineMinItem* sequence;
|
|
201
|
+
int* vertices;
|
|
202
|
+
int n;
|
|
203
|
+
public:
|
|
204
|
+
OfflineMin(void);
|
|
205
|
+
OfflineMin(OfflineMinItem[], int[], int);
|
|
206
|
+
/**
|
|
207
|
+
* Find the set x belongs to
|
|
208
|
+
* (wihtout path compression)
|
|
209
|
+
*/
|
|
210
|
+
int find(int x);
|
|
211
|
+
/**
|
|
212
|
+
* Find the set x belongs to
|
|
213
|
+
* (using path compression)
|
|
214
|
+
*/
|
|
215
|
+
int find_pc(int x);
|
|
216
|
+
/// Unite two sets \a a and \a b and label the union with \a c
|
|
217
|
+
void unite(int a, int b, int c);
|
|
218
|
+
/// Initialization of the datastructure
|
|
219
|
+
void makeset(void);
|
|
220
|
+
/// Return the size of the Offline-Min item
|
|
221
|
+
int size(void);
|
|
222
|
+
OfflineMinItem& operator[](int);
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
OfflineMin::OfflineMin(void){
|
|
226
|
+
n = 0;
|
|
227
|
+
sequence = NULL;
|
|
228
|
+
vertices = NULL;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
OfflineMin::OfflineMin(OfflineMinItem s[], int v[], int size){
|
|
232
|
+
n = size;
|
|
233
|
+
sequence = &s[0];
|
|
234
|
+
vertices = &v[0];
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
forceinline int
|
|
238
|
+
OfflineMin::find(int x) {
|
|
239
|
+
while (sequence[x].parent != x) {
|
|
240
|
+
x = sequence[x].parent;
|
|
241
|
+
}
|
|
242
|
+
// x is now the root of the tree
|
|
243
|
+
// return the set, x belongs to
|
|
244
|
+
return sequence[x].name;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
forceinline int
|
|
248
|
+
OfflineMin::find_pc(int x){
|
|
249
|
+
int vsize = 0;
|
|
250
|
+
while (sequence[x].parent != x) {
|
|
251
|
+
vertices[x] = x;
|
|
252
|
+
x = sequence[x].parent;
|
|
253
|
+
}
|
|
254
|
+
// x is now the root of the tree
|
|
255
|
+
for (int i = vsize; i--; ) {
|
|
256
|
+
sequence[vertices[i]].parent = x;
|
|
257
|
+
}
|
|
258
|
+
// return the set, x belongs to
|
|
259
|
+
return sequence[x].name;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
forceinline void
|
|
263
|
+
OfflineMin::unite(int a, int b, int c){
|
|
264
|
+
// c is the union of a and b
|
|
265
|
+
int ra = sequence[a].root;
|
|
266
|
+
int rb = sequence[b].root;
|
|
267
|
+
int large = rb;
|
|
268
|
+
int small = ra;
|
|
269
|
+
if (sequence[ra].rank > sequence[rb].rank) {
|
|
270
|
+
large = ra;
|
|
271
|
+
small = rb;
|
|
272
|
+
}
|
|
273
|
+
sequence[small].parent = large;
|
|
274
|
+
sequence[large].rank += sequence[small].rank;
|
|
275
|
+
sequence[large].name = c;
|
|
276
|
+
sequence[c].root = large;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
forceinline void
|
|
280
|
+
OfflineMin::makeset(void){
|
|
281
|
+
for(int i = n; i--; ){
|
|
282
|
+
OfflineMinItem& cur = sequence[i];
|
|
283
|
+
cur.rank = 0; // initially each set is empty
|
|
284
|
+
cur.name = i; // it has its own name
|
|
285
|
+
cur.root = i; // it is the root node
|
|
286
|
+
cur.parent = i; // it is its own parent
|
|
287
|
+
cur.pred = i - 1;
|
|
288
|
+
cur.succ = i + 1;
|
|
289
|
+
cur.iset = -5;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
forceinline int
|
|
294
|
+
OfflineMin::size(void){
|
|
295
|
+
return n;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
forceinline OfflineMinItem&
|
|
299
|
+
OfflineMin::operator [](int i){
|
|
300
|
+
return sequence[i];
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/// Print an OfflineMin sequence
|
|
304
|
+
forceinline std::ostream&
|
|
305
|
+
operator<<(std::ostream& os, OfflineMin seq){
|
|
306
|
+
for (int i = 0; i < seq.size();i++) {
|
|
307
|
+
os << "Succ(" <<seq[i].succ << ") "
|
|
308
|
+
<< "Pred(" <<seq[i].pred << ") "
|
|
309
|
+
<< "Root(" <<seq[i].root << ") "
|
|
310
|
+
<< "Par (" <<seq[i].parent << ") "
|
|
311
|
+
<< "Rank(" <<seq[i].rank << ") "
|
|
312
|
+
<< "Name(" <<seq[i].name << ") "
|
|
313
|
+
<< "Set (" <<seq[i].iset << ") \n";
|
|
314
|
+
}
|
|
315
|
+
return os;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/**
|
|
319
|
+
* \brief Index comparison for %ViewArray<Tuple>
|
|
320
|
+
*
|
|
321
|
+
* Checks whether for two indices \a i and \a j
|
|
322
|
+
* the first component of the corresponding viewtuples
|
|
323
|
+
* \f$x_i\f$ and \f$x_j\f$ the upper domain bound of \f$x_j\f$
|
|
324
|
+
* is larger than the upper domain bound of \f$x_i\f$
|
|
325
|
+
*
|
|
326
|
+
*/
|
|
327
|
+
template <class Tuple>
|
|
328
|
+
class TupleMaxInc {
|
|
329
|
+
protected:
|
|
330
|
+
ViewArray<Tuple> x;
|
|
331
|
+
public:
|
|
332
|
+
TupleMaxInc(const ViewArray<Tuple>& x0) : x(x0) {}
|
|
333
|
+
bool operator()(const int i, const int j) {
|
|
334
|
+
if (x[i][0].max() == x[j][0].max()) {
|
|
335
|
+
return x[i][0].min() < x[j][0].min();
|
|
336
|
+
} else {
|
|
337
|
+
return x[i][0].max() < x[j][0].max();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* \brief Extended Index comparison for %ViewArray<Tuple>
|
|
345
|
+
*
|
|
346
|
+
* Checks whether for two indices \a i and \a j
|
|
347
|
+
* the first component of the corresponding viewtuples
|
|
348
|
+
* \f$x_i\f$ and \f$x_j\f$ the upper domain bound of \f$x_j\f$
|
|
349
|
+
* is larger than the upper domain bound of \f$x_i\f$
|
|
350
|
+
*
|
|
351
|
+
*/
|
|
352
|
+
template <class Tuple>
|
|
353
|
+
class TupleMaxIncExt {
|
|
354
|
+
protected:
|
|
355
|
+
ViewArray<Tuple> x;
|
|
356
|
+
public:
|
|
357
|
+
TupleMaxIncExt(const ViewArray<Tuple>& x0) : x(x0) {}
|
|
358
|
+
bool operator()(const int i, const int j) {
|
|
359
|
+
if (x[i][0].max() == x[j][0].max()) {
|
|
360
|
+
if (x[i][0].min() == x[j][0].min()) {
|
|
361
|
+
if (x[i][1].max() == x[j][1].max()) {
|
|
362
|
+
return x[i][1].min() < x[j][1].min();
|
|
363
|
+
} else {
|
|
364
|
+
return x[i][1].max() < x[j][1].max();
|
|
365
|
+
}
|
|
366
|
+
} else {
|
|
367
|
+
return x[i][0].min() < x[j][0].min();
|
|
368
|
+
}
|
|
369
|
+
} else {
|
|
370
|
+
return x[i][0].max() < x[j][0].max();
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* \brief View comparison on ViewTuples
|
|
377
|
+
*
|
|
378
|
+
* Checks whether the lower domain bound of the
|
|
379
|
+
* first component of \a x (the variable itself)
|
|
380
|
+
* is smaller than the lower domain bound of the
|
|
381
|
+
* first component of \a y
|
|
382
|
+
*/
|
|
383
|
+
|
|
384
|
+
template <class View>
|
|
385
|
+
class TupleMinInc {
|
|
386
|
+
public:
|
|
387
|
+
bool operator()(const View& x, const View& y) {
|
|
388
|
+
if (x[0].min() == y[0].min()) {
|
|
389
|
+
return x[0].max() < y[0].max();
|
|
390
|
+
} else {
|
|
391
|
+
return x[0].min() < y[0].min();
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* \brief Extended View comparison on ViewTuples
|
|
398
|
+
*
|
|
399
|
+
* Checks whether the lower domain bound of the
|
|
400
|
+
* first component of \a x (the variable itself)
|
|
401
|
+
* is smaller than the lower domain bound of the
|
|
402
|
+
* first component of \a y. If they are equal
|
|
403
|
+
* it checks their upper bounds. If they are also
|
|
404
|
+
* equal we sort the views by the permutation variables.
|
|
405
|
+
*/
|
|
406
|
+
|
|
407
|
+
template <class View>
|
|
408
|
+
class TupleMinIncExt {
|
|
409
|
+
public:
|
|
410
|
+
bool operator()(const View& x, const View& y) {
|
|
411
|
+
if (x[0].min() == y[0].min()) {
|
|
412
|
+
if (x[0].max() == y[0].max()) {
|
|
413
|
+
if (x[1].min() == y[1].min()) {
|
|
414
|
+
return x[1].max() < y[1].max();
|
|
415
|
+
} else {
|
|
416
|
+
return x[1].min() < y[1].min();
|
|
417
|
+
}
|
|
418
|
+
} else {
|
|
419
|
+
return x[0].max() < y[0].max();
|
|
420
|
+
}
|
|
421
|
+
} else {
|
|
422
|
+
return x[0].min() < y[0].min();
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* \brief View comparison on ViewTuples
|
|
429
|
+
*
|
|
430
|
+
* Checks whether the lower domain bound of the second component
|
|
431
|
+
* of \a x (the lower bound on the permutation variable) is smaller
|
|
432
|
+
* than the lower domain bound of the second component of \a y.
|
|
433
|
+
*/
|
|
434
|
+
|
|
435
|
+
template <class View>
|
|
436
|
+
class TupleMinIncPerm {
|
|
437
|
+
public:
|
|
438
|
+
bool operator()(const View& x, const View& y) {
|
|
439
|
+
if (x[1].min() == y[1].min()) {
|
|
440
|
+
return x[1].max() < y[1].max();
|
|
441
|
+
} else {
|
|
442
|
+
return x[1].min() < y[1].min();
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
};
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* \brief View comparison on ViewTuples
|
|
449
|
+
*
|
|
450
|
+
* Checks whether the upper domain bound of the second component
|
|
451
|
+
* of \a x (the upper bound on the permutation variable) is smaller
|
|
452
|
+
* than the upper domain bound of the second component of \a y.
|
|
453
|
+
*/
|
|
454
|
+
|
|
455
|
+
template <class View>
|
|
456
|
+
class TupleMaxIncPerm {
|
|
457
|
+
public:
|
|
458
|
+
bool operator()(const View& x, const View& y) {
|
|
459
|
+
if (x[1].max() == y[1].max()) {
|
|
460
|
+
return x[1].min() < y[1].min();
|
|
461
|
+
} else {
|
|
462
|
+
return x[1].max() < y[1].max();
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
};
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* \brief Check for assignment of a variable array
|
|
469
|
+
*
|
|
470
|
+
* Check whether one of the argument arrays is completely assigned
|
|
471
|
+
* and udpates the other array respectively.
|
|
472
|
+
*/
|
|
473
|
+
|
|
474
|
+
template<class View, class Tuple, bool Perm>
|
|
475
|
+
forceinline bool
|
|
476
|
+
array_assigned(Space* home,
|
|
477
|
+
ViewArray<Tuple>& xz,
|
|
478
|
+
ViewArray<View>& y,
|
|
479
|
+
bool& subsumed,
|
|
480
|
+
bool& match_fixed,
|
|
481
|
+
bool& nofix,
|
|
482
|
+
bool& noperm_bc) {
|
|
483
|
+
|
|
484
|
+
bool x_complete = true;
|
|
485
|
+
bool y_complete = true;
|
|
486
|
+
bool z_complete = true;
|
|
487
|
+
|
|
488
|
+
for (int i = y.size(); i--; ) {
|
|
489
|
+
x_complete &= xz[i][0].assigned();
|
|
490
|
+
y_complete &= y[i].assigned();
|
|
491
|
+
if (Perm) {
|
|
492
|
+
z_complete &= xz[i][1].assigned();
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
if (x_complete) {
|
|
497
|
+
for (int i = xz.size(); i--; ) {
|
|
498
|
+
ModEvent me = y[i].eq(home, xz[i][0].val());
|
|
499
|
+
if (me_failed(me)) {
|
|
500
|
+
return false;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
if (Perm) {
|
|
504
|
+
subsumed = false;
|
|
505
|
+
} else {
|
|
506
|
+
subsumed = true;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
if (y_complete) {
|
|
511
|
+
bool y_equality = true;
|
|
512
|
+
for (int i = y.size() - 1; i--; ) {
|
|
513
|
+
y_equality &= (y[i].val() == y[i + 1].val());
|
|
514
|
+
}
|
|
515
|
+
if (y_equality) {
|
|
516
|
+
for (int i = xz.size(); i--; ) {
|
|
517
|
+
ModEvent me = xz[i][0].eq(home, y[i].val());
|
|
518
|
+
if (me_failed(me)) {
|
|
519
|
+
return false;
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if (Perm) {
|
|
523
|
+
subsumed = false;
|
|
524
|
+
} else {
|
|
525
|
+
subsumed = true;
|
|
526
|
+
}
|
|
527
|
+
noperm_bc = true;
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
if (Perm) {
|
|
532
|
+
if (z_complete) {
|
|
533
|
+
if (x_complete) {
|
|
534
|
+
for (int i = xz.size(); i--; ) {
|
|
535
|
+
ModEvent me = y[xz[i][1].val()].eq(home, xz[i][0].val());
|
|
536
|
+
if (me_failed(me)) {
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
subsumed = true;
|
|
541
|
+
return subsumed;
|
|
542
|
+
}
|
|
543
|
+
if (y_complete) {
|
|
544
|
+
for (int i = xz.size(); i--; ) {
|
|
545
|
+
ModEvent me = xz[i][0].eq(home, y[xz[i][1].val()].val());
|
|
546
|
+
if (me_failed(me)) {
|
|
547
|
+
return false;
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
subsumed = true;
|
|
551
|
+
return subsumed;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// validate the permutation
|
|
555
|
+
int sum = 0;
|
|
556
|
+
for (int i = xz.size(); i--; ) {
|
|
557
|
+
int pi = xz[i][1].val();
|
|
558
|
+
if (xz[i][0].max() < y[pi].min() ||
|
|
559
|
+
xz[i][0].min() > y[pi].max()) {
|
|
560
|
+
return false;
|
|
561
|
+
}
|
|
562
|
+
sum += pi;
|
|
563
|
+
}
|
|
564
|
+
int n = xz.size();
|
|
565
|
+
int gauss = ( (n * (n + 1)) / 2);
|
|
566
|
+
// if the sum over all assigned permutation variables is not
|
|
567
|
+
// equal to the gaussian sum - n they are not distinct, hence invalid
|
|
568
|
+
if (sum != gauss - n) {
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
match_fixed = true;
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
return true;
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* \brief Channel between \a x, \a y and \a z
|
|
579
|
+
*
|
|
580
|
+
* Keep variables consisting by channeling information
|
|
581
|
+
*
|
|
582
|
+
*/
|
|
583
|
+
|
|
584
|
+
template<class View, class Tuple, bool Perm>
|
|
585
|
+
forceinline bool
|
|
586
|
+
channel(Space* home, ViewArray<Tuple>& xz, ViewArray<View>& y, bool& nofix) {
|
|
587
|
+
int n = xz.size();
|
|
588
|
+
for (int i = n; i--; ) {
|
|
589
|
+
if (xz[i][1].assigned()) {
|
|
590
|
+
|
|
591
|
+
// if the permutation variable is determined
|
|
592
|
+
|
|
593
|
+
int v = xz[i][1].val();
|
|
594
|
+
if (xz[i][0].assigned()) {
|
|
595
|
+
// channel equality from x to y
|
|
596
|
+
ModEvent me = y[v].eq(home, xz[i][0].val());
|
|
597
|
+
if (me_failed(me)) {
|
|
598
|
+
return false;
|
|
599
|
+
}
|
|
600
|
+
} else {
|
|
601
|
+
if (y[v].assigned()) {
|
|
602
|
+
// channel equality from y to x
|
|
603
|
+
ModEvent me = xz[i][0].eq(home, y[v].val());
|
|
604
|
+
if (me_failed(me)) {
|
|
605
|
+
return false;
|
|
606
|
+
}
|
|
607
|
+
} else {
|
|
608
|
+
// constrain upper bound
|
|
609
|
+
ModEvent me = xz[i][0].lq(home, y[v].max());
|
|
610
|
+
if (me_failed(me)) {
|
|
611
|
+
return false;
|
|
612
|
+
}
|
|
613
|
+
nofix |= (me_modified(me) && xz[i][0].max() != y[v].max());
|
|
614
|
+
|
|
615
|
+
// constrain lower bound
|
|
616
|
+
me = xz[i][0].gq(home, y[v].min());
|
|
617
|
+
if (me_failed(me)) {
|
|
618
|
+
return false;
|
|
619
|
+
}
|
|
620
|
+
nofix |= (me_modified(me) && xz[i][0].min() != y[v].min());
|
|
621
|
+
|
|
622
|
+
// constrain the sorted variable
|
|
623
|
+
// constrain upper bound
|
|
624
|
+
me = y[v].lq(home, xz[i][0].max());
|
|
625
|
+
if (me_failed(me)) {
|
|
626
|
+
return false;
|
|
627
|
+
}
|
|
628
|
+
nofix |= (me_modified(me) && y[v].max() != xz[i][0].max());
|
|
629
|
+
|
|
630
|
+
// constrain lower bound
|
|
631
|
+
me = y[v].gq(home, xz[i][0].min());
|
|
632
|
+
if (me_failed(me)) {
|
|
633
|
+
return false;
|
|
634
|
+
}
|
|
635
|
+
nofix |= (me_modified(me) && y[v].min() != xz[i][0].min());
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
} else {
|
|
639
|
+
|
|
640
|
+
// if the permutation variable is undetermined
|
|
641
|
+
int l = xz[i][1].min();
|
|
642
|
+
int r = xz[i][1].max();
|
|
643
|
+
|
|
644
|
+
// upper bound
|
|
645
|
+
ModEvent me = xz[i][0].lq(home, y[r].max());
|
|
646
|
+
if (me_failed(me)) {
|
|
647
|
+
return false;
|
|
648
|
+
}
|
|
649
|
+
nofix |= (me_modified(me) && xz[i][0].max() != y[r].max());
|
|
650
|
+
|
|
651
|
+
// lower bound
|
|
652
|
+
me = xz[i][0].gq(home, y[l].min());
|
|
653
|
+
if (me_failed(me)) {
|
|
654
|
+
return false;
|
|
655
|
+
}
|
|
656
|
+
nofix |= (me_modified(me) && xz[i][0].min() != y[l].min());
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
return true;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
}}}
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
// STATISTICS: int-prop
|