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,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Christian Schulte, 2002
|
|
8
|
+
* Gabor Szokoli, 2003
|
|
9
|
+
*
|
|
10
|
+
* Last modified:
|
|
11
|
+
* $Date: 2006-08-04 16:03:26 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
12
|
+
* $Revision: 3512 $
|
|
13
|
+
*
|
|
14
|
+
* This file is part of Gecode, the generic constraint
|
|
15
|
+
* development environment:
|
|
16
|
+
* http://www.gecode.org
|
|
17
|
+
*
|
|
18
|
+
* See the file "LICENSE" for information on usage and
|
|
19
|
+
* redistribution of this file, and for a
|
|
20
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include "gecode/int/distinct.hh"
|
|
25
|
+
|
|
26
|
+
namespace Gecode {
|
|
27
|
+
|
|
28
|
+
using namespace Int;
|
|
29
|
+
|
|
30
|
+
void
|
|
31
|
+
distinct(Space* home, const IntVarArgs& x, IntConLevel icl) {
|
|
32
|
+
if (x.same())
|
|
33
|
+
throw ArgumentSame("Int::distinct");
|
|
34
|
+
if (home->failed()) return;
|
|
35
|
+
ViewArray<IntView> xv(home,x);
|
|
36
|
+
switch (icl) {
|
|
37
|
+
case ICL_BND:
|
|
38
|
+
GECODE_ES_FAIL(home,Distinct::Bnd<IntView>::post(home,xv));
|
|
39
|
+
break;
|
|
40
|
+
case ICL_DOM:
|
|
41
|
+
GECODE_ES_FAIL(home,Distinct::Dom<IntView>::post(home,xv));
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
GECODE_ES_FAIL(home,Distinct::Val<IntView>::post(home,xv));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
void
|
|
49
|
+
distinct(Space* home, const IntArgs& c, const IntVarArgs& x,
|
|
50
|
+
IntConLevel icl) {
|
|
51
|
+
if (x.same())
|
|
52
|
+
throw ArgumentSame("Int::distinct");
|
|
53
|
+
if (c.size() != x.size())
|
|
54
|
+
throw ArgumentSizeMismatch("Int::distinct");
|
|
55
|
+
if (home->failed()) return;
|
|
56
|
+
ViewArray<OffsetView> cx(home,x.size());
|
|
57
|
+
for (int i = c.size(); i--; )
|
|
58
|
+
if ((c[i] < Limits::Int::int_min) || (c[i] > Limits::Int::int_max))
|
|
59
|
+
throw NumericalOverflow("Int::distinct");
|
|
60
|
+
else
|
|
61
|
+
cx[i].init(x[i],c[i]);
|
|
62
|
+
switch (icl) {
|
|
63
|
+
case ICL_BND:
|
|
64
|
+
GECODE_ES_FAIL(home,Distinct::Bnd<OffsetView>::post(home,cx));
|
|
65
|
+
break;
|
|
66
|
+
case ICL_DOM:
|
|
67
|
+
GECODE_ES_FAIL(home,Distinct::Dom<OffsetView>::post(home,cx));
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
GECODE_ES_FAIL(home,Distinct::Val<OffsetView>::post(home,cx));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// STATISTICS: int-post
|
|
77
|
+
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
* Guido Tack <tack@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Contributing authors:
|
|
7
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
8
|
+
*
|
|
9
|
+
* Copyright:
|
|
10
|
+
* Christian Schulte, 2002
|
|
11
|
+
* Guido Tack, 2004
|
|
12
|
+
* Gabor Szokoli, 2003
|
|
13
|
+
*
|
|
14
|
+
* Last modified:
|
|
15
|
+
* $Date: 2006-10-23 16:16:09 +0200 (Mon, 23 Oct 2006) $ by $Author: schulte $
|
|
16
|
+
* $Revision: 3768 $
|
|
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_INT_DISTINCT_HH__
|
|
29
|
+
#define __GECODE_INT_DISTINCT_HH__
|
|
30
|
+
|
|
31
|
+
#include "gecode/int.hh"
|
|
32
|
+
|
|
33
|
+
#include "gecode/int/rel.hh"
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* \namespace Gecode::Int::Distinct
|
|
37
|
+
* \brief %Distinct propagators
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
namespace Gecode { namespace Int { namespace Distinct {
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* \brief Naive value distinct propagator
|
|
44
|
+
*
|
|
45
|
+
* Eliminates values of assigned views of type \a View.
|
|
46
|
+
*
|
|
47
|
+
* Requires \code #include "gecode/int/distinct.hh" \endcode
|
|
48
|
+
* \ingroup FuncIntProp
|
|
49
|
+
*/
|
|
50
|
+
template <class View>
|
|
51
|
+
class Val : public NaryPropagator<View,PC_INT_VAL> {
|
|
52
|
+
protected:
|
|
53
|
+
using NaryPropagator<View,PC_INT_VAL>::x;
|
|
54
|
+
|
|
55
|
+
/// Constructor for posting
|
|
56
|
+
Val(Space* home, ViewArray<View>& x);
|
|
57
|
+
/// Constructor for cloning \a p
|
|
58
|
+
Val(Space* home, bool share, Val<View>& p);
|
|
59
|
+
public:
|
|
60
|
+
/// Copy propagator during cloning
|
|
61
|
+
virtual Actor* copy(Space* home, bool share);
|
|
62
|
+
/// Perform propagation
|
|
63
|
+
virtual ExecStatus propagate(Space* home);
|
|
64
|
+
/// Post propagator for view array \a x
|
|
65
|
+
static ExecStatus post(Space* home, ViewArray<View>& x);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* \brief Eliminate singletons by naive value propagation
|
|
70
|
+
*
|
|
71
|
+
* This is actually the propagation algorithm for Distinct::Val.
|
|
72
|
+
* It is available as separate function as it is reused for
|
|
73
|
+
* both bounds-consistent and domain-consistent distinct
|
|
74
|
+
* propagators.
|
|
75
|
+
*
|
|
76
|
+
* If \a complete is true, computes fixpoint, otherwise might not
|
|
77
|
+
* compute fixpoint. This can be helpful when used together with
|
|
78
|
+
* bounds or domain propagation to protect from pathological cases
|
|
79
|
+
* which can be handled more efficiently with bounds propagation.
|
|
80
|
+
*/
|
|
81
|
+
template <class View, bool complete>
|
|
82
|
+
ExecStatus prop_val(Space* home, ViewArray<View>&);
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* \brief Bounds-consistent distinct propagator
|
|
88
|
+
*
|
|
89
|
+
* The propagator uses staging: first it uses naive value-based
|
|
90
|
+
* propagation and only then uses bounds-consistent propagation.
|
|
91
|
+
* Due to using naive value-based propagation, the propagator
|
|
92
|
+
* might actually achieve stronger consistency than just
|
|
93
|
+
* bounds-consistency.
|
|
94
|
+
*
|
|
95
|
+
* The algorithm is taken from:
|
|
96
|
+
* A. Lopez-Ortiz, C.-G. Quimper, J. Tromp, and P. van Beek.
|
|
97
|
+
* A fast and simple algorithm for bounds consistency of the
|
|
98
|
+
* alldifferent constraint. IJCAI-2003.
|
|
99
|
+
*
|
|
100
|
+
* This implementation uses the code that is provided by
|
|
101
|
+
* Peter Van Beek:
|
|
102
|
+
* http://ai.uwaterloo.ca/~vanbeek/software/software.html
|
|
103
|
+
* The code (originally by John Tromp) here has only been slightly modified
|
|
104
|
+
* to fit %Gecode (taking idempotent/non-idempotent propagation into account)
|
|
105
|
+
* and uses a more efficient layout of datastructures (keeping the number
|
|
106
|
+
* of different arrays small).
|
|
107
|
+
*
|
|
108
|
+
* Requires \code #include "gecode/int/distinct.hh" \endcode
|
|
109
|
+
* \ingroup FuncIntProp
|
|
110
|
+
*/
|
|
111
|
+
template <class View>
|
|
112
|
+
class Bnd : public Propagator {
|
|
113
|
+
protected:
|
|
114
|
+
/// Views on which to perform bounds-propagation
|
|
115
|
+
ViewArray<View> x;
|
|
116
|
+
/// Views on which to perform value-propagation (subset of \c x)
|
|
117
|
+
ViewArray<View> y;
|
|
118
|
+
/// Constructor for posting
|
|
119
|
+
Bnd(Space* home, ViewArray<View>& x);
|
|
120
|
+
/// Constructor for cloning \a p
|
|
121
|
+
Bnd(Space* home, bool share, Bnd<View>& p);
|
|
122
|
+
public:
|
|
123
|
+
/// Post propagator for view array \a x
|
|
124
|
+
static ExecStatus post(Space* home, ViewArray<View>& x);
|
|
125
|
+
/// Perform propagation
|
|
126
|
+
virtual ExecStatus propagate(Space* home);
|
|
127
|
+
/**
|
|
128
|
+
* \brief Cost function
|
|
129
|
+
*
|
|
130
|
+
* If in stage for naive value propagation, the cost is dynamic
|
|
131
|
+
* PC_LINEAR_LO. Otherwise it is dynamic PC_LINEAR_HI.
|
|
132
|
+
*/
|
|
133
|
+
virtual PropCost cost(void) const;
|
|
134
|
+
/// Copy propagator during cloning
|
|
135
|
+
virtual Actor* copy(Space* home, bool share);
|
|
136
|
+
/// Destructor
|
|
137
|
+
virtual size_t dispose(Space* home);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* \brief Perform bounds-consistent distinct propagation
|
|
142
|
+
*
|
|
143
|
+
* This is actually the propagation algorithm for Distinct::Bnd.
|
|
144
|
+
* It is available as separate function as it is reused for
|
|
145
|
+
* both bounds-consistent and domain-consistent distinct
|
|
146
|
+
* propagators.
|
|
147
|
+
*/
|
|
148
|
+
template <class View>
|
|
149
|
+
ExecStatus prop_bnd(Space* home, ViewArray<View>& x, int m);
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* \brief Propagation controller for domain-consistent distinct
|
|
154
|
+
*
|
|
155
|
+
* The propagation controller provides convenient access to
|
|
156
|
+
* performing incremental domain-consistent distinct propagation
|
|
157
|
+
* so that the routines can be reused easily.
|
|
158
|
+
*
|
|
159
|
+
* Requires \code #include "gecode/int/distinct.hh" \endcode
|
|
160
|
+
* \ingroup FuncIntProp
|
|
161
|
+
*/
|
|
162
|
+
template <class View>
|
|
163
|
+
class DomCtrl {
|
|
164
|
+
protected:
|
|
165
|
+
/// View-value graph for propagation
|
|
166
|
+
class ViewValGraph;
|
|
167
|
+
/// Propagation is performed on a view-value graph (used as cache)
|
|
168
|
+
ViewValGraph* vvg;
|
|
169
|
+
public:
|
|
170
|
+
/// Initialize with non-existing view-value graph
|
|
171
|
+
DomCtrl(void);
|
|
172
|
+
/// Check whether a view-value graph is available
|
|
173
|
+
bool available(void);
|
|
174
|
+
/// Initialize view-value graph for views \a x
|
|
175
|
+
ExecStatus init(int n, View* x);
|
|
176
|
+
/// Synchronize available view-value graph
|
|
177
|
+
ExecStatus sync(void);
|
|
178
|
+
/// Perform propagation
|
|
179
|
+
void propagate(Space* home);
|
|
180
|
+
/// Returns size of view-value graph
|
|
181
|
+
size_t size(void) const;
|
|
182
|
+
/// Flush view-value graph
|
|
183
|
+
void flush(void);
|
|
184
|
+
/// Deallocate view-value graph
|
|
185
|
+
void dispose(void);
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* \brief Domain-consistent distinct propagator
|
|
190
|
+
*
|
|
191
|
+
* The propagator uses staging: first it uses naive value-based
|
|
192
|
+
* propagation and only then uses domain-consistent propagation.
|
|
193
|
+
*
|
|
194
|
+
* The algorithm is taken from:
|
|
195
|
+
* Jean-Charles R�gin, A filtering algorithm for constraints
|
|
196
|
+
* of difference in CSPs, Proceedings of the Twelfth National
|
|
197
|
+
* Conference on Artificial Intelligence, pages 362--367.
|
|
198
|
+
* Seattle, WA, USA, 1994.
|
|
199
|
+
*
|
|
200
|
+
* Requires \code #include "gecode/int/distinct.hh" \endcode
|
|
201
|
+
* \ingroup FuncIntProp
|
|
202
|
+
*/
|
|
203
|
+
template <class View>
|
|
204
|
+
class Dom : public NaryPropagator<View,PC_INT_DOM> {
|
|
205
|
+
protected:
|
|
206
|
+
using NaryPropagator<View,PC_INT_DOM>::x;
|
|
207
|
+
|
|
208
|
+
/// Propagation controller
|
|
209
|
+
DomCtrl<View> dc;
|
|
210
|
+
/// Constructor for cloning \a p
|
|
211
|
+
Dom(Space* home, bool share, Dom<View>& p);
|
|
212
|
+
/// Constructor for posting
|
|
213
|
+
Dom(Space* home, ViewArray<View>& x);
|
|
214
|
+
public:
|
|
215
|
+
/// Perform propagation
|
|
216
|
+
virtual ExecStatus propagate(Space* home);
|
|
217
|
+
/**
|
|
218
|
+
* \brief Cost function
|
|
219
|
+
*
|
|
220
|
+
* If in stage for naive value propagation, the cost is dynamic
|
|
221
|
+
* PC_LINEAR_LO. Otherwise it is dynamic PC_CUBIC_LO.
|
|
222
|
+
*/
|
|
223
|
+
virtual PropCost cost(void) const;
|
|
224
|
+
/// Copy propagator during cloning
|
|
225
|
+
virtual Actor* copy(Space* home, bool share);
|
|
226
|
+
/// Flush view-value graph
|
|
227
|
+
virtual void flush(void);
|
|
228
|
+
/// Returns size of view-value graph
|
|
229
|
+
virtual size_t size(void) const;
|
|
230
|
+
/// Post propagator for views \a x
|
|
231
|
+
static ExecStatus post(Space* home, ViewArray<View>& x);
|
|
232
|
+
/// Delete propagator and return its size
|
|
233
|
+
virtual size_t dispose(Space* home);
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* \brief Ternary domain-consistent distinct propagator
|
|
238
|
+
*
|
|
239
|
+
* Requires \code #include "gecode/int/distinct.hh" \endcode
|
|
240
|
+
* \ingroup FuncIntProp
|
|
241
|
+
*/
|
|
242
|
+
template <class View>
|
|
243
|
+
class TerDom : public TernaryPropagator<View,PC_INT_DOM> {
|
|
244
|
+
protected:
|
|
245
|
+
using TernaryPropagator<View,PC_INT_DOM>::x0;
|
|
246
|
+
using TernaryPropagator<View,PC_INT_DOM>::x1;
|
|
247
|
+
using TernaryPropagator<View,PC_INT_DOM>::x2;
|
|
248
|
+
|
|
249
|
+
/// Constructor for cloning \a p
|
|
250
|
+
TerDom(Space* home, bool share, TerDom<View>& p);
|
|
251
|
+
/// Constructor for posting
|
|
252
|
+
TerDom(Space* home, View x0, View x1, View x2);
|
|
253
|
+
public:
|
|
254
|
+
/// Perform propagation
|
|
255
|
+
virtual ExecStatus propagate(Space* home);
|
|
256
|
+
/// Copy propagator during cloning
|
|
257
|
+
virtual Actor* copy(Space* home, bool share);
|
|
258
|
+
/// Post propagator for views \a x
|
|
259
|
+
static ExecStatus post(Space* home, View x0, View x1, View x2);
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
}}}
|
|
263
|
+
|
|
264
|
+
#include "gecode/int/distinct/val.icc"
|
|
265
|
+
#include "gecode/int/distinct/bnd.icc"
|
|
266
|
+
#include "gecode/int/distinct/ter-dom.icc"
|
|
267
|
+
#include "gecode/int/distinct/dom.icc"
|
|
268
|
+
|
|
269
|
+
#endif
|
|
270
|
+
|
|
271
|
+
// STATISTICS: int-prop
|
|
272
|
+
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2003
|
|
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 Distinct {
|
|
23
|
+
|
|
24
|
+
forceinline
|
|
25
|
+
BiLink::BiLink(void) {
|
|
26
|
+
_prev = this; _next = this;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
forceinline BiLink*
|
|
30
|
+
BiLink::prev(void) const {
|
|
31
|
+
return _prev;
|
|
32
|
+
}
|
|
33
|
+
forceinline BiLink*
|
|
34
|
+
BiLink::next(void) const {
|
|
35
|
+
return _next;
|
|
36
|
+
}
|
|
37
|
+
forceinline void
|
|
38
|
+
BiLink::prev(BiLink* l) {
|
|
39
|
+
_prev = l;
|
|
40
|
+
}
|
|
41
|
+
forceinline void
|
|
42
|
+
BiLink::next(BiLink* l) {
|
|
43
|
+
_next = l;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
forceinline void
|
|
47
|
+
BiLink::add(BiLink* l) {
|
|
48
|
+
l->_prev = this; l->_next = _next;
|
|
49
|
+
_next->_prev = l; _next = l;
|
|
50
|
+
}
|
|
51
|
+
forceinline void
|
|
52
|
+
BiLink::unlink(void) {
|
|
53
|
+
BiLink* p = _prev; BiLink* n = _next;
|
|
54
|
+
p->_next = n; n->_prev = p;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
forceinline void
|
|
58
|
+
BiLink::mark(void) {
|
|
59
|
+
_next = NULL;
|
|
60
|
+
}
|
|
61
|
+
forceinline bool
|
|
62
|
+
BiLink::marked(void) const {
|
|
63
|
+
return _next == NULL;
|
|
64
|
+
}
|
|
65
|
+
forceinline bool
|
|
66
|
+
BiLink::empty(void) const {
|
|
67
|
+
return _prev == this;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}}}
|
|
71
|
+
|
|
72
|
+
// STATISTICS: int-prop
|
|
73
|
+
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2003
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-10-23 16:16:09 +0200 (Mon, 23 Oct 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3768 $
|
|
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
|
+
#include "gecode/support/sort.hh"
|
|
23
|
+
|
|
24
|
+
namespace Gecode { namespace Int { namespace Distinct {
|
|
25
|
+
|
|
26
|
+
template <class View>
|
|
27
|
+
inline
|
|
28
|
+
Bnd<View>::Bnd(Space* home, ViewArray<View>& x0)
|
|
29
|
+
: Propagator(home), x(x0), y(home,x0) {
|
|
30
|
+
// Both x and y initially contain the same variables
|
|
31
|
+
// - x is used for bounds propagation
|
|
32
|
+
// - y is used for performing singleton propagation
|
|
33
|
+
// They can not be shared as singleton propagation removes
|
|
34
|
+
// determined variables still required for bounds propagation.
|
|
35
|
+
y.subscribe(home,this,PC_INT_BND);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
template <class View>
|
|
39
|
+
size_t
|
|
40
|
+
Bnd<View>::dispose(Space* home) {
|
|
41
|
+
assert(!home->failed());
|
|
42
|
+
y.cancel(home,this,PC_INT_BND);
|
|
43
|
+
(void) Propagator::dispose(home);
|
|
44
|
+
return sizeof(*this);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
template <class View>
|
|
48
|
+
forceinline
|
|
49
|
+
Bnd<View>::Bnd(Space* home, bool share, Bnd<View>& p)
|
|
50
|
+
: Propagator(home,share,p) {
|
|
51
|
+
x.update(home,share,p.x);
|
|
52
|
+
y.update(home,share,p.y);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
template <class View>
|
|
56
|
+
Actor*
|
|
57
|
+
Bnd<View>::copy(Space* home, bool share) {
|
|
58
|
+
return new (home) Bnd<View>(home,share,*this);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
template <class View>
|
|
62
|
+
PropCost
|
|
63
|
+
Bnd<View>::cost(void) const {
|
|
64
|
+
return (View::pme(this) == ME_INT_VAL)
|
|
65
|
+
? cost_lo(y.size(),PC_LINEAR_LO)
|
|
66
|
+
: cost_hi(x.size(),PC_LINEAR_HI);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
/// Rank information
|
|
71
|
+
class Rank {
|
|
72
|
+
public:
|
|
73
|
+
int min, max;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/// Sort-order by increasing maximum
|
|
77
|
+
template <class View>
|
|
78
|
+
class MaxInc {
|
|
79
|
+
protected:
|
|
80
|
+
ViewArray<View> x;
|
|
81
|
+
public:
|
|
82
|
+
MaxInc(const ViewArray<View>& x0) : x(x0) {}
|
|
83
|
+
forceinline bool
|
|
84
|
+
operator()(const int i, const int j) {
|
|
85
|
+
return x[i].max() < x[j].max();
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/// Sort-order by increasing minimum
|
|
90
|
+
template <class View>
|
|
91
|
+
class MinInc {
|
|
92
|
+
public:
|
|
93
|
+
forceinline bool
|
|
94
|
+
operator()(const View& x, const View& y) {
|
|
95
|
+
return x.min() < y.min();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
/// Information on Hall intervals
|
|
100
|
+
class HallInfo {
|
|
101
|
+
public:
|
|
102
|
+
int bounds, t, d, h;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
inline void
|
|
106
|
+
pathset_t(HallInfo hall[], int start, int end, int to) {
|
|
107
|
+
int k, l;
|
|
108
|
+
for (l=start; (k=l) != end; hall[k].t=to) {
|
|
109
|
+
l = hall[k].t;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
inline void
|
|
114
|
+
pathset_h(HallInfo hall[], int start, int end, int to) {
|
|
115
|
+
int k, l;
|
|
116
|
+
for (l=start; (k=l) != end; hall[k].h=to) {
|
|
117
|
+
l = hall[k].h;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
forceinline int
|
|
122
|
+
pathmin_h(const HallInfo hall[], int i) {
|
|
123
|
+
while (hall[i].h < i)
|
|
124
|
+
i = hall[i].h;
|
|
125
|
+
return i;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
forceinline int
|
|
129
|
+
pathmin_t(const HallInfo hall[], int i) {
|
|
130
|
+
while (hall[i].t < i)
|
|
131
|
+
i = hall[i].t;
|
|
132
|
+
return i;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
forceinline int
|
|
136
|
+
pathmax_h(const HallInfo hall[], int i) {
|
|
137
|
+
while (hall[i].h > i)
|
|
138
|
+
i = hall[i].h;
|
|
139
|
+
return i;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
forceinline int
|
|
143
|
+
pathmax_t(const HallInfo hall[], int i) {
|
|
144
|
+
while (hall[i].t > i)
|
|
145
|
+
i = hall[i].t;
|
|
146
|
+
return i;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
#define GECODE_INT_MINSORTED(i) (i)
|
|
150
|
+
#define GECODE_INT_MAXSORTED(i) (_maxsorted[i])
|
|
151
|
+
|
|
152
|
+
template <class View>
|
|
153
|
+
ExecStatus
|
|
154
|
+
prop_bnd(Space* home, ViewArray<View>& x, int m) {
|
|
155
|
+
const int n = x.size();
|
|
156
|
+
// Sort variable array for minimum directly
|
|
157
|
+
{
|
|
158
|
+
MinInc<View> min_inc;
|
|
159
|
+
Support::insertion<View,MinInc<View> >(&x[0], n, min_inc);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
GECODE_AUTOARRAY(int, _maxsorted, n);
|
|
163
|
+
for (int i = n; i--; )
|
|
164
|
+
_maxsorted[i]=i;
|
|
165
|
+
|
|
166
|
+
{
|
|
167
|
+
MaxInc<View> max_inc(x);
|
|
168
|
+
Support::insertion<int,MaxInc<View> >(_maxsorted, n, max_inc);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Setup rank and bounds info
|
|
172
|
+
GECODE_AUTOARRAY(HallInfo, hall, 2*n+2);
|
|
173
|
+
GECODE_AUTOARRAY(Rank, rank, n);
|
|
174
|
+
|
|
175
|
+
int nb = 0;
|
|
176
|
+
{
|
|
177
|
+
int min = x[GECODE_INT_MINSORTED(0)].min();
|
|
178
|
+
int max = x[GECODE_INT_MAXSORTED(0)].max() + 1;
|
|
179
|
+
int last = min - 2;
|
|
180
|
+
|
|
181
|
+
hall[0].bounds = last;
|
|
182
|
+
|
|
183
|
+
int i = 0;
|
|
184
|
+
int j = 0;
|
|
185
|
+
while (true) {
|
|
186
|
+
if (i < n && min < max) {
|
|
187
|
+
if (min != last)
|
|
188
|
+
hall[++nb].bounds = last = min;
|
|
189
|
+
rank[GECODE_INT_MINSORTED(i)].min = nb;
|
|
190
|
+
if (++i < n)
|
|
191
|
+
min = x[GECODE_INT_MINSORTED(i)].min();
|
|
192
|
+
} else {
|
|
193
|
+
if (max != last)
|
|
194
|
+
hall[++nb].bounds = last = max;
|
|
195
|
+
rank[GECODE_INT_MAXSORTED(j)].max = nb;
|
|
196
|
+
if (++j == n)
|
|
197
|
+
break;
|
|
198
|
+
max = x[GECODE_INT_MAXSORTED(j)].max() + 1;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
hall[nb+1].bounds = hall[nb].bounds + 2;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// If tells cross holes, we do not compute a fixpoint
|
|
205
|
+
ExecStatus es = ES_FIX;
|
|
206
|
+
|
|
207
|
+
// Propagate lower bounds
|
|
208
|
+
for (int i=nb+2; --i;) {
|
|
209
|
+
hall[i].t = hall[i].h = i-1;
|
|
210
|
+
hall[i].d = hall[i].bounds - hall[i-1].bounds;
|
|
211
|
+
}
|
|
212
|
+
for (int i=0; i<n; i++) { // visit intervals in increasing max order
|
|
213
|
+
int x0 = rank[GECODE_INT_MAXSORTED(i)].min;
|
|
214
|
+
int z = pathmax_t(hall, x0+1);
|
|
215
|
+
int j = hall[z].t;
|
|
216
|
+
if (--hall[z].d == 0)
|
|
217
|
+
hall[z = pathmax_t(hall, hall[z].t=z+1)].t = j;
|
|
218
|
+
pathset_t(hall, x0+1, z, z); // path compression
|
|
219
|
+
int y = rank[GECODE_INT_MAXSORTED(i)].max;
|
|
220
|
+
if (hall[z].d < hall[z].bounds-hall[y].bounds)
|
|
221
|
+
return ES_FAILED;
|
|
222
|
+
if (hall[x0].h > x0) {
|
|
223
|
+
int w = pathmax_h(hall, hall[x0].h);
|
|
224
|
+
int m = hall[w].bounds;
|
|
225
|
+
ModEvent me = x[GECODE_INT_MAXSORTED(i)].gq(home,m);
|
|
226
|
+
if (me_failed(me))
|
|
227
|
+
return ES_FAILED;
|
|
228
|
+
if ((me == ME_INT_VAL) ||
|
|
229
|
+
((me == ME_INT_BND) && (m != x[GECODE_INT_MAXSORTED(i)].min())))
|
|
230
|
+
es = ES_NOFIX;
|
|
231
|
+
pathset_h(hall, x0, w, w); // path compression
|
|
232
|
+
}
|
|
233
|
+
if (hall[z].d == hall[z].bounds-hall[y].bounds) {
|
|
234
|
+
pathset_h(hall, hall[y].h, j-1, y); // mark hall interval
|
|
235
|
+
hall[y].h = j-1;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// Propagate upper bounds
|
|
240
|
+
for (int i=nb+1; i--;) {
|
|
241
|
+
hall[i].t = hall[i].h = i+1;
|
|
242
|
+
hall[i].d = hall[i+1].bounds - hall[i].bounds;
|
|
243
|
+
}
|
|
244
|
+
for (int i=n; --i>=0; ) { // visit intervals in decreasing min order
|
|
245
|
+
int x0 = rank[GECODE_INT_MINSORTED(i)].max;
|
|
246
|
+
int z = pathmin_t(hall, x0-1);
|
|
247
|
+
int j = hall[z].t;
|
|
248
|
+
if (--hall[z].d == 0)
|
|
249
|
+
hall[z = pathmin_t(hall, hall[z].t=z-1)].t = j;
|
|
250
|
+
pathset_t(hall, x0-1, z, z);
|
|
251
|
+
int y = rank[GECODE_INT_MINSORTED(i)].min;
|
|
252
|
+
if (hall[z].d < hall[y].bounds-hall[z].bounds)
|
|
253
|
+
return ES_FAILED;
|
|
254
|
+
if (hall[x0].h < x0) {
|
|
255
|
+
int w = pathmin_h(hall, hall[x0].h);
|
|
256
|
+
int m = hall[w].bounds - 1;
|
|
257
|
+
ModEvent me = x[GECODE_INT_MINSORTED(i)].lq(home,m);
|
|
258
|
+
if (me_failed(me))
|
|
259
|
+
return ES_FAILED;
|
|
260
|
+
if ((me == ME_INT_VAL) ||
|
|
261
|
+
((me == ME_INT_BND) && (m != x[GECODE_INT_MAXSORTED(i)].min())))
|
|
262
|
+
es = ES_NOFIX;
|
|
263
|
+
pathset_h(hall, x0, w, w);
|
|
264
|
+
}
|
|
265
|
+
if (hall[z].d == hall[y].bounds-hall[z].bounds) {
|
|
266
|
+
pathset_h(hall, hall[y].h, j+1, y);
|
|
267
|
+
hall[y].h = j+1;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
if ((n > 2*m) && (n > 6)) {
|
|
272
|
+
// If there are many assigned views, try to eliminate them
|
|
273
|
+
MinInc<View> min_inc;
|
|
274
|
+
Support::insertion<View,MinInc<View> >(&x[0], n, min_inc);
|
|
275
|
+
int i = 0;
|
|
276
|
+
int j = 0;
|
|
277
|
+
int max = x[0].max()-1;
|
|
278
|
+
while (i < n-1) {
|
|
279
|
+
if (!x[i].assigned() ||
|
|
280
|
+
(x[i].val() <= max) || (x[i].val() > x[i+1].min())) {
|
|
281
|
+
// Keep view x[i]
|
|
282
|
+
max = std::max(max,x[i].max());
|
|
283
|
+
x[j++]=x[i];
|
|
284
|
+
}
|
|
285
|
+
i++;
|
|
286
|
+
}
|
|
287
|
+
if (!x[i].assigned() || (x[i].val() <= max))
|
|
288
|
+
x[j++]=x[i];
|
|
289
|
+
x.size(j);
|
|
290
|
+
if (j < 2)
|
|
291
|
+
return ES_SUBSUMED;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
return es;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
#undef GECODE_INT_MINSORTED
|
|
298
|
+
#undef GECODE_INT_MAXSORTED
|
|
299
|
+
|
|
300
|
+
template <class View>
|
|
301
|
+
ExecStatus
|
|
302
|
+
Bnd<View>::propagate(Space* home) {
|
|
303
|
+
assert(x.size() > 1);
|
|
304
|
+
|
|
305
|
+
if (View::pme(this) == ME_INT_VAL) {
|
|
306
|
+
ExecStatus es = prop_val<View,false>(home,y);
|
|
307
|
+
if ((es == ES_FAILED) || (es == ES_SUBSUMED))
|
|
308
|
+
return es;
|
|
309
|
+
if (es == ES_FIX)
|
|
310
|
+
return ES_FIX_PARTIAL(View::pme(ME_INT_BND));
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
if (y.size() == 2) {
|
|
314
|
+
GECODE_ES_CHECK(Rel::Nq<View>::post(home,y[0],y[1]));
|
|
315
|
+
return ES_SUBSUMED;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
return prop_bnd<View>(home,x,y.size());
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
template <class View>
|
|
322
|
+
ExecStatus
|
|
323
|
+
Bnd<View>::post(Space* home, ViewArray<View>& x){
|
|
324
|
+
if (x.size() == 2)
|
|
325
|
+
return Rel::Nq<View>::post(home,x[0],x[1]);
|
|
326
|
+
if (x.size() > 2)
|
|
327
|
+
(void) new (home) Bnd<View>(home,x);
|
|
328
|
+
return ES_OK;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
}}}
|
|
333
|
+
|
|
334
|
+
// STATISTICS: int-prop
|
|
335
|
+
|