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,1056 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
4
|
+
* Guido Tack <tack@gecode.org>
|
5
|
+
*
|
6
|
+
* Copyright:
|
7
|
+
* Christian Schulte, 2002
|
8
|
+
* Guido Tack, 2004
|
9
|
+
*
|
10
|
+
* Last modified:
|
11
|
+
* $Date: 2006-09-06 15:51:28 +0200 (Wed, 06 Sep 2006) $ by $Author: schulte $
|
12
|
+
* $Revision: 3604 $
|
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
|
+
#ifndef __GECODE_INT_LINEAR_HH__
|
25
|
+
#define __GECODE_INT_LINEAR_HH__
|
26
|
+
|
27
|
+
#include "gecode/int.hh"
|
28
|
+
|
29
|
+
/**
|
30
|
+
* \namespace Gecode::Int::Linear
|
31
|
+
* \brief %Linear propagators
|
32
|
+
*/
|
33
|
+
|
34
|
+
namespace Gecode { namespace Int { namespace Linear {
|
35
|
+
|
36
|
+
/*
|
37
|
+
* Binary propagators
|
38
|
+
*
|
39
|
+
*/
|
40
|
+
|
41
|
+
/**
|
42
|
+
* \brief Base-class for binary linear propagators
|
43
|
+
*
|
44
|
+
* The type \a Val can be either \c double or \c int, defining the
|
45
|
+
* numerical precision during propagation. The types \a A and \a B
|
46
|
+
* give the types of the views.
|
47
|
+
*
|
48
|
+
* The propagation condition \a pc refers to both views.
|
49
|
+
*/
|
50
|
+
template <class Val, class A, class B, PropCond pc>
|
51
|
+
class LinBin : public Propagator {
|
52
|
+
protected:
|
53
|
+
/// View of type \a A
|
54
|
+
A x0;
|
55
|
+
/// View of type \a B
|
56
|
+
B x1;
|
57
|
+
/// Value of type \a Val
|
58
|
+
Val c;
|
59
|
+
/// Constructor for cloning \a p
|
60
|
+
LinBin(Space* home, bool share, LinBin& p);
|
61
|
+
/// Constructor for rewriting \a p during cloning
|
62
|
+
LinBin(Space* home, bool share, Propagator& p, A x0, B x1, Val c);
|
63
|
+
/// Constructor for creation
|
64
|
+
LinBin(Space* home, A x0, B x1, Val c);
|
65
|
+
public:
|
66
|
+
/// Cost function (defined as PC_BINARY_LO)
|
67
|
+
virtual PropCost cost(void) const;
|
68
|
+
/// Delete propagator and return its size
|
69
|
+
virtual size_t dispose(Space* home);
|
70
|
+
};
|
71
|
+
|
72
|
+
/**
|
73
|
+
* \brief Base-class for reified binary linear propagators
|
74
|
+
*
|
75
|
+
* The type \a Val can be either \c double or \c int, defining the
|
76
|
+
* numerical precision during propagation. The types \a A and \a B
|
77
|
+
* give the types of the views.
|
78
|
+
*
|
79
|
+
* The propagation condition \a pc refers to both views.
|
80
|
+
*/
|
81
|
+
template <class Val, class A, class B, PropCond pc, class Ctrl>
|
82
|
+
class ReLinBin : public Propagator {
|
83
|
+
protected:
|
84
|
+
/// View of type \a A
|
85
|
+
A x0;
|
86
|
+
/// View of type \a B
|
87
|
+
B x1;
|
88
|
+
/// Value of type \a Val
|
89
|
+
Val c;
|
90
|
+
/// Control view for reification
|
91
|
+
Ctrl b;
|
92
|
+
/// Constructor for cloning \a p
|
93
|
+
ReLinBin(Space* home, bool share, ReLinBin& p);
|
94
|
+
/// Constructor for creation
|
95
|
+
ReLinBin(Space* home, A x0, B x1, Val c, Ctrl b);
|
96
|
+
public:
|
97
|
+
/// Cost function (defined as PC_BINARY_LO)
|
98
|
+
virtual PropCost cost(void) const;
|
99
|
+
/// Delete propagator and return its size
|
100
|
+
virtual size_t dispose(Space* home);
|
101
|
+
};
|
102
|
+
|
103
|
+
/**
|
104
|
+
* \brief %Propagator for bounds-consistent binary linear equality
|
105
|
+
*
|
106
|
+
* The type \a Val can be either \c double or \c int, defining the
|
107
|
+
* numerical precision during propagation. The types \a A and \a B
|
108
|
+
* give the types of the views.
|
109
|
+
*
|
110
|
+
* The propagation condition \a pc refers to both views.
|
111
|
+
*
|
112
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
113
|
+
* \ingroup FuncIntProp
|
114
|
+
*/
|
115
|
+
template <class Val, class A, class B>
|
116
|
+
class EqBin : public LinBin<Val,A,B,PC_INT_BND> {
|
117
|
+
protected:
|
118
|
+
using LinBin<Val,A,B,PC_INT_BND>::x0;
|
119
|
+
using LinBin<Val,A,B,PC_INT_BND>::x1;
|
120
|
+
using LinBin<Val,A,B,PC_INT_BND>::c;
|
121
|
+
|
122
|
+
/// Constructor for cloning \a p
|
123
|
+
EqBin(Space* home, bool share, EqBin& p);
|
124
|
+
/// Constructor for creation
|
125
|
+
EqBin(Space* home, A x0, B x1, Val c);
|
126
|
+
public:
|
127
|
+
/// Constructor for rewriting \a p during cloning
|
128
|
+
EqBin(Space* home, bool share, Propagator& p, A x0, B x1, Val c);
|
129
|
+
/// Create copy during cloning
|
130
|
+
virtual Actor* copy(Space* home, bool share);
|
131
|
+
/// Perform propagation
|
132
|
+
virtual ExecStatus propagate(Space* home);
|
133
|
+
/// Post propagator for \f$x_0+x_1 = c\f$
|
134
|
+
static ExecStatus post(Space* home, A x0, B x1, Val c);
|
135
|
+
};
|
136
|
+
|
137
|
+
/**
|
138
|
+
* \brief %Propagator for reified bounds-consistent binary linear equality
|
139
|
+
*
|
140
|
+
* The type \a Val can be either \c double or \c int, defining the
|
141
|
+
* numerical precision during propagation. The types \a A and \a B
|
142
|
+
* give the types of the views.
|
143
|
+
*
|
144
|
+
* The propagation condition \a pc refers to both views.
|
145
|
+
*
|
146
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
147
|
+
* \ingroup FuncIntProp
|
148
|
+
*/
|
149
|
+
template <class Val, class A, class B, class Ctrl>
|
150
|
+
class ReEqBin : public ReLinBin<Val,A,B,PC_INT_BND,Ctrl> {
|
151
|
+
protected:
|
152
|
+
using ReLinBin<Val,A,B,PC_INT_BND,Ctrl>::x0;
|
153
|
+
using ReLinBin<Val,A,B,PC_INT_BND,Ctrl>::x1;
|
154
|
+
using ReLinBin<Val,A,B,PC_INT_BND,Ctrl>::c;
|
155
|
+
using ReLinBin<Val,A,B,PC_INT_BND,Ctrl>::b;
|
156
|
+
|
157
|
+
/// Constructor for cloning \a p
|
158
|
+
ReEqBin(Space* home, bool share, ReEqBin& p);
|
159
|
+
/// Constructor for creation
|
160
|
+
ReEqBin(Space* home,A,B,Val,Ctrl);
|
161
|
+
public:
|
162
|
+
/// Create copy during cloning
|
163
|
+
virtual Actor* copy(Space* home, bool share);
|
164
|
+
/// Perform propagation
|
165
|
+
virtual ExecStatus propagate(Space* home);
|
166
|
+
/// Post propagator for \f$(x_0+x_1 = c)\Leftrightarrow b\f$
|
167
|
+
static ExecStatus post(Space* home, A x0, B x1, Val c, Ctrl b);
|
168
|
+
};
|
169
|
+
|
170
|
+
/**
|
171
|
+
* \brief %Propagator for bounds-consistent binary linear disequality
|
172
|
+
*
|
173
|
+
* The type \a Val can be either \c double or \c int, defining the
|
174
|
+
* numerical precision during propagation. The types \a A and \a B
|
175
|
+
* give the types of the views.
|
176
|
+
*
|
177
|
+
* The propagation condition \a pc refers to both views.
|
178
|
+
*
|
179
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
180
|
+
* \ingroup FuncIntProp
|
181
|
+
*/
|
182
|
+
template <class Val, class A, class B>
|
183
|
+
class NqBin : public LinBin<Val,A,B,PC_INT_VAL> {
|
184
|
+
protected:
|
185
|
+
using LinBin<Val,A,B,PC_INT_VAL>::x0;
|
186
|
+
using LinBin<Val,A,B,PC_INT_VAL>::x1;
|
187
|
+
using LinBin<Val,A,B,PC_INT_VAL>::c;
|
188
|
+
|
189
|
+
/// Constructor for cloning \a p
|
190
|
+
NqBin(Space* home, bool share, NqBin& p);
|
191
|
+
/// Constructor for creation
|
192
|
+
NqBin(Space* home, A x0, B x1, Val c);
|
193
|
+
public:
|
194
|
+
/// Constructor for rewriting \a p during cloning
|
195
|
+
NqBin(Space* home, bool share, Propagator& p, A x0, B x1, Val c);
|
196
|
+
/// Create copy during cloning
|
197
|
+
virtual Actor* copy(Space* home, bool share);
|
198
|
+
/// Perform propagation
|
199
|
+
virtual ExecStatus propagate(Space* home);
|
200
|
+
/// Cost function (defined as PC_UNARY_LO)
|
201
|
+
virtual PropCost cost(void) const;
|
202
|
+
/// Post propagator for \f$x_0+x_1 \neq c\f$
|
203
|
+
static ExecStatus post(Space* home, A x0, B x1, Val c);
|
204
|
+
};
|
205
|
+
|
206
|
+
/**
|
207
|
+
* \brief %Propagator for bounds-consistent binary linear less or equal
|
208
|
+
*
|
209
|
+
* The type \a Val can be either \c double or \c int, defining the
|
210
|
+
* numerical precision during propagation. The types \a A and \a B
|
211
|
+
* give the types of the views.
|
212
|
+
*
|
213
|
+
* The propagation condition \a pc refers to both views.
|
214
|
+
*
|
215
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
216
|
+
* \ingroup FuncIntProp
|
217
|
+
*/
|
218
|
+
template <class Val, class A, class B>
|
219
|
+
class LqBin : public LinBin<Val,A,B,PC_INT_BND> {
|
220
|
+
protected:
|
221
|
+
using LinBin<Val,A,B,PC_INT_BND>::x0;
|
222
|
+
using LinBin<Val,A,B,PC_INT_BND>::x1;
|
223
|
+
using LinBin<Val,A,B,PC_INT_BND>::c;
|
224
|
+
|
225
|
+
/// Constructor for cloning \a p
|
226
|
+
LqBin(Space* home, bool share, LqBin& p);
|
227
|
+
/// Constructor for creation
|
228
|
+
LqBin(Space* home, A x0, B x1, Val c);
|
229
|
+
public:
|
230
|
+
/// Constructor for rewriting \a p during cloning
|
231
|
+
LqBin(Space* home, bool share, Propagator& p, A x0, B x1, Val c);
|
232
|
+
/// Create copy during cloning
|
233
|
+
virtual Actor* copy(Space* home, bool share);
|
234
|
+
/// Perform propagation
|
235
|
+
virtual ExecStatus propagate(Space* home);
|
236
|
+
/// Post propagator for \f$x_0+x_1 \leq c\f$
|
237
|
+
static ExecStatus post(Space* home, A x0, B x1, Val c);
|
238
|
+
};
|
239
|
+
|
240
|
+
/**
|
241
|
+
* \brief %Propagator for bounds-consistent binary linear greater or equal
|
242
|
+
*
|
243
|
+
* The type \a Val can be either \c double or \c int, defining the
|
244
|
+
* numerical precision during propagation. The types \a A and \a B
|
245
|
+
* give the types of the views.
|
246
|
+
*
|
247
|
+
* The propagation condition \a pc refers to both views.
|
248
|
+
*
|
249
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
250
|
+
* \ingroup FuncIntProp
|
251
|
+
*/
|
252
|
+
template <class Val, class A, class B>
|
253
|
+
class GqBin : public LinBin<Val,A,B,PC_INT_BND> {
|
254
|
+
protected:
|
255
|
+
using LinBin<Val,A,B,PC_INT_BND>::x0;
|
256
|
+
using LinBin<Val,A,B,PC_INT_BND>::x1;
|
257
|
+
using LinBin<Val,A,B,PC_INT_BND>::c;
|
258
|
+
|
259
|
+
/// Constructor for cloning \a p
|
260
|
+
GqBin(Space* home, bool share, GqBin& p);
|
261
|
+
/// Constructor for creation
|
262
|
+
GqBin(Space* home, A x0, B x1, Val c);
|
263
|
+
public:
|
264
|
+
/// Constructor for rewriting \a p during cloning
|
265
|
+
GqBin(Space* home, bool share, Propagator& p, A x0, B x1, Val c);
|
266
|
+
/// Create copy during cloning
|
267
|
+
virtual Actor* copy(Space* home, bool share);
|
268
|
+
/// Perform propagation
|
269
|
+
virtual ExecStatus propagate(Space* home);
|
270
|
+
/// Post propagator for \f$x_0+x_1 \geq c\f$
|
271
|
+
static ExecStatus post(Space* home, A x0, B x1, Val c);
|
272
|
+
};
|
273
|
+
|
274
|
+
/**
|
275
|
+
* \brief %Propagator for reified bounds-consistent binary linear less or equal
|
276
|
+
*
|
277
|
+
* The type \a Val can be either \c double or \c int, defining the
|
278
|
+
* numerical precision during propagation. The types \a A and \a B
|
279
|
+
* give the types of the views.
|
280
|
+
*
|
281
|
+
* The propagation condition \a pc refers to both views.
|
282
|
+
*
|
283
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
284
|
+
* \ingroup FuncIntProp
|
285
|
+
*/
|
286
|
+
template <class Val, class A, class B>
|
287
|
+
class ReLqBin : public ReLinBin<Val,A,B,PC_INT_BND,BoolView> {
|
288
|
+
protected:
|
289
|
+
using ReLinBin<Val,A,B,PC_INT_BND,BoolView>::x0;
|
290
|
+
using ReLinBin<Val,A,B,PC_INT_BND,BoolView>::x1;
|
291
|
+
using ReLinBin<Val,A,B,PC_INT_BND,BoolView>::c;
|
292
|
+
using ReLinBin<Val,A,B,PC_INT_BND,BoolView>::b;
|
293
|
+
|
294
|
+
/// Constructor for cloning \a p
|
295
|
+
ReLqBin(Space* home, bool share, ReLqBin& p);
|
296
|
+
/// Constructor for creation
|
297
|
+
ReLqBin(Space* home, A x0, B x1, Val c, BoolView b);
|
298
|
+
public:
|
299
|
+
/// Create copy during cloning
|
300
|
+
virtual Actor* copy(Space* home, bool share);
|
301
|
+
/// Perform propagation
|
302
|
+
virtual ExecStatus propagate(Space* home);
|
303
|
+
/// Post propagator for \f$(x_0+x_1 \leq c)\Leftrightarrow b\f$
|
304
|
+
static ExecStatus post(Space* home, A x0, B x1, Val c, BoolView b);
|
305
|
+
};
|
306
|
+
|
307
|
+
}}}
|
308
|
+
|
309
|
+
#include "gecode/int/linear/binary.icc"
|
310
|
+
|
311
|
+
namespace Gecode { namespace Int { namespace Linear {
|
312
|
+
|
313
|
+
/*
|
314
|
+
* Ternary propagators
|
315
|
+
*
|
316
|
+
*/
|
317
|
+
|
318
|
+
/**
|
319
|
+
* \brief Base-class for ternary linear propagators
|
320
|
+
*
|
321
|
+
* The type \a Val can be either \c double or \c int, defining the
|
322
|
+
* numerical precision during propagation. The types \a A, \a B,
|
323
|
+
* and \a C give the types of the views.
|
324
|
+
*
|
325
|
+
* The propagation condition \a pc refers to all three views.
|
326
|
+
*/
|
327
|
+
template <class Val, class A, class B, class C, PropCond pc>
|
328
|
+
class LinTer : public Propagator {
|
329
|
+
protected:
|
330
|
+
/// View of type \a A
|
331
|
+
A x0;
|
332
|
+
/// View of type \a B
|
333
|
+
B x1;
|
334
|
+
/// View of type \a C
|
335
|
+
C x2;
|
336
|
+
/// Value of type \a Val
|
337
|
+
Val c;
|
338
|
+
/// Constructor for cloning \a p
|
339
|
+
LinTer(Space* home, bool share, LinTer& p);
|
340
|
+
/// Constructor for creation
|
341
|
+
LinTer(Space* home, A x0, B x1, C x2, Val c);
|
342
|
+
/// Constructor for rewriting \a p during cloning
|
343
|
+
LinTer(Space* home, bool share, Propagator& p, A x0, B x1, C x2, Val c);
|
344
|
+
public:
|
345
|
+
/// Cost function (defined as PC_TERNARY_LO)
|
346
|
+
virtual PropCost cost(void) const;
|
347
|
+
/// Delete propagator and return its size
|
348
|
+
virtual size_t dispose(Space* home);
|
349
|
+
};
|
350
|
+
|
351
|
+
/**
|
352
|
+
* \brief %Propagator for bounds-consistent ternary linear equality
|
353
|
+
*
|
354
|
+
* The type \a Val can be either \c double or \c int, defining the
|
355
|
+
* numerical precision during propagation. The types \a A, \a B,
|
356
|
+
* and \a C give the types of the views.
|
357
|
+
*
|
358
|
+
* The propagation condition \a pc refers to all three views.
|
359
|
+
*
|
360
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
361
|
+
* \ingroup FuncIntProp
|
362
|
+
*/
|
363
|
+
template <class Val, class A, class B, class C>
|
364
|
+
class EqTer : public LinTer<Val,A,B,C,PC_INT_BND> {
|
365
|
+
protected:
|
366
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::x0;
|
367
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::x1;
|
368
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::x2;
|
369
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::c;
|
370
|
+
|
371
|
+
/// Constructor for cloning \a p
|
372
|
+
EqTer(Space* home, bool share, EqTer& p);
|
373
|
+
/// Constructor for creation
|
374
|
+
EqTer(Space* home, A x0, B x1, C x2, Val c);
|
375
|
+
public:
|
376
|
+
/// Constructor for rewriting \a p during cloning
|
377
|
+
EqTer(Space* home, bool share, Propagator& p, A x0, B x1, C x2, Val c);
|
378
|
+
/// Create copy during cloning
|
379
|
+
virtual Actor* copy(Space* home, bool share);
|
380
|
+
/// Perform propagation
|
381
|
+
virtual ExecStatus propagate(Space* home);
|
382
|
+
/// Post propagator for \f$x_0+x_1+x_2 = c\f$
|
383
|
+
static ExecStatus post(Space* home, A x0, B x1, C x2, Val c);
|
384
|
+
};
|
385
|
+
|
386
|
+
/**
|
387
|
+
* \brief %Propagator for bounds-consistent ternary linear disquality
|
388
|
+
*
|
389
|
+
* The type \a Val can be either \c double or \c int, defining the
|
390
|
+
* numerical precision during propagation. The types \a A, \a B,
|
391
|
+
* and \a C give the types of the views.
|
392
|
+
*
|
393
|
+
* The propagation condition \a pc refers to all three views.
|
394
|
+
*
|
395
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
396
|
+
* \ingroup FuncIntProp
|
397
|
+
*/
|
398
|
+
template <class Val, class A, class B, class C>
|
399
|
+
class NqTer : public LinTer<Val,A,B,C,PC_INT_VAL> {
|
400
|
+
protected:
|
401
|
+
using LinTer<Val,A,B,C,PC_INT_VAL>::x0;
|
402
|
+
using LinTer<Val,A,B,C,PC_INT_VAL>::x1;
|
403
|
+
using LinTer<Val,A,B,C,PC_INT_VAL>::x2;
|
404
|
+
using LinTer<Val,A,B,C,PC_INT_VAL>::c;
|
405
|
+
|
406
|
+
/// Constructor for cloning \a p
|
407
|
+
NqTer(Space* home, bool share, NqTer& p);
|
408
|
+
/// Constructor for creation
|
409
|
+
NqTer(Space* home, A x0, B x1, C x2, Val c);
|
410
|
+
public:
|
411
|
+
/// Constructor for rewriting \a p during cloning
|
412
|
+
NqTer(Space* home, bool share, Propagator& p, A x0, B x1, C x2, Val c);
|
413
|
+
/// Create copy during cloning
|
414
|
+
virtual Actor* copy(Space* home, bool share);
|
415
|
+
/// Perform propagation
|
416
|
+
virtual ExecStatus propagate(Space* home);
|
417
|
+
/// Post propagator for \f$x_0+x_1+x_2 \neq c\f$
|
418
|
+
static ExecStatus post(Space* home, A x0, B x1, C x2, Val c);
|
419
|
+
};
|
420
|
+
|
421
|
+
/**
|
422
|
+
* \brief %Propagator for bounds-consistent ternary linear less or equal
|
423
|
+
*
|
424
|
+
* The type \a Val can be either \c double or \c int, defining the
|
425
|
+
* numerical precision during propagation. The types \a A, \a B,
|
426
|
+
* and \a C give the types of the views.
|
427
|
+
*
|
428
|
+
* The propagation condition \a pc refers to all three views.
|
429
|
+
*
|
430
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
431
|
+
* \ingroup FuncIntProp
|
432
|
+
*/
|
433
|
+
template <class Val, class A, class B, class C>
|
434
|
+
class LqTer : public LinTer<Val,A,B,C,PC_INT_BND> {
|
435
|
+
protected:
|
436
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::x0;
|
437
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::x1;
|
438
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::x2;
|
439
|
+
using LinTer<Val,A,B,C,PC_INT_BND>::c;
|
440
|
+
|
441
|
+
/// Constructor for cloning \a p
|
442
|
+
LqTer(Space* home, bool share, LqTer& p);
|
443
|
+
/// Constructor for creation
|
444
|
+
LqTer(Space* home, A x0, B x1, C x2, Val c);
|
445
|
+
public:
|
446
|
+
/// Constructor for rewriting \a p during cloning
|
447
|
+
LqTer(Space* home, bool share, Propagator& p, A x0, B x1, C x2, Val c);
|
448
|
+
/// Create copy during cloning
|
449
|
+
virtual Actor* copy(Space* home, bool share);
|
450
|
+
/// Perform propagation
|
451
|
+
virtual ExecStatus propagate(Space* home);
|
452
|
+
/// Post propagator for \f$x_0+x_1+x_2 \leq c\f$
|
453
|
+
static ExecStatus post(Space* home, A x0, B x1, C x2, Val c);
|
454
|
+
};
|
455
|
+
|
456
|
+
}}}
|
457
|
+
|
458
|
+
#include "gecode/int/linear/ternary.icc"
|
459
|
+
|
460
|
+
namespace Gecode { namespace Int { namespace Linear {
|
461
|
+
|
462
|
+
/*
|
463
|
+
* n-ary propagators
|
464
|
+
*
|
465
|
+
*/
|
466
|
+
|
467
|
+
/**
|
468
|
+
* \brief Base-class for n-ary linear propagators
|
469
|
+
*
|
470
|
+
* The type \a Val can be either \c double or \c int, defining the
|
471
|
+
* numerical precision during propagation. Positive views are of
|
472
|
+
* type \a P whereas negative views are of type \a N.
|
473
|
+
*
|
474
|
+
* The propagation condition \a pc refers to all views.
|
475
|
+
*/
|
476
|
+
template <class Val, class P, class N, PropCond pc>
|
477
|
+
class Lin : public Propagator {
|
478
|
+
protected:
|
479
|
+
/// Array of positive views
|
480
|
+
ViewArray<P> x;
|
481
|
+
/// Array of negative views
|
482
|
+
ViewArray<N> y;
|
483
|
+
/// Constant value
|
484
|
+
Val c;
|
485
|
+
|
486
|
+
/// Constructor for cloning \a p
|
487
|
+
Lin(Space* home, bool share, Lin& p);
|
488
|
+
/// Constructor for creation
|
489
|
+
Lin(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
490
|
+
public:
|
491
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
492
|
+
virtual PropCost cost(void) const;
|
493
|
+
/// Delete propagator and return its size
|
494
|
+
virtual size_t dispose(Space* home);
|
495
|
+
};
|
496
|
+
|
497
|
+
/**
|
498
|
+
* \brief Base-class for reified n-ary linear propagators
|
499
|
+
*
|
500
|
+
* The type \a Val can be either \c double or \c int, defining the
|
501
|
+
* numerical precision during propagation. Positive views are of
|
502
|
+
* type \a P whereas negative views are of type \a N.
|
503
|
+
*
|
504
|
+
* The propagation condition \a pc refers to all views.
|
505
|
+
*/
|
506
|
+
template <class Val, class P, class N, PropCond pc, class Ctrl>
|
507
|
+
class ReLin : public Lin<Val,P,N,pc> {
|
508
|
+
protected:
|
509
|
+
/// Control view for reification
|
510
|
+
Ctrl b;
|
511
|
+
/// Constructor for cloning \a p
|
512
|
+
ReLin(Space* home, bool share, ReLin& p);
|
513
|
+
/// Constructor for creation
|
514
|
+
ReLin(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c, Ctrl b);
|
515
|
+
public:
|
516
|
+
/// Delete propagator and return its size
|
517
|
+
virtual size_t dispose(Space* home);
|
518
|
+
};
|
519
|
+
|
520
|
+
/**
|
521
|
+
* \brief Compute bounds information for positive views
|
522
|
+
*
|
523
|
+
* \relates Lin
|
524
|
+
*/
|
525
|
+
template <class Val, class View>
|
526
|
+
void bounds_p(const Propagator*, ViewArray<View>& x,
|
527
|
+
Val& c, Val& sl, Val& su);
|
528
|
+
|
529
|
+
/**
|
530
|
+
* \brief Compute bounds information for negative views
|
531
|
+
*
|
532
|
+
* \relates Lin
|
533
|
+
*/
|
534
|
+
template <class Val, class View>
|
535
|
+
void bounds_n(const Propagator*, ViewArray<View>& y,
|
536
|
+
Val& c, Val& sl, Val& su);
|
537
|
+
|
538
|
+
/**
|
539
|
+
* \brief %Propagator for bounds-consistent n-ary linear equality
|
540
|
+
*
|
541
|
+
* The type \a Val can be either \c double or \c int, defining the
|
542
|
+
* numerical precision during propagation. The types \a P and \a N
|
543
|
+
* give the types of the views.
|
544
|
+
*
|
545
|
+
* The propagation condition \a pc refers to both views.
|
546
|
+
*
|
547
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
548
|
+
* \ingroup FuncIntProp
|
549
|
+
*/
|
550
|
+
template <class Val, class P, class N>
|
551
|
+
class Eq : public Lin<Val,P,N,PC_INT_BND> {
|
552
|
+
protected:
|
553
|
+
using Lin<Val,P,N,PC_INT_BND>::x;
|
554
|
+
using Lin<Val,P,N,PC_INT_BND>::y;
|
555
|
+
using Lin<Val,P,N,PC_INT_BND>::c;
|
556
|
+
|
557
|
+
/// Constructor for cloning \a p
|
558
|
+
Eq(Space* home, bool share, Eq& p);
|
559
|
+
public:
|
560
|
+
/// Constructor for creation
|
561
|
+
Eq(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
562
|
+
/// Create copy during cloning
|
563
|
+
virtual Actor* copy(Space* home, bool share);
|
564
|
+
/// Perform propagation
|
565
|
+
virtual ExecStatus propagate(Space* home);
|
566
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i-\sum_{i=0}^{|y|-1}y_i=c\f$
|
567
|
+
static ExecStatus
|
568
|
+
post(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
569
|
+
};
|
570
|
+
|
571
|
+
/**
|
572
|
+
* \brief %Propagator for domain-consistent n-ary linear equality
|
573
|
+
*
|
574
|
+
* The type \a Val can be either \c double or \c int, defining the
|
575
|
+
* numerical precision during propagation. The types \a View
|
576
|
+
* give the type of the view.
|
577
|
+
*
|
578
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
579
|
+
* \ingroup FuncIntProp
|
580
|
+
*/
|
581
|
+
template <class Val, class View>
|
582
|
+
class DomEq
|
583
|
+
: public Lin<Val,View,View,PC_INT_DOM> {
|
584
|
+
protected:
|
585
|
+
using Lin<Val,View,View,PC_INT_DOM>::x;
|
586
|
+
using Lin<Val,View,View,PC_INT_DOM>::y;
|
587
|
+
using Lin<Val,View,View,PC_INT_DOM>::c;
|
588
|
+
|
589
|
+
/// Constructor for cloning \a p
|
590
|
+
DomEq(Space* home, bool share, DomEq& p);
|
591
|
+
public:
|
592
|
+
/// Constructor for creation
|
593
|
+
DomEq(Space* home, ViewArray<View>& x, ViewArray<View>& y, Val c);
|
594
|
+
/// Create copy during cloning
|
595
|
+
virtual Actor* copy(Space* home, bool share);
|
596
|
+
/// Propagation cost
|
597
|
+
virtual PropCost cost(void) const;
|
598
|
+
/// Perform propagation
|
599
|
+
virtual ExecStatus propagate(Space* home);
|
600
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i-\sum_{i=0}^{|y|-1}y_i=c\f$
|
601
|
+
static ExecStatus
|
602
|
+
post(Space* home, ViewArray<View>& x, ViewArray<View>& y, Val c);
|
603
|
+
};
|
604
|
+
|
605
|
+
/**
|
606
|
+
* \brief %Propagator for reified bounds-consistent n-ary linear equality
|
607
|
+
*
|
608
|
+
* The type \a Val can be either \c double or \c int, defining the
|
609
|
+
* numerical precision during propagation. The types \a P and \a N
|
610
|
+
* give the types of the views.
|
611
|
+
*
|
612
|
+
* The propagation condition \a pc refers to both views.
|
613
|
+
*
|
614
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
615
|
+
* \ingroup FuncIntProp
|
616
|
+
*/
|
617
|
+
template <class Val, class P, class N, class Ctrl>
|
618
|
+
class ReEq : public ReLin<Val,P,N,PC_INT_BND,Ctrl> {
|
619
|
+
protected:
|
620
|
+
using ReLin<Val,P,N,PC_INT_BND,Ctrl>::x;
|
621
|
+
using ReLin<Val,P,N,PC_INT_BND,Ctrl>::y;
|
622
|
+
using ReLin<Val,P,N,PC_INT_BND,Ctrl>::c;
|
623
|
+
using ReLin<Val,P,N,PC_INT_BND,Ctrl>::b;
|
624
|
+
|
625
|
+
/// Constructor for cloning \a p
|
626
|
+
ReEq(Space* home, bool share, ReEq& p);
|
627
|
+
public:
|
628
|
+
/// Constructor for creation
|
629
|
+
ReEq(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c, Ctrl b);
|
630
|
+
/// Create copy during cloning
|
631
|
+
virtual Actor* copy(Space* home, bool share);
|
632
|
+
/// Perform propagation
|
633
|
+
virtual ExecStatus propagate(Space* home);
|
634
|
+
/// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i-\sum_{i=0}^{|y|-1}y_i=c\right)\Leftrightarrow b\f$
|
635
|
+
static ExecStatus
|
636
|
+
post(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c, Ctrl b);
|
637
|
+
};
|
638
|
+
|
639
|
+
/**
|
640
|
+
* \brief %Propagator for bounds-consistent n-ary linear disequality
|
641
|
+
*
|
642
|
+
* The type \a Val can be either \c double or \c int, defining the
|
643
|
+
* numerical precision during propagation. The types \a P and \a N
|
644
|
+
* give the types of the views.
|
645
|
+
*
|
646
|
+
* The propagation condition \a pc refers to both views.
|
647
|
+
*
|
648
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
649
|
+
* \ingroup FuncIntProp
|
650
|
+
*/
|
651
|
+
template <class Val, class P, class N>
|
652
|
+
class Nq : public Lin<Val,P,N,PC_INT_VAL> {
|
653
|
+
protected:
|
654
|
+
using Lin<Val,P,N,PC_INT_VAL>::x;
|
655
|
+
using Lin<Val,P,N,PC_INT_VAL>::y;
|
656
|
+
using Lin<Val,P,N,PC_INT_VAL>::c;
|
657
|
+
|
658
|
+
/// Constructor for cloning \a p
|
659
|
+
Nq(Space* home, bool share, Nq& p);
|
660
|
+
public:
|
661
|
+
/// Constructor for creation
|
662
|
+
Nq(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
663
|
+
/// Create copy during cloning
|
664
|
+
virtual Actor* copy(Space* home, bool share);
|
665
|
+
/// Perform propagation
|
666
|
+
virtual ExecStatus propagate(Space* home);
|
667
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i-\sum_{i=0}^{|y|-1}y_i\neq c\f$
|
668
|
+
static ExecStatus
|
669
|
+
post(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
670
|
+
};
|
671
|
+
|
672
|
+
/**
|
673
|
+
* \brief %Propagator for bounds-consistent n-ary linear less or equal
|
674
|
+
*
|
675
|
+
* The type \a Val can be either \c double or \c int, defining the
|
676
|
+
* numerical precision during propagation. The types \a P and \a N
|
677
|
+
* give the types of the views.
|
678
|
+
*
|
679
|
+
* The propagation condition \a pc refers to both views.
|
680
|
+
*
|
681
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
682
|
+
* \ingroup FuncIntProp
|
683
|
+
*/
|
684
|
+
template <class Val, class P, class N>
|
685
|
+
class Lq : public Lin<Val,P,N,PC_INT_BND> {
|
686
|
+
protected:
|
687
|
+
using Lin<Val,P,N,PC_INT_BND>::x;
|
688
|
+
using Lin<Val,P,N,PC_INT_BND>::y;
|
689
|
+
using Lin<Val,P,N,PC_INT_BND>::c;
|
690
|
+
|
691
|
+
/// Constructor for cloning \a p
|
692
|
+
Lq(Space* home, bool share, Lq& p);
|
693
|
+
public:
|
694
|
+
/// Constructor for creation
|
695
|
+
Lq(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
696
|
+
/// Create copy during cloning
|
697
|
+
virtual Actor* copy(Space* home, bool share);
|
698
|
+
/// Perform propagation
|
699
|
+
virtual ExecStatus propagate(Space* home);
|
700
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i-\sum_{i=0}^{|y|-1}y_i\leq c\f$
|
701
|
+
static ExecStatus
|
702
|
+
post(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c);
|
703
|
+
};
|
704
|
+
|
705
|
+
/**
|
706
|
+
* \brief %Propagator for reified bounds-consistent n-ary linear less or equal
|
707
|
+
*
|
708
|
+
* The type \a Val can be either \c double or \c int, defining the
|
709
|
+
* numerical precision during propagation. The types \a P and \a N
|
710
|
+
* give the types of the views.
|
711
|
+
*
|
712
|
+
* The propagation condition \a pc refers to both views.
|
713
|
+
*
|
714
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
715
|
+
* \ingroup FuncIntProp
|
716
|
+
*/
|
717
|
+
template <class Val, class P, class N>
|
718
|
+
class ReLq : public ReLin<Val,P,N,PC_INT_BND,BoolView> {
|
719
|
+
protected:
|
720
|
+
using ReLin<Val,P,N,PC_INT_BND,BoolView>::x;
|
721
|
+
using ReLin<Val,P,N,PC_INT_BND,BoolView>::y;
|
722
|
+
using ReLin<Val,P,N,PC_INT_BND,BoolView>::c;
|
723
|
+
using ReLin<Val,P,N,PC_INT_BND,BoolView>::b;
|
724
|
+
|
725
|
+
/// Constructor for cloning \a p
|
726
|
+
ReLq(Space* home, bool share, ReLq& p);
|
727
|
+
public:
|
728
|
+
/// Constructor for creation
|
729
|
+
ReLq(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c, BoolView b);
|
730
|
+
/// Create copy during cloning
|
731
|
+
virtual Actor* copy(Space* home, bool share);
|
732
|
+
/// Perform propagation
|
733
|
+
virtual ExecStatus propagate(Space* home);
|
734
|
+
/// Post propagator for \f$\left(\sum_{i=0}^{|x|-1}x_i-\sum_{i=0}^{|y|-1}y_i\leq c\right)\Leftrightarrow b\f$
|
735
|
+
static ExecStatus
|
736
|
+
post(Space* home, ViewArray<P>& x, ViewArray<N>& y, Val c, BoolView b);
|
737
|
+
};
|
738
|
+
|
739
|
+
}}}
|
740
|
+
|
741
|
+
#include "gecode/int/linear/nary.icc"
|
742
|
+
#include "gecode/int/linear/dom.icc"
|
743
|
+
|
744
|
+
namespace Gecode { namespace Int { namespace Linear {
|
745
|
+
|
746
|
+
/*
|
747
|
+
* Boolean linear propagators
|
748
|
+
*
|
749
|
+
*/
|
750
|
+
|
751
|
+
/**
|
752
|
+
* \brief Baseclass for integer Boolean sum
|
753
|
+
*
|
754
|
+
*/
|
755
|
+
template <class VX>
|
756
|
+
class LinBoolInt : public Propagator {
|
757
|
+
protected:
|
758
|
+
/// Boolean views
|
759
|
+
ViewArray<VX> x;
|
760
|
+
/// Views from x[0] ... x[n_s-1] have subscriptions
|
761
|
+
int n_s;
|
762
|
+
/// Righthandside
|
763
|
+
int c;
|
764
|
+
/// Constructor for cloning \a p
|
765
|
+
LinBoolInt(Space* home, bool share, LinBoolInt& p);
|
766
|
+
/// Constructor for creation
|
767
|
+
LinBoolInt(Space* home, ViewArray<VX>& x, int n_s, int c);
|
768
|
+
public:
|
769
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
770
|
+
virtual PropCost cost(void) const;
|
771
|
+
/// Delete propagator and return its size
|
772
|
+
virtual size_t dispose(Space* home);
|
773
|
+
};
|
774
|
+
|
775
|
+
/**
|
776
|
+
* \brief %Propagator for integer equal to Boolean sum (cardinality)
|
777
|
+
*
|
778
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
779
|
+
* \ingroup FuncIntProp
|
780
|
+
*/
|
781
|
+
template <class VX>
|
782
|
+
class EqBoolInt : public LinBoolInt<VX> {
|
783
|
+
protected:
|
784
|
+
using LinBoolInt<VX>::x;
|
785
|
+
using LinBoolInt<VX>::n_s;
|
786
|
+
using LinBoolInt<VX>::c;
|
787
|
+
/// Constructor for cloning \a p
|
788
|
+
EqBoolInt(Space* home, bool share, EqBoolInt& p);
|
789
|
+
/// Constructor for creation
|
790
|
+
EqBoolInt(Space* home, ViewArray<VX>& x, int n_s, int c);
|
791
|
+
public:
|
792
|
+
/// Create copy during cloning
|
793
|
+
virtual Actor* copy(Space* home, bool share);
|
794
|
+
/// Perform propagation
|
795
|
+
virtual ExecStatus propagate(Space* home);
|
796
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i = c\f$
|
797
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, int c);
|
798
|
+
};
|
799
|
+
|
800
|
+
/**
|
801
|
+
* \brief %Propagator for integer less or equal to Boolean sum (cardinality)
|
802
|
+
*
|
803
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
804
|
+
* \ingroup FuncIntProp
|
805
|
+
*/
|
806
|
+
template <class VX>
|
807
|
+
class GqBoolInt : public LinBoolInt<VX> {
|
808
|
+
protected:
|
809
|
+
using LinBoolInt<VX>::x;
|
810
|
+
using LinBoolInt<VX>::n_s;
|
811
|
+
using LinBoolInt<VX>::c;
|
812
|
+
/// Constructor for cloning \a p
|
813
|
+
GqBoolInt(Space* home, bool share, GqBoolInt& p);
|
814
|
+
/// Constructor for creation
|
815
|
+
GqBoolInt(Space* home, ViewArray<VX>& x, int n_s, int c);
|
816
|
+
public:
|
817
|
+
/// Create copy during cloning
|
818
|
+
virtual Actor* copy(Space* home, bool share);
|
819
|
+
/// Perform propagation
|
820
|
+
virtual ExecStatus propagate(Space* home);
|
821
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i \geq c\f$
|
822
|
+
static ExecStatus post(Space* home, ViewArray<VX>& x, int c);
|
823
|
+
};
|
824
|
+
|
825
|
+
/**
|
826
|
+
* \brief %Propagator for integer disequal to Boolean sum (cardinality)
|
827
|
+
*
|
828
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
829
|
+
* \ingroup FuncIntProp
|
830
|
+
*/
|
831
|
+
template<class VX>
|
832
|
+
class NqBoolInt : public BinaryPropagator<VX,PC_INT_VAL> {
|
833
|
+
protected:
|
834
|
+
using BinaryPropagator<VX,PC_INT_VAL>::x0;
|
835
|
+
using BinaryPropagator<VX,PC_INT_VAL>::x1;
|
836
|
+
/// Views not yet subscribed to
|
837
|
+
ViewArray<VX> x;
|
838
|
+
/// Righthandside
|
839
|
+
int c;
|
840
|
+
/// Update subscription
|
841
|
+
bool resubscribe(Space* home, VX& y);
|
842
|
+
/// Constructor for posting
|
843
|
+
NqBoolInt(Space* home, ViewArray<VX>& b, int c);
|
844
|
+
/// Constructor for cloning \a p
|
845
|
+
NqBoolInt(Space* home, bool share, NqBoolInt<VX>& p);
|
846
|
+
public:
|
847
|
+
/// Copy propagator during cloning
|
848
|
+
virtual Actor* copy(Space* home, bool share);
|
849
|
+
/// Cost function (defined as PC_LINEAR_LO)
|
850
|
+
virtual PropCost cost(void) const;
|
851
|
+
/// Perform propagation
|
852
|
+
virtual ExecStatus propagate(Space* home);
|
853
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i \neq c\f$
|
854
|
+
static ExecStatus post(Space* home, ViewArray<VX>& b, int c);
|
855
|
+
};
|
856
|
+
|
857
|
+
}}}
|
858
|
+
|
859
|
+
#include "gecode/int/linear/bool-int.icc"
|
860
|
+
|
861
|
+
namespace Gecode { namespace Int { namespace Linear {
|
862
|
+
|
863
|
+
/**
|
864
|
+
* \brief Base-class for Boolean linear propagators
|
865
|
+
*
|
866
|
+
*/
|
867
|
+
template <class XV, class YV>
|
868
|
+
class LinBoolView : public Propagator {
|
869
|
+
protected:
|
870
|
+
/// Boolean views
|
871
|
+
ViewArray<XV> x;
|
872
|
+
/// View to compare number of assigned Boolean views to
|
873
|
+
YV y;
|
874
|
+
/// Righthandside (constant part from Boolean views assigned to 1)
|
875
|
+
int c;
|
876
|
+
/// Constructor for cloning \a p
|
877
|
+
LinBoolView(Space* home, bool share, LinBoolView& p);
|
878
|
+
/// Constructor for creation
|
879
|
+
LinBoolView(Space* home, ViewArray<XV>& x, YV y, int c);
|
880
|
+
public:
|
881
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
882
|
+
virtual PropCost cost(void) const;
|
883
|
+
/// Delete propagator and return its size
|
884
|
+
virtual size_t dispose(Space* home);
|
885
|
+
};
|
886
|
+
|
887
|
+
|
888
|
+
/**
|
889
|
+
* \brief %Propagator for equality to Boolean sum (cardinality)
|
890
|
+
*
|
891
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
892
|
+
* \ingroup FuncIntProp
|
893
|
+
*/
|
894
|
+
template <class XV, class YV>
|
895
|
+
class EqBoolView : public LinBoolView<XV,YV> {
|
896
|
+
protected:
|
897
|
+
using LinBoolView<XV,YV>::x;
|
898
|
+
using LinBoolView<XV,YV>::y;
|
899
|
+
using LinBoolView<XV,YV>::c;
|
900
|
+
|
901
|
+
/// Constructor for cloning \a p
|
902
|
+
EqBoolView(Space* home, bool share, EqBoolView& p);
|
903
|
+
/// Constructor for creation
|
904
|
+
EqBoolView(Space* home, ViewArray<XV>& x, YV y, int c);
|
905
|
+
public:
|
906
|
+
/// Create copy during cloning
|
907
|
+
virtual Actor* copy(Space* home, bool share);
|
908
|
+
/// Perform propagation
|
909
|
+
virtual ExecStatus propagate(Space* home);
|
910
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i+n = y\f$
|
911
|
+
static ExecStatus post(Space* home, ViewArray<XV>& x, YV y, int c);
|
912
|
+
};
|
913
|
+
|
914
|
+
/**
|
915
|
+
* \brief %Propagator for disequality to Boolean sum (cardinality)
|
916
|
+
*
|
917
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
918
|
+
* \ingroup FuncIntProp
|
919
|
+
*/
|
920
|
+
template <class XV, class YV>
|
921
|
+
class NqBoolView : public LinBoolView<XV,YV> {
|
922
|
+
protected:
|
923
|
+
using LinBoolView<XV,YV>::x;
|
924
|
+
using LinBoolView<XV,YV>::y;
|
925
|
+
using LinBoolView<XV,YV>::c;
|
926
|
+
|
927
|
+
/// Constructor for cloning \a p
|
928
|
+
NqBoolView(Space* home, bool share, NqBoolView& p);
|
929
|
+
/// Constructor for creation
|
930
|
+
NqBoolView(Space* home, ViewArray<XV>& x, YV y, int c);
|
931
|
+
public:
|
932
|
+
/// Create copy during cloning
|
933
|
+
virtual Actor* copy(Space* home, bool share);
|
934
|
+
/// Perform propagation
|
935
|
+
virtual ExecStatus propagate(Space* home);
|
936
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i+n \neq y\f$
|
937
|
+
static ExecStatus post(Space* home, ViewArray<XV>& x, YV y, int c);
|
938
|
+
};
|
939
|
+
|
940
|
+
/**
|
941
|
+
* \brief %Propagator for greater or equal to Boolean sum (cardinality)
|
942
|
+
*
|
943
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
944
|
+
* \ingroup FuncIntProp
|
945
|
+
*/
|
946
|
+
template <class XV, class YV>
|
947
|
+
class GqBoolView : public LinBoolView<XV,YV> {
|
948
|
+
protected:
|
949
|
+
using LinBoolView<XV,YV>::x;
|
950
|
+
using LinBoolView<XV,YV>::y;
|
951
|
+
using LinBoolView<XV,YV>::c;
|
952
|
+
|
953
|
+
/// Constructor for cloning \a p
|
954
|
+
GqBoolView(Space* home, bool share, GqBoolView& p);
|
955
|
+
/// Constructor for creation
|
956
|
+
GqBoolView(Space* home, ViewArray<XV>& x, YV y, int c);
|
957
|
+
public:
|
958
|
+
/// Create copy during cloning
|
959
|
+
virtual Actor* copy(Space* home, bool share);
|
960
|
+
/// Perform propagation
|
961
|
+
virtual ExecStatus propagate(Space* home);
|
962
|
+
/// Post propagator for \f$\sum_{i=0}^{|x|-1}x_i+n \geq y\f$
|
963
|
+
static ExecStatus post(Space* home, ViewArray<XV>& x, YV y, int c);
|
964
|
+
};
|
965
|
+
|
966
|
+
}}}
|
967
|
+
|
968
|
+
#include "gecode/int/linear/bool-view.icc"
|
969
|
+
|
970
|
+
namespace Gecode { namespace Int { namespace Linear {
|
971
|
+
|
972
|
+
|
973
|
+
/*
|
974
|
+
* Support for preprocessing and posting
|
975
|
+
*
|
976
|
+
*/
|
977
|
+
|
978
|
+
/**
|
979
|
+
* \brief Class for describing linear term \f$a\cdot x\f$
|
980
|
+
*
|
981
|
+
*/
|
982
|
+
class Term {
|
983
|
+
public:
|
984
|
+
/// Coefficient
|
985
|
+
int a;
|
986
|
+
/// View
|
987
|
+
IntView x;
|
988
|
+
};
|
989
|
+
|
990
|
+
/**
|
991
|
+
* \brief Post propagator for linear constraint
|
992
|
+
* \param e array of linear terms
|
993
|
+
* \param n size of array
|
994
|
+
* \param r type of relation
|
995
|
+
* \param c result of linear constraint
|
996
|
+
*
|
997
|
+
* All variants for linear constraints share the following properties:
|
998
|
+
* - Only bounds-consistency is supported.
|
999
|
+
* - Variables occuring multiply in the term array are replaced
|
1000
|
+
* by a single occurence: for example, \f$ax+bx\f$ becomes
|
1001
|
+
* \f$(a+b)x\f$.
|
1002
|
+
* - If in the above simplification the value for \f$(a+b)\f$ (or for
|
1003
|
+
* \f$a\f$ and \f$b\f$) exceeds the limits for integers as
|
1004
|
+
* defined in Limits::Int, an exception of type
|
1005
|
+
* Int::NumericalOverflow is thrown.
|
1006
|
+
* - Assume linear terms for the constraint
|
1007
|
+
* \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$.
|
1008
|
+
* If \f$|c|+\sum_{i=0}^{|x|-1}a_i\cdot x_i\f$ exceeds the limits
|
1009
|
+
* for doubles as defined in Limits::Int, an exception of
|
1010
|
+
* type Int::NumericalOverflow is thrown.
|
1011
|
+
* - In all other cases, the created propagators are accurate (that
|
1012
|
+
* is, they will not silently overflow during propagation).
|
1013
|
+
*
|
1014
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
1015
|
+
* \ingroup FuncIntProp
|
1016
|
+
*/
|
1017
|
+
GECODE_INT_EXPORT void
|
1018
|
+
post(Space* home, Term t[], int n, IntRelType r, int c, IntConLevel=ICL_DEF);
|
1019
|
+
|
1020
|
+
/**
|
1021
|
+
* \brief Post reified propagator for linear constraint
|
1022
|
+
* \param e array of linear terms
|
1023
|
+
* \param n size of array
|
1024
|
+
* \param r type of relation
|
1025
|
+
* \param c result of linear constraint
|
1026
|
+
* \param b Boolean control view
|
1027
|
+
*
|
1028
|
+
* All variants for linear constraints share the following properties:
|
1029
|
+
* - Only bounds-consistency is supported.
|
1030
|
+
* - Variables occuring multiply in the term array are replaced
|
1031
|
+
* by a single occurence: for example, \f$ax+bx\f$ becomes
|
1032
|
+
* \f$(a+b)x\f$.
|
1033
|
+
* - If in the above simplification the value for \f$(a+b)\f$ (or for
|
1034
|
+
* \f$a\f$ and \f$b\f$) exceeds the limits for integers as
|
1035
|
+
* defined in Limits::Int, an exception of type
|
1036
|
+
* Int::NumericalOverflow is thrown.
|
1037
|
+
* - Assume linear terms for the constraint
|
1038
|
+
* \f$\sum_{i=0}^{|x|-1}a_i\cdot x_i\sim_r c\f$.
|
1039
|
+
* If \f$|c|+\sum_{i=0}^{|x|-1}a_i\cdot x_i\f$ exceeds the limits
|
1040
|
+
* for doubles as defined in Limits::Int, an exception of
|
1041
|
+
* type Int::NumericalOverflow is thrown.
|
1042
|
+
* - In all other cases, the created propagators are accurate (that
|
1043
|
+
* is, they will not silently overflow during propagation).
|
1044
|
+
*
|
1045
|
+
* Requires \code #include "gecode/int/linear.hh" \endcode
|
1046
|
+
* \ingroup FuncIntProp
|
1047
|
+
*/
|
1048
|
+
GECODE_INT_EXPORT void
|
1049
|
+
post(Space* home, Term t[], int n, IntRelType r, int c, BoolView b);
|
1050
|
+
|
1051
|
+
}}}
|
1052
|
+
|
1053
|
+
#endif
|
1054
|
+
|
1055
|
+
// STATISTICS: int-prop
|
1056
|
+
|