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,63 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2002
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-09-26 13:46:01 +0200 (Tue, 26 Sep 2006) $ by $Author: tack $
|
|
10
|
+
* $Revision: 3703 $
|
|
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/int.hh"
|
|
23
|
+
|
|
24
|
+
namespace Gecode {
|
|
25
|
+
|
|
26
|
+
IntVar::IntVar(Space* home, int min, int max)
|
|
27
|
+
: var(new (home) Int::IntVarImp(home,min,max)) {
|
|
28
|
+
if ((min < Limits::Int::int_min) || (max > Limits::Int::int_max))
|
|
29
|
+
throw Int::VariableOutOfRangeDomain("IntVar::IntVar");
|
|
30
|
+
if (min > max)
|
|
31
|
+
throw Int::VariableEmptyDomain("IntVar::IntVar");
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
IntVar::IntVar(Space* home, const IntSet& ds)
|
|
35
|
+
: var(new (home) Int::IntVarImp(home,ds)) {
|
|
36
|
+
if ((ds.min() < Limits::Int::int_min) || (ds.max() > Limits::Int::int_max))
|
|
37
|
+
throw Int::VariableOutOfRangeDomain("IntVar::IntVar");
|
|
38
|
+
if (ds.size() == 0)
|
|
39
|
+
throw Int::VariableEmptyDomain("IntVar::IntVar");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
void
|
|
43
|
+
IntVar::init(Space* home, int min, int max) {
|
|
44
|
+
if ((min < Limits::Int::int_min) || (max > Limits::Int::int_max))
|
|
45
|
+
throw Int::VariableOutOfRangeDomain("IntVar::init");
|
|
46
|
+
if (min > max)
|
|
47
|
+
throw Int::VariableEmptyDomain("IntVar::init");
|
|
48
|
+
var = new (home) Int::IntVarImp(home,min,max);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void
|
|
52
|
+
IntVar::init(Space* home, const IntSet& ds) {
|
|
53
|
+
if ((ds.min() < Limits::Int::int_min) || (ds.max() > Limits::Int::int_max))
|
|
54
|
+
throw Int::VariableOutOfRangeDomain("IntVar::init");
|
|
55
|
+
if (ds.size() == 0)
|
|
56
|
+
throw Int::VariableEmptyDomain("IntVar::init");
|
|
57
|
+
var = new (home) Int::IntVarImp(home,ds);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// STATISTICS: int-var
|
|
63
|
+
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2002
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-09-21 11:35:18 +0200 (Thu, 21 Sep 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3686 $
|
|
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 {
|
|
23
|
+
|
|
24
|
+
forceinline
|
|
25
|
+
IntVar::IntVar(void) {}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
inline
|
|
29
|
+
IntVar::IntVar(const IntVar& x)
|
|
30
|
+
: var(x.var) {}
|
|
31
|
+
inline
|
|
32
|
+
IntVar::IntVar(const Int::IntView& x)
|
|
33
|
+
: var(x.variable()) {}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
forceinline Int::IntVarImp*
|
|
38
|
+
IntVar::variable(void) const {
|
|
39
|
+
return var;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
forceinline int
|
|
44
|
+
IntVar::val(void) const {
|
|
45
|
+
return var->val();
|
|
46
|
+
}
|
|
47
|
+
forceinline int
|
|
48
|
+
IntVar::min(void) const {
|
|
49
|
+
return var->min();
|
|
50
|
+
}
|
|
51
|
+
forceinline int
|
|
52
|
+
IntVar::med(void) const {
|
|
53
|
+
return var->med();
|
|
54
|
+
}
|
|
55
|
+
forceinline int
|
|
56
|
+
IntVar::max(void) const {
|
|
57
|
+
return var->max();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
forceinline unsigned int
|
|
62
|
+
IntVar::degree(void) const {
|
|
63
|
+
return var->degree();
|
|
64
|
+
}
|
|
65
|
+
forceinline unsigned int
|
|
66
|
+
IntVar::width(void) const {
|
|
67
|
+
return var->width();
|
|
68
|
+
}
|
|
69
|
+
forceinline unsigned int
|
|
70
|
+
IntVar::size(void) const {
|
|
71
|
+
return var->size();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
forceinline bool
|
|
77
|
+
IntVar::assigned(void) const {
|
|
78
|
+
return var->assigned();
|
|
79
|
+
}
|
|
80
|
+
forceinline bool
|
|
81
|
+
IntVar::range(void) const {
|
|
82
|
+
return var->range();
|
|
83
|
+
}
|
|
84
|
+
forceinline bool
|
|
85
|
+
IntVar::in(int n) const {
|
|
86
|
+
return var->in(n);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
forceinline void
|
|
91
|
+
IntVar::update(Space* home, bool share, IntVar& x) {
|
|
92
|
+
var = x.var->copy(home,share);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* Range iterator
|
|
97
|
+
*
|
|
98
|
+
*/
|
|
99
|
+
forceinline
|
|
100
|
+
IntVarRanges::IntVarRanges(void) {}
|
|
101
|
+
|
|
102
|
+
forceinline
|
|
103
|
+
IntVarRanges::IntVarRanges(const IntVar& x)
|
|
104
|
+
: Int::IntVarImpFwd(x.variable()) {}
|
|
105
|
+
|
|
106
|
+
forceinline void
|
|
107
|
+
IntVarRanges::init(const IntVar& x) {
|
|
108
|
+
Int::IntVarImpFwd::init(x.variable());
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* Value iterator
|
|
114
|
+
*
|
|
115
|
+
*/
|
|
116
|
+
|
|
117
|
+
forceinline
|
|
118
|
+
IntVarValues::IntVarValues(void) {}
|
|
119
|
+
|
|
120
|
+
forceinline
|
|
121
|
+
IntVarValues::IntVarValues(const IntVar& x) {
|
|
122
|
+
IntVarRanges r(x);
|
|
123
|
+
Iter::Ranges::ToValues<IntVarRanges>::init(r);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
forceinline void
|
|
127
|
+
IntVarValues::init(const IntVar& x) {
|
|
128
|
+
IntVarRanges r(x);
|
|
129
|
+
Iter::Ranges::ToValues<IntVarRanges>::init(r);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// STATISTICS: int-var
|
|
135
|
+
|
|
@@ -0,0 +1,1219 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2005
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-24 11:25:05 +0200 (Thu, 24 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3559 $
|
|
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/iter.hh"
|
|
23
|
+
|
|
24
|
+
#include <iostream>
|
|
25
|
+
|
|
26
|
+
#if (-17 / 7) == -2
|
|
27
|
+
#define GECODE_INT_RND_TWDS_ZERO 1
|
|
28
|
+
#else
|
|
29
|
+
#define GECODE_INT_RND_TWDS_ZERO 0
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
namespace Gecode { namespace Int {
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* \brief Range iterator for integer views
|
|
36
|
+
*
|
|
37
|
+
* This class provides (by specialization) a range iterator
|
|
38
|
+
* for all integer views.
|
|
39
|
+
*
|
|
40
|
+
* Note that this template class serves only as a specification
|
|
41
|
+
* of the interface of the various specializations.
|
|
42
|
+
*
|
|
43
|
+
* \ingroup TaskActorInt
|
|
44
|
+
*/
|
|
45
|
+
template <class View>
|
|
46
|
+
class ViewRanges {
|
|
47
|
+
public:
|
|
48
|
+
/// \name Constructors and initialization
|
|
49
|
+
//@{
|
|
50
|
+
/// Default constructor
|
|
51
|
+
ViewRanges(void);
|
|
52
|
+
/// Initialize with ranges for view \a x
|
|
53
|
+
ViewRanges(const View& x);
|
|
54
|
+
/// Initialize with ranges for view \a x
|
|
55
|
+
void init(const View& x);
|
|
56
|
+
//@}
|
|
57
|
+
|
|
58
|
+
/// \name Iteration control
|
|
59
|
+
//@{
|
|
60
|
+
/// Test whether iterator is still at a range or done
|
|
61
|
+
bool operator()(void) const;
|
|
62
|
+
/// Move iterator to next range (if possible)
|
|
63
|
+
void operator++(void);
|
|
64
|
+
//@}
|
|
65
|
+
|
|
66
|
+
/// \name Range access
|
|
67
|
+
//@{
|
|
68
|
+
/// Return smallest value of range
|
|
69
|
+
int min(void) const;
|
|
70
|
+
/// Return largest value of range
|
|
71
|
+
int max(void) const;
|
|
72
|
+
/// Return width of range (distance between minimum and maximum)
|
|
73
|
+
unsigned int width(void) const;
|
|
74
|
+
//@}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* \brief Value iterator for integer views
|
|
79
|
+
*
|
|
80
|
+
* This class provides a value iterator for all
|
|
81
|
+
* integer views.
|
|
82
|
+
*
|
|
83
|
+
* \ingroup TaskActorInt
|
|
84
|
+
*/
|
|
85
|
+
template <class View>
|
|
86
|
+
class ViewValues
|
|
87
|
+
: public Iter::Ranges::ToValues<ViewRanges<View> > {
|
|
88
|
+
public:
|
|
89
|
+
/// \name Constructors and initialization
|
|
90
|
+
//@{
|
|
91
|
+
/// Default constructor
|
|
92
|
+
ViewValues(void);
|
|
93
|
+
/// Initialize with values for \a x
|
|
94
|
+
ViewValues(const View& x);
|
|
95
|
+
/// Initialize with values \a x
|
|
96
|
+
void init(const View& x);
|
|
97
|
+
//@}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
}}
|
|
101
|
+
|
|
102
|
+
#include "gecode/int/view/iter.icc"
|
|
103
|
+
|
|
104
|
+
namespace Gecode {
|
|
105
|
+
|
|
106
|
+
namespace Int {
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* \defgroup TaskActorIntView Integer views
|
|
110
|
+
*
|
|
111
|
+
* Integer propagators and branchings compute with integer views.
|
|
112
|
+
* Integer views provide views on integer variable implementations,
|
|
113
|
+
* integer constants, and also allow to scale, translate, and negate
|
|
114
|
+
* variables. Additionally, a special Boolean view is provided that
|
|
115
|
+
* offers convenient and efficient operations for Boolean (0/1)
|
|
116
|
+
* views.
|
|
117
|
+
* \ingroup TaskActorInt
|
|
118
|
+
*/
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* \brief Integer view for integer variables
|
|
122
|
+
* \ingroup TaskActorIntView
|
|
123
|
+
*/
|
|
124
|
+
class IntView : public VariableViewBase<IntVarImp> {
|
|
125
|
+
protected:
|
|
126
|
+
using VariableViewBase<IntVarImp>::var;
|
|
127
|
+
public:
|
|
128
|
+
/// \name Constructors and initialization
|
|
129
|
+
//@{
|
|
130
|
+
/// Default constructor
|
|
131
|
+
IntView(void);
|
|
132
|
+
/// Initialize from integer variable \a x
|
|
133
|
+
IntView(const IntVar& x);
|
|
134
|
+
//@}
|
|
135
|
+
|
|
136
|
+
/// \name Value access
|
|
137
|
+
//@{
|
|
138
|
+
/// Return minimum of domain
|
|
139
|
+
int min(void) const;
|
|
140
|
+
/// Return maximum of domain
|
|
141
|
+
int max(void) const;
|
|
142
|
+
/// Return median of domain
|
|
143
|
+
int med(void) const;
|
|
144
|
+
/// Return assigned value (only if assigned)
|
|
145
|
+
int val(void) const;
|
|
146
|
+
|
|
147
|
+
/// Return size (cardinality) of domain
|
|
148
|
+
unsigned int size(void) const;
|
|
149
|
+
/// Return width of domain (distance between maximum and minimum)
|
|
150
|
+
unsigned int width(void) const;
|
|
151
|
+
/// Return regret of domain minimum (distance to next larger value)
|
|
152
|
+
unsigned int regret_min(void) const;
|
|
153
|
+
/// Return regret of domain maximum (distance to next smaller value)
|
|
154
|
+
unsigned int regret_max(void) const;
|
|
155
|
+
//@}
|
|
156
|
+
|
|
157
|
+
/// \name Domain tests
|
|
158
|
+
//@{
|
|
159
|
+
/// Test whether domain is a range
|
|
160
|
+
bool range(void) const;
|
|
161
|
+
/// Test whether view is assigned
|
|
162
|
+
bool assigned(void) const;
|
|
163
|
+
|
|
164
|
+
/// Test whether \a n is contained in domain
|
|
165
|
+
bool in(int n) const;
|
|
166
|
+
/// Test whether \a n is contained in domain
|
|
167
|
+
bool in(double n) const;
|
|
168
|
+
//@}
|
|
169
|
+
|
|
170
|
+
/// \name Domain update by value
|
|
171
|
+
//@{
|
|
172
|
+
/// Restrict domain values to be less or equal than \a n
|
|
173
|
+
ModEvent lq(Space* home, int n);
|
|
174
|
+
/// Restrict domain values to be less or equal than \a n
|
|
175
|
+
ModEvent lq(Space* home, double n);
|
|
176
|
+
|
|
177
|
+
/// Restrict domain values to be less than \a n
|
|
178
|
+
ModEvent le(Space* home, int n);
|
|
179
|
+
/// Restrict domain values to be less than \a n
|
|
180
|
+
ModEvent le(Space* home, double n);
|
|
181
|
+
|
|
182
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
183
|
+
ModEvent gq(Space* home, int n);
|
|
184
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
185
|
+
ModEvent gq(Space* home, double n);
|
|
186
|
+
|
|
187
|
+
/// Restrict domain values to be greater than \a n
|
|
188
|
+
ModEvent gr(Space* home, int n);
|
|
189
|
+
/// Restrict domain values to be greater than \a n
|
|
190
|
+
ModEvent gr(Space* home, double n);
|
|
191
|
+
|
|
192
|
+
/// Restrict domain values to be different from \a n
|
|
193
|
+
ModEvent nq(Space* home, int n);
|
|
194
|
+
/// Restrict domain values to be different from \a n
|
|
195
|
+
ModEvent nq(Space* home, double n);
|
|
196
|
+
|
|
197
|
+
/// Restrict domain values to be equal to \a n
|
|
198
|
+
ModEvent eq(Space* home, int n);
|
|
199
|
+
/// Restrict domain values to be equal to \a n
|
|
200
|
+
ModEvent eq(Space* home, double n);
|
|
201
|
+
//@}
|
|
202
|
+
|
|
203
|
+
/// \name Domain update by range iterator
|
|
204
|
+
//@{
|
|
205
|
+
/// Replace domain by range sequence described by \a i
|
|
206
|
+
template <class I> ModEvent narrow(Space* home, I& i);
|
|
207
|
+
/// Intersect domain with range sequence described by \a i
|
|
208
|
+
template <class I> ModEvent inter(Space* home, I& i);
|
|
209
|
+
/// Remove from domain the range sequence described by \a i
|
|
210
|
+
template <class I> ModEvent minus(Space* home, I& i);
|
|
211
|
+
//@}
|
|
212
|
+
|
|
213
|
+
/// \name Cloning
|
|
214
|
+
//@{
|
|
215
|
+
/// Update this view to be a clone of view \a x
|
|
216
|
+
void update(Space* home, bool share, IntView& x);
|
|
217
|
+
//@}
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* \brief Traits class for views and variable implementations
|
|
224
|
+
*
|
|
225
|
+
* This class specializes the ViewVarTraits for IntView
|
|
226
|
+
* \ingroup TaskActorIntView
|
|
227
|
+
*/
|
|
228
|
+
template<>
|
|
229
|
+
class ViewVarTraits<Int::IntView> {
|
|
230
|
+
public:
|
|
231
|
+
/// The variable type of an IntView
|
|
232
|
+
typedef Int::IntVarImp Var;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
namespace Int {
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* \brief Minus integer view
|
|
239
|
+
*
|
|
240
|
+
* A minus integer view \f$m\f$ for an integer view \f$x\f$ provides
|
|
241
|
+
* operations such that \f$m\f$ behaves as \f$-x\f$.
|
|
242
|
+
* \ingroup TaskActorIntView
|
|
243
|
+
*/
|
|
244
|
+
class MinusView : public DerivedViewBase<IntView> {
|
|
245
|
+
protected:
|
|
246
|
+
using DerivedViewBase<IntView>::view;
|
|
247
|
+
public:
|
|
248
|
+
/// \name Constructors and initialization
|
|
249
|
+
//@{
|
|
250
|
+
/// Default constructor
|
|
251
|
+
MinusView(void);
|
|
252
|
+
/// Initialize with integer view \a x
|
|
253
|
+
MinusView(const IntView& x);
|
|
254
|
+
/// Initialize with integer view \a x
|
|
255
|
+
void init(const IntView& x);
|
|
256
|
+
//@}
|
|
257
|
+
|
|
258
|
+
/// \name Value access
|
|
259
|
+
//@{
|
|
260
|
+
/// Return minimum of domain
|
|
261
|
+
int min(void) const;
|
|
262
|
+
/// Return maximum of domain
|
|
263
|
+
int max(void) const;
|
|
264
|
+
/// Return median of domain
|
|
265
|
+
int med(void) const;
|
|
266
|
+
/// Return assigned value (only if assigned)
|
|
267
|
+
int val(void) const;
|
|
268
|
+
|
|
269
|
+
/// Return size (cardinality) of domain
|
|
270
|
+
unsigned int size(void) const;
|
|
271
|
+
/// Return width of domain (distance between maximum and minimum)
|
|
272
|
+
unsigned int width(void) const;
|
|
273
|
+
/// Return regret of domain minimum (distance to next larger value)
|
|
274
|
+
unsigned int regret_min(void) const;
|
|
275
|
+
/// Return regret of domain maximum (distance to next smaller value)
|
|
276
|
+
unsigned int regret_max(void) const;
|
|
277
|
+
//@}
|
|
278
|
+
|
|
279
|
+
/// \name Domain tests
|
|
280
|
+
//@{
|
|
281
|
+
/// Test whether domain is a range
|
|
282
|
+
bool range(void) const;
|
|
283
|
+
/// Test whether view is assigned
|
|
284
|
+
bool assigned(void) const;
|
|
285
|
+
|
|
286
|
+
/// Test whether \a n is contained in domain
|
|
287
|
+
bool in(int n) const;
|
|
288
|
+
/// Test whether \a n is contained in domain
|
|
289
|
+
bool in(double n) const;
|
|
290
|
+
//@}
|
|
291
|
+
|
|
292
|
+
/// \name Domain update by value
|
|
293
|
+
//@{
|
|
294
|
+
/// Restrict domain values to be less or equal than \a n
|
|
295
|
+
ModEvent lq(Space* home, int n);
|
|
296
|
+
/// Restrict domain values to be less or equal than \a n
|
|
297
|
+
ModEvent lq(Space* home, double n);
|
|
298
|
+
/// Restrict domain values to be less than \a n
|
|
299
|
+
ModEvent le(Space* home, int n);
|
|
300
|
+
/// Restrict domain values to be less than \a n
|
|
301
|
+
ModEvent le(Space* home, double n);
|
|
302
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
303
|
+
ModEvent gq(Space* home, int n);
|
|
304
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
305
|
+
ModEvent gq(Space* home, double n);
|
|
306
|
+
/// Restrict domain values to be greater than \a n
|
|
307
|
+
ModEvent gr(Space* home, int n);
|
|
308
|
+
/// Restrict domain values to be greater than \a n
|
|
309
|
+
ModEvent gr(Space* home, double n);
|
|
310
|
+
/// Restrict domain values to be different from \a n
|
|
311
|
+
ModEvent nq(Space* home, int n);
|
|
312
|
+
/// Restrict domain values to be different from \a n
|
|
313
|
+
ModEvent nq(Space* home, double n);
|
|
314
|
+
/// Restrict domain values to be equal to \a n
|
|
315
|
+
ModEvent eq(Space* home, int n);
|
|
316
|
+
/// Restrict domain values to be equal to \a n
|
|
317
|
+
ModEvent eq(Space* home, double n);
|
|
318
|
+
//@}
|
|
319
|
+
|
|
320
|
+
/// \name Domain update by range iterator
|
|
321
|
+
//@{
|
|
322
|
+
/// Replace domain by range sequence described by \a i
|
|
323
|
+
template <class I> ModEvent narrow(Space* home, I& i);
|
|
324
|
+
/// Intersect domain with range sequence described by \a i
|
|
325
|
+
template <class I> ModEvent inter(Space* home, I& i);
|
|
326
|
+
/// Remove from domain the range sequence described by \a i
|
|
327
|
+
template <class I> ModEvent minus(Space* home, I& i);
|
|
328
|
+
//@}
|
|
329
|
+
|
|
330
|
+
/// \name Propagator modification events
|
|
331
|
+
//@{
|
|
332
|
+
/// Return modification event of propagator \a p for view
|
|
333
|
+
static ModEvent pme(const Propagator* p);
|
|
334
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
335
|
+
static PropModEvent pme(ModEvent me);
|
|
336
|
+
//@}
|
|
337
|
+
|
|
338
|
+
/// \name Dependencies
|
|
339
|
+
//@{
|
|
340
|
+
/**
|
|
341
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
342
|
+
*
|
|
343
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
344
|
+
* not processed for execution (this must be used when creating
|
|
345
|
+
* subscriptions during propagation).
|
|
346
|
+
*/
|
|
347
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
348
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
349
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
350
|
+
//@}
|
|
351
|
+
|
|
352
|
+
/// \name Cloning
|
|
353
|
+
//@{
|
|
354
|
+
/// Update this view to be a clone of view \a x
|
|
355
|
+
void update(Space* home, bool share, MinusView& x);
|
|
356
|
+
//@}
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/** \name View comparison
|
|
362
|
+
* \relates Gecode::Int::MinusView
|
|
363
|
+
*/
|
|
364
|
+
//@{
|
|
365
|
+
/// Test whether views \a x and \a y are the same
|
|
366
|
+
bool same(const Int::MinusView& x, const Int::MinusView& y);
|
|
367
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
368
|
+
bool before(const Int::MinusView& x, const Int::MinusView& y);
|
|
369
|
+
//@}
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* \brief Traits class for views and variable implementations
|
|
373
|
+
*
|
|
374
|
+
* This class specializes the ViewVarTraits for MinusView.
|
|
375
|
+
* \ingroup TaskActorIntView
|
|
376
|
+
*/
|
|
377
|
+
template<>
|
|
378
|
+
class ViewVarTraits<Int::MinusView> {
|
|
379
|
+
public:
|
|
380
|
+
/// The variable type of a MinusView
|
|
381
|
+
typedef Int::IntVarImp Var;
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
namespace Int {
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* \brief Offset integer view
|
|
389
|
+
*
|
|
390
|
+
* An offset integer view \f$o\f$ for an integer view \f$x\f$ and
|
|
391
|
+
* an integer \f$c\f$ provides operations such that \f$o\f$
|
|
392
|
+
* behaves as \f$x+c\f$.
|
|
393
|
+
* \ingroup TaskActorIntView
|
|
394
|
+
*/
|
|
395
|
+
class OffsetView : public DerivedViewBase<IntView> {
|
|
396
|
+
protected:
|
|
397
|
+
/// Offset
|
|
398
|
+
int c;
|
|
399
|
+
using DerivedViewBase<IntView>::view;
|
|
400
|
+
public:
|
|
401
|
+
/// \name Constructors and initialization
|
|
402
|
+
//@{
|
|
403
|
+
/// Default constructor
|
|
404
|
+
OffsetView(void);
|
|
405
|
+
/// Initialize with integer view \a x and offset \a c
|
|
406
|
+
OffsetView(const IntView& x, int c);
|
|
407
|
+
/// Initialize with integer view \a x and offset \a c
|
|
408
|
+
void init(const IntView& x, int c);
|
|
409
|
+
/// Return offset
|
|
410
|
+
int offset(void) const;
|
|
411
|
+
//@}
|
|
412
|
+
|
|
413
|
+
/// \name Value access
|
|
414
|
+
//@{
|
|
415
|
+
/// Return minimum of domain
|
|
416
|
+
int min(void) const;
|
|
417
|
+
/// Return maximum of domain
|
|
418
|
+
int max(void) const;
|
|
419
|
+
/// Return median of domain
|
|
420
|
+
int med(void) const;
|
|
421
|
+
/// Return assigned value (only if assigned)
|
|
422
|
+
int val(void) const;
|
|
423
|
+
|
|
424
|
+
/// Return size (cardinality) of domain
|
|
425
|
+
unsigned int size(void) const;
|
|
426
|
+
/// Return width of domain (distance between maximum and minimum)
|
|
427
|
+
unsigned int width(void) const;
|
|
428
|
+
/// Return regret of domain minimum (distance to next larger value)
|
|
429
|
+
unsigned int regret_min(void) const;
|
|
430
|
+
/// Return regret of domain maximum (distance to next smaller value)
|
|
431
|
+
unsigned int regret_max(void) const;
|
|
432
|
+
//@}
|
|
433
|
+
|
|
434
|
+
/// \name Domain tests
|
|
435
|
+
//@{
|
|
436
|
+
/// Test whether domain is a range
|
|
437
|
+
bool range(void) const;
|
|
438
|
+
/// Test whether view is assigned
|
|
439
|
+
bool assigned(void) const;
|
|
440
|
+
|
|
441
|
+
/// Test whether \a n is contained in domain
|
|
442
|
+
bool in(int n) const;
|
|
443
|
+
/// Test whether \a n is contained in domain
|
|
444
|
+
bool in(double n) const;
|
|
445
|
+
//@}
|
|
446
|
+
|
|
447
|
+
/// \name Domain update by value
|
|
448
|
+
//@{
|
|
449
|
+
/// Restrict domain values to be less or equal than \a n
|
|
450
|
+
ModEvent lq(Space* home, int n);
|
|
451
|
+
/// Restrict domain values to be less or equal than \a n
|
|
452
|
+
ModEvent lq(Space* home, double n);
|
|
453
|
+
/// Restrict domain values to be less than \a n
|
|
454
|
+
ModEvent le(Space* home, int n);
|
|
455
|
+
/// Restrict domain values to be less than \a n
|
|
456
|
+
ModEvent le(Space* home, double n);
|
|
457
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
458
|
+
ModEvent gq(Space* home, int n);
|
|
459
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
460
|
+
ModEvent gq(Space* home, double n);
|
|
461
|
+
/// Restrict domain values to be greater than \a n
|
|
462
|
+
ModEvent gr(Space* home, int n);
|
|
463
|
+
/// Restrict domain values to be greater than \a n
|
|
464
|
+
ModEvent gr(Space* home, double n);
|
|
465
|
+
/// Restrict domain values to be different from \a n
|
|
466
|
+
ModEvent nq(Space* home, int n);
|
|
467
|
+
/// Restrict domain values to be different from \a n
|
|
468
|
+
ModEvent nq(Space* home, double n);
|
|
469
|
+
/// Restrict domain values to be equal to \a n
|
|
470
|
+
ModEvent eq(Space* home, int n);
|
|
471
|
+
/// Restrict domain values to be equal to \a n
|
|
472
|
+
ModEvent eq(Space* home, double n);
|
|
473
|
+
//@}
|
|
474
|
+
|
|
475
|
+
/// \name Domain update by range iterator
|
|
476
|
+
//@{
|
|
477
|
+
/// Replace domain by range sequence described by \a i
|
|
478
|
+
template <class I> ModEvent narrow(Space* home, I& i);
|
|
479
|
+
/// Intersect domain with range sequence described by \a i
|
|
480
|
+
template <class I> ModEvent inter(Space* home, I& i);
|
|
481
|
+
/// Remove from domain the range sequence described by \a i
|
|
482
|
+
template <class I> ModEvent minus(Space* home, I& i);
|
|
483
|
+
//@}
|
|
484
|
+
|
|
485
|
+
/// \name Propagator modification events
|
|
486
|
+
//@{
|
|
487
|
+
/// Return modification event of propagator \a p for view
|
|
488
|
+
static ModEvent pme(const Propagator* p);
|
|
489
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
490
|
+
static PropModEvent pme(ModEvent me);
|
|
491
|
+
//@}
|
|
492
|
+
|
|
493
|
+
/// \name Dependencies
|
|
494
|
+
//@{
|
|
495
|
+
/**
|
|
496
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
497
|
+
*
|
|
498
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
499
|
+
* not processed for execution (this must be used when creating
|
|
500
|
+
* subscriptions during propagation).
|
|
501
|
+
*/
|
|
502
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
503
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
504
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
505
|
+
//@}
|
|
506
|
+
|
|
507
|
+
/// \name Cloning
|
|
508
|
+
//@{
|
|
509
|
+
/// Update this view to be a clone of view \a x
|
|
510
|
+
void update(Space* home, bool share, OffsetView& x);
|
|
511
|
+
//@}
|
|
512
|
+
};
|
|
513
|
+
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
/** \name View comparison
|
|
517
|
+
* \relates Gecode::Int::OffsetView
|
|
518
|
+
*/
|
|
519
|
+
//@{
|
|
520
|
+
/// Test whether views \a x and \a y are the same
|
|
521
|
+
bool same(const Int::OffsetView& x, const Int::OffsetView& y);
|
|
522
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
523
|
+
bool before(const Int::OffsetView& x, const Int::OffsetView& y);
|
|
524
|
+
//@}
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* \brief Traits class for views and variable implementations
|
|
528
|
+
*
|
|
529
|
+
* This class specializes the ViewVarTraits for OffsetView.
|
|
530
|
+
* \ingroup TaskActorIntView
|
|
531
|
+
*/
|
|
532
|
+
template<>
|
|
533
|
+
class ViewVarTraits<Int::OffsetView> {
|
|
534
|
+
public:
|
|
535
|
+
/// The variable type of an OffsetView
|
|
536
|
+
typedef Int::IntVarImp Var;
|
|
537
|
+
};
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
namespace Int {
|
|
542
|
+
|
|
543
|
+
/**
|
|
544
|
+
* \brief Scale integer view (template)
|
|
545
|
+
*
|
|
546
|
+
* A scale integer view \f$s\f$ for an integer view \f$x\f$ and
|
|
547
|
+
* a non-negative integer \f$a\f$ provides operations such that \f$s\f$
|
|
548
|
+
* behaves as \f$a\cdot x\f$.
|
|
549
|
+
*
|
|
550
|
+
* The precision of a scale integer view is defined by the value types
|
|
551
|
+
* \a Val and \a UnsVal. \a Val can be either \c int or \c double where
|
|
552
|
+
* \a UnsVal must be the unsigned variant of \a Val (that is, if \a Val
|
|
553
|
+
* is \c int, then \a UnsVal must be \c unsigned \c int; if \a Val is
|
|
554
|
+
* \c double, then \a UnsVal must be \c double as well). The range which is
|
|
555
|
+
* allowed for the two types is defined by the values in
|
|
556
|
+
* Gecode::Limits.
|
|
557
|
+
*
|
|
558
|
+
* Note that scale integer views currently do not provide operations
|
|
559
|
+
* for updating domains by range iterators.
|
|
560
|
+
*
|
|
561
|
+
* The template is not to be used directly (as it is very clumsy). Use
|
|
562
|
+
* the following instead:
|
|
563
|
+
* - IntScaleView for scale views with integer precision
|
|
564
|
+
* - DoubleScaleView for scale views with double precision
|
|
565
|
+
*
|
|
566
|
+
* \ingroup TaskActorIntView
|
|
567
|
+
*/
|
|
568
|
+
template <class Val, class UnsVal>
|
|
569
|
+
class ScaleView : public DerivedViewBase<IntView> {
|
|
570
|
+
protected:
|
|
571
|
+
/// Scale factor
|
|
572
|
+
int a;
|
|
573
|
+
using DerivedViewBase<IntView>::view;
|
|
574
|
+
|
|
575
|
+
/// \name Support functions for division
|
|
576
|
+
//@{
|
|
577
|
+
/// Return \f$\lfloor x/a\rfloor\f$
|
|
578
|
+
int floor_div(double x) const;
|
|
579
|
+
/// Return \f$\lceil x/a\rceil\f$
|
|
580
|
+
int ceil_div(double x) const;
|
|
581
|
+
/// Return \f$x/a\f$ and set \a exact to true if \a x is multiple of \a a
|
|
582
|
+
int exact_div(double x, bool& exact) const;
|
|
583
|
+
#if GECODE_INT_RND_TWDS_ZERO
|
|
584
|
+
/// Return \f$\lfloor x/a\rfloor\f$
|
|
585
|
+
int floor_div(int) const;
|
|
586
|
+
/// Return \f$\lceil x/a\rceil\f$
|
|
587
|
+
int ceil_div(int) const;
|
|
588
|
+
/// Return \f$x/a\f$ and set \a exact to true if \a x is multiple of \a a
|
|
589
|
+
int exact_div(int, bool&) const;
|
|
590
|
+
#endif
|
|
591
|
+
//@}
|
|
592
|
+
|
|
593
|
+
public:
|
|
594
|
+
/// \name Constructors and initialization
|
|
595
|
+
//@{
|
|
596
|
+
/// Default constructor
|
|
597
|
+
ScaleView(void);
|
|
598
|
+
/// Initialize as \f$b\cdot y\f$
|
|
599
|
+
ScaleView(int b, const IntView& y);
|
|
600
|
+
/// Initialize as \f$b\cdot y\f$
|
|
601
|
+
void init(int b, const IntView& y);
|
|
602
|
+
/// Return scale factor of scale view
|
|
603
|
+
int scale(void) const;
|
|
604
|
+
//@}
|
|
605
|
+
|
|
606
|
+
|
|
607
|
+
/// \name Value access
|
|
608
|
+
//@{
|
|
609
|
+
/// Return minimum of domain
|
|
610
|
+
Val min(void) const;
|
|
611
|
+
/// Return maximum of domain
|
|
612
|
+
Val max(void) const;
|
|
613
|
+
/// Return median of domain
|
|
614
|
+
Val med(void) const;
|
|
615
|
+
/// Return assigned value (only if assigned)
|
|
616
|
+
Val val(void) const;
|
|
617
|
+
|
|
618
|
+
/// Return size (cardinality) of domain
|
|
619
|
+
UnsVal size(void) const;
|
|
620
|
+
/// Return width of domain (distance between maximum and minimum)
|
|
621
|
+
UnsVal width(void) const;
|
|
622
|
+
/// Return regret of domain minimum (distance to next larger value)
|
|
623
|
+
UnsVal regret_min(void) const;
|
|
624
|
+
/// Return regret of domain maximum (distance to next smaller value)
|
|
625
|
+
UnsVal regret_max(void) const;
|
|
626
|
+
//@}
|
|
627
|
+
|
|
628
|
+
/// \name Domain tests
|
|
629
|
+
//@{
|
|
630
|
+
/// Test whether domain is a range
|
|
631
|
+
bool range(void) const;
|
|
632
|
+
/// Test whether view is assigned
|
|
633
|
+
bool assigned(void) const;
|
|
634
|
+
/// Test whether \a n is contained in domain
|
|
635
|
+
bool in(Val n) const;
|
|
636
|
+
//@}
|
|
637
|
+
|
|
638
|
+
/// \name Domain update by value
|
|
639
|
+
//@{
|
|
640
|
+
/// Restrict domain values to be less or equal than \a n
|
|
641
|
+
ModEvent lq(Space* home, Val n);
|
|
642
|
+
/// Restrict domain values to be less than \a n
|
|
643
|
+
ModEvent le(Space* home, Val n);
|
|
644
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
645
|
+
ModEvent gq(Space* home, Val n);
|
|
646
|
+
/// Restrict domain values to be greater than \a n
|
|
647
|
+
ModEvent gr(Space* home, Val n);
|
|
648
|
+
/// Restrict domain values to be different from \a n
|
|
649
|
+
ModEvent nq(Space* home, Val n);
|
|
650
|
+
/// Restrict domain values to be equal to \a n
|
|
651
|
+
ModEvent eq(Space* home, Val n);
|
|
652
|
+
//@}
|
|
653
|
+
|
|
654
|
+
/// \name Propagator modification events
|
|
655
|
+
//@{
|
|
656
|
+
/// Return modification event of propagator \a p for view
|
|
657
|
+
static ModEvent pme(const Propagator* p);
|
|
658
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
659
|
+
static PropModEvent pme(ModEvent me);
|
|
660
|
+
//@}
|
|
661
|
+
|
|
662
|
+
/// \name Dependencies
|
|
663
|
+
//@{
|
|
664
|
+
/**
|
|
665
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
666
|
+
*
|
|
667
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
668
|
+
* not processed for execution (this must be used when creating
|
|
669
|
+
* subscriptions during propagation).
|
|
670
|
+
*/
|
|
671
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
672
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
673
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
674
|
+
//@}
|
|
675
|
+
|
|
676
|
+
/// \name Cloning
|
|
677
|
+
//@{
|
|
678
|
+
/// Update this view to be a clone of view \a x
|
|
679
|
+
void update(Space* home, bool share, ScaleView<Val,UnsVal>& x);
|
|
680
|
+
//@}
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* \brief Integer-precision integer scale view
|
|
685
|
+
* \ingroup TaskActorIntView
|
|
686
|
+
*/
|
|
687
|
+
typedef ScaleView<int,unsigned int> IntScaleView;
|
|
688
|
+
|
|
689
|
+
/**
|
|
690
|
+
* \brief Double-precision integer scale view
|
|
691
|
+
* \ingroup TaskActorIntView
|
|
692
|
+
*/
|
|
693
|
+
typedef ScaleView<double,double> DoubleScaleView;
|
|
694
|
+
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
/** \name View comparison
|
|
698
|
+
* \relates Gecode::Int::ScaleView
|
|
699
|
+
*/
|
|
700
|
+
//@{
|
|
701
|
+
/// Test whether views \a x and \a y are the same
|
|
702
|
+
template <class Val, class UnsVal>
|
|
703
|
+
bool same(const Int::ScaleView<Val,UnsVal>& x,
|
|
704
|
+
const Int::ScaleView<Val,UnsVal>& y);
|
|
705
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
706
|
+
template <class Val, class UnsVal>
|
|
707
|
+
bool before(const Int::ScaleView<Val,UnsVal>& x,
|
|
708
|
+
const Int::ScaleView<Val,UnsVal>& y);
|
|
709
|
+
//@}
|
|
710
|
+
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* \brief Traits class for views and variable implementations
|
|
714
|
+
*
|
|
715
|
+
* This class specializes the ViewVarTraits for ScaleView.
|
|
716
|
+
* \ingroup TaskActorIntView
|
|
717
|
+
*/
|
|
718
|
+
template <class Val, class UnsVal>
|
|
719
|
+
class ViewVarTraits<Int::ScaleView<Val,UnsVal> > {
|
|
720
|
+
public:
|
|
721
|
+
/// The variable type of a ScaleView
|
|
722
|
+
typedef Int::IntVarImp Var;
|
|
723
|
+
};
|
|
724
|
+
|
|
725
|
+
|
|
726
|
+
|
|
727
|
+
namespace Int {
|
|
728
|
+
|
|
729
|
+
/**
|
|
730
|
+
* \brief Constant integer view
|
|
731
|
+
*
|
|
732
|
+
* An constant integer view \f$x\f$ for an integer \f$c\f$ provides
|
|
733
|
+
* operations such that \f$x\f$ behaves as a view assigned to \f$c\f$.
|
|
734
|
+
* \ingroup TaskActorIntView
|
|
735
|
+
*/
|
|
736
|
+
class ConstIntView : public ConstantViewBase {
|
|
737
|
+
protected:
|
|
738
|
+
int x;
|
|
739
|
+
public:
|
|
740
|
+
/// \name Constructors and initialization
|
|
741
|
+
//@{
|
|
742
|
+
/// Default constructor
|
|
743
|
+
ConstIntView(void);
|
|
744
|
+
/// Initialize with integer value \a n
|
|
745
|
+
ConstIntView(int n);
|
|
746
|
+
/// Initialize with integer value \a n
|
|
747
|
+
void init(int n);
|
|
748
|
+
//@}
|
|
749
|
+
|
|
750
|
+
/// \name Value access
|
|
751
|
+
//@{
|
|
752
|
+
/// Return minimum of domain
|
|
753
|
+
int min(void) const;
|
|
754
|
+
/// Return maximum of domain
|
|
755
|
+
int max(void) const;
|
|
756
|
+
/// Return median of domain
|
|
757
|
+
int med(void) const;
|
|
758
|
+
/// Return assigned value (only if assigned)
|
|
759
|
+
int val(void) const;
|
|
760
|
+
|
|
761
|
+
/// Return size (cardinality) of domain
|
|
762
|
+
unsigned int size(void) const;
|
|
763
|
+
/// Return width of domain (distance between maximum and minimum)
|
|
764
|
+
unsigned int width(void) const;
|
|
765
|
+
/// Return regret of domain minimum (distance to next larger value)
|
|
766
|
+
unsigned int regret_min(void) const;
|
|
767
|
+
/// Return regret of domain maximum (distance to next smaller value)
|
|
768
|
+
unsigned int regret_max(void) const;
|
|
769
|
+
//@}
|
|
770
|
+
|
|
771
|
+
/// \name Domain tests
|
|
772
|
+
//@{
|
|
773
|
+
/// Test whether domain is a range
|
|
774
|
+
bool range(void) const;
|
|
775
|
+
/// Test whether view is assigned
|
|
776
|
+
bool assigned(void) const;
|
|
777
|
+
|
|
778
|
+
/// Test whether \a n is contained in domain
|
|
779
|
+
bool in(int n) const;
|
|
780
|
+
/// Test whether \a n is contained in domain
|
|
781
|
+
bool in(double n) const;
|
|
782
|
+
//@}
|
|
783
|
+
|
|
784
|
+
/// \name Domain update by value
|
|
785
|
+
//@{
|
|
786
|
+
/// Restrict domain values to be less or equal than \a n
|
|
787
|
+
ModEvent lq(Space* home, int n);
|
|
788
|
+
/// Restrict domain values to be less or equal than \a n
|
|
789
|
+
ModEvent lq(Space* home, double n);
|
|
790
|
+
/// Restrict domain values to be less than \a n
|
|
791
|
+
ModEvent le(Space* home, int n);
|
|
792
|
+
/// Restrict domain values to be less than \a n
|
|
793
|
+
ModEvent le(Space* home, double n);
|
|
794
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
795
|
+
ModEvent gq(Space* home, int n);
|
|
796
|
+
/// Restrict domain values to be greater or equal than \a n
|
|
797
|
+
ModEvent gq(Space* home, double n);
|
|
798
|
+
/// Restrict domain values to be greater than \a n
|
|
799
|
+
ModEvent gr(Space* home, int n);
|
|
800
|
+
/// Restrict domain values to be greater than \a n
|
|
801
|
+
ModEvent gr(Space* home, double n);
|
|
802
|
+
/// Restrict domain values to be different from \a n
|
|
803
|
+
ModEvent nq(Space* home, int n);
|
|
804
|
+
/// Restrict domain values to be different from \a n
|
|
805
|
+
ModEvent nq(Space* home, double n);
|
|
806
|
+
/// Restrict domain values to be equal to \a n
|
|
807
|
+
ModEvent eq(Space* home, int n);
|
|
808
|
+
/// Restrict domain values to be equal to \a n
|
|
809
|
+
ModEvent eq(Space* home, double n);
|
|
810
|
+
//@}
|
|
811
|
+
|
|
812
|
+
/// \name Domain update by range iterator
|
|
813
|
+
//@{
|
|
814
|
+
/// Replace domain by range sequence described by \a i
|
|
815
|
+
template <class I> ModEvent narrow(Space* home, I& i);
|
|
816
|
+
/// Intersect domain with range sequence described by \a i
|
|
817
|
+
template <class I> ModEvent inter(Space* home, I& i);
|
|
818
|
+
/// Remove from domain the range sequence described by \a i
|
|
819
|
+
template <class I> ModEvent minus(Space* home, I& i);
|
|
820
|
+
//@}
|
|
821
|
+
|
|
822
|
+
/// \name Propagator modification events
|
|
823
|
+
//@{
|
|
824
|
+
/// Return modification event of propagator \a p for view
|
|
825
|
+
static ModEvent pme(const Propagator* p);
|
|
826
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
827
|
+
static PropModEvent pme(ModEvent me);
|
|
828
|
+
//@}
|
|
829
|
+
|
|
830
|
+
/// \name Dependencies
|
|
831
|
+
//@{
|
|
832
|
+
/**
|
|
833
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
834
|
+
*
|
|
835
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
836
|
+
* not processed for execution (this must be used when creating
|
|
837
|
+
* subscriptions during propagation).
|
|
838
|
+
*/
|
|
839
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
840
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
841
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
842
|
+
//@}
|
|
843
|
+
|
|
844
|
+
/// \name Cloning
|
|
845
|
+
//@{
|
|
846
|
+
/// Update this view to be a clone of view \a x
|
|
847
|
+
void update(Space* home, bool share, ConstIntView& x);
|
|
848
|
+
//@}
|
|
849
|
+
};
|
|
850
|
+
|
|
851
|
+
}
|
|
852
|
+
|
|
853
|
+
/**
|
|
854
|
+
* \name View comparison
|
|
855
|
+
* \relates Gecode::Int::ConstIntView
|
|
856
|
+
*/
|
|
857
|
+
//@{
|
|
858
|
+
/// Test whether views \a x and \a y are the same
|
|
859
|
+
bool same(const Int::ConstIntView& x, const Int::ConstIntView& y);
|
|
860
|
+
/// Test whether view \a x is before \a y (arbitrary order)
|
|
861
|
+
template <class View, unsigned int n>
|
|
862
|
+
bool before(const Int::ConstIntView& x, const Int::ConstIntView& y);
|
|
863
|
+
//@}
|
|
864
|
+
|
|
865
|
+
/**
|
|
866
|
+
* \brief Traits class for views and variable implementations
|
|
867
|
+
*
|
|
868
|
+
* This class specializes the ViewVarTraits for ConstIntView.
|
|
869
|
+
* \ingroup TaskActorIntView
|
|
870
|
+
*/
|
|
871
|
+
template<>
|
|
872
|
+
class ViewVarTraits<Int::ConstIntView> {
|
|
873
|
+
public:
|
|
874
|
+
/// The variable type of a ConstIntView
|
|
875
|
+
typedef VarBase Var;
|
|
876
|
+
};
|
|
877
|
+
|
|
878
|
+
namespace Int {
|
|
879
|
+
|
|
880
|
+
/**
|
|
881
|
+
* \brief Boolean view for integer variables
|
|
882
|
+
*
|
|
883
|
+
* Provides convenient and efficient operations for Boolean views.
|
|
884
|
+
* \ingroup TaskActorIntView
|
|
885
|
+
*/
|
|
886
|
+
class BoolView : public IntView {
|
|
887
|
+
/// For initialization from IntVar (see below)
|
|
888
|
+
friend class ViewArray<BoolView>;
|
|
889
|
+
public:
|
|
890
|
+
/// \name Constructors and initialization
|
|
891
|
+
//@{
|
|
892
|
+
/// Default constructor
|
|
893
|
+
BoolView(void);
|
|
894
|
+
/// Initialize from Boolean variable \a b
|
|
895
|
+
BoolView(const BoolVar& b);
|
|
896
|
+
private:
|
|
897
|
+
/** \brief Initialize from integer variable \a x
|
|
898
|
+
*
|
|
899
|
+
* This is odd, but is required to go from an VarArgArray to
|
|
900
|
+
* a ViewArray.
|
|
901
|
+
*/
|
|
902
|
+
BoolView(const IntVar& b);
|
|
903
|
+
public:
|
|
904
|
+
/// Initialize from integer variable \a x
|
|
905
|
+
explicit BoolView(const IntView& x);
|
|
906
|
+
//@}
|
|
907
|
+
|
|
908
|
+
/// \name Boolean domain tests
|
|
909
|
+
//@{
|
|
910
|
+
/// Test whether view is assigned to be zero
|
|
911
|
+
bool zero(void) const;
|
|
912
|
+
/// Test whether view is assigned to be one
|
|
913
|
+
bool one(void) const;
|
|
914
|
+
/// Test whether view is not yet assigned
|
|
915
|
+
bool none(void) const;
|
|
916
|
+
//@}
|
|
917
|
+
|
|
918
|
+
/// \name Boolean assignment operations
|
|
919
|
+
//@{
|
|
920
|
+
/// Try to assign view to one
|
|
921
|
+
ModEvent t_one(Space* home);
|
|
922
|
+
/// Try to assign view to zero
|
|
923
|
+
ModEvent t_zero(Space* home);
|
|
924
|
+
/// Assign not yet assigned view to one
|
|
925
|
+
void t_one_none(Space* home);
|
|
926
|
+
/// Assign not yet assigned view to zero
|
|
927
|
+
void t_zero_none(Space* home);
|
|
928
|
+
//@}
|
|
929
|
+
|
|
930
|
+
/// \name Cloning
|
|
931
|
+
//@{
|
|
932
|
+
/// Update this view to be a clone of view \a x
|
|
933
|
+
void update(Space* home, bool share, BoolView& x);
|
|
934
|
+
//@}
|
|
935
|
+
};
|
|
936
|
+
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
/**
|
|
940
|
+
* \brief Traits class for views and variable implementations
|
|
941
|
+
*
|
|
942
|
+
* This class specializes the ViewVarTraits for BoolView
|
|
943
|
+
* \ingroup TaskActorIntView
|
|
944
|
+
*/
|
|
945
|
+
template<>
|
|
946
|
+
class ViewVarTraits<Int::BoolView> {
|
|
947
|
+
public:
|
|
948
|
+
/// The variable type of a BoolView
|
|
949
|
+
typedef Int::IntVarImp Var;
|
|
950
|
+
};
|
|
951
|
+
|
|
952
|
+
namespace Int {
|
|
953
|
+
|
|
954
|
+
/**
|
|
955
|
+
* \brief Negated Boolean view
|
|
956
|
+
*
|
|
957
|
+
* A negated Boolean view \f$n\f$ for a Boolean view \f$b\f$
|
|
958
|
+
* provides operations such that \f$n\f$
|
|
959
|
+
* behaves as \f$\neg b\f$.
|
|
960
|
+
* \ingroup TaskActorIntView
|
|
961
|
+
*/
|
|
962
|
+
class NegBoolView : public DerivedViewBase<BoolView> {
|
|
963
|
+
protected:
|
|
964
|
+
using DerivedViewBase<BoolView>::view;
|
|
965
|
+
public:
|
|
966
|
+
/// \name Constructors and initialization
|
|
967
|
+
//@{
|
|
968
|
+
/// Default constructor
|
|
969
|
+
NegBoolView(void);
|
|
970
|
+
/// Initialize with Boolean view \a b
|
|
971
|
+
NegBoolView(const BoolView& b);
|
|
972
|
+
/// Initialize with Boolean view \a b
|
|
973
|
+
void init(const BoolView& b);
|
|
974
|
+
//@}
|
|
975
|
+
|
|
976
|
+
/// \name Boolean domain tests
|
|
977
|
+
//@{
|
|
978
|
+
/// Test whether view is assigned to be zero
|
|
979
|
+
bool zero(void) const;
|
|
980
|
+
/// Test whether view is assigned to be one
|
|
981
|
+
bool one(void) const;
|
|
982
|
+
/// Test whether view is not yet assigned
|
|
983
|
+
bool none(void) const;
|
|
984
|
+
//@}
|
|
985
|
+
|
|
986
|
+
/// \name Boolean assignment operations
|
|
987
|
+
//@{
|
|
988
|
+
/// Try to assign view to one
|
|
989
|
+
ModEvent t_one(Space* home);
|
|
990
|
+
/// Try to assign view to zero
|
|
991
|
+
ModEvent t_zero(Space* home);
|
|
992
|
+
/// Assign not yet assigned view to one
|
|
993
|
+
void t_one_none(Space* home);
|
|
994
|
+
/// Assign not yet assigned view to zero
|
|
995
|
+
void t_zero_none(Space* home);
|
|
996
|
+
//@}
|
|
997
|
+
|
|
998
|
+
/// \name Value access
|
|
999
|
+
//@{
|
|
1000
|
+
/// Return minimum of domain
|
|
1001
|
+
int min(void) const;
|
|
1002
|
+
/// Return maximum of domain
|
|
1003
|
+
int max(void) const;
|
|
1004
|
+
/// Return assigned value (only if assigned)
|
|
1005
|
+
int val(void) const;
|
|
1006
|
+
//@}
|
|
1007
|
+
|
|
1008
|
+
/// \name Domain tests
|
|
1009
|
+
//@{
|
|
1010
|
+
/// Test whether view is assigned
|
|
1011
|
+
bool assigned(void) const;
|
|
1012
|
+
//@}
|
|
1013
|
+
|
|
1014
|
+
/// \name Propagator modification events
|
|
1015
|
+
//@{
|
|
1016
|
+
/// Return modification event of propagator \a p for view
|
|
1017
|
+
static ModEvent pme(const Propagator* p);
|
|
1018
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
1019
|
+
static PropModEvent pme(ModEvent me);
|
|
1020
|
+
//@}
|
|
1021
|
+
|
|
1022
|
+
/// \name Dependencies
|
|
1023
|
+
//@{
|
|
1024
|
+
/**
|
|
1025
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
1026
|
+
*
|
|
1027
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
1028
|
+
* not processed for execution (this must be used when creating
|
|
1029
|
+
* subscriptions during propagation).
|
|
1030
|
+
*/
|
|
1031
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
1032
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
1033
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
1034
|
+
//@}
|
|
1035
|
+
|
|
1036
|
+
/// \name Cloning
|
|
1037
|
+
//@{
|
|
1038
|
+
/// Update this view to be a clone of view \a x
|
|
1039
|
+
void update(Space* home, bool share, NegBoolView& x);
|
|
1040
|
+
//@}
|
|
1041
|
+
};
|
|
1042
|
+
|
|
1043
|
+
/**
|
|
1044
|
+
* \brief Boolean tests
|
|
1045
|
+
*
|
|
1046
|
+
*/
|
|
1047
|
+
enum BoolTest {
|
|
1048
|
+
BT_NONE, ///< No sharing
|
|
1049
|
+
BT_SAME, ///< Same variable
|
|
1050
|
+
BT_COMP ///< Same variable but complement
|
|
1051
|
+
};
|
|
1052
|
+
|
|
1053
|
+
/**
|
|
1054
|
+
* \name Test sharing between Boolean and negated Boolean views
|
|
1055
|
+
* \relates BoolView NegBoolView
|
|
1056
|
+
*/
|
|
1057
|
+
//@{
|
|
1058
|
+
/// Test whether views \a b0 and \a b1 are the same
|
|
1059
|
+
BoolTest bool_test(const BoolView& b0, const BoolView& b1);
|
|
1060
|
+
/// Test whether views \a b0 and \a b1 are complementary
|
|
1061
|
+
BoolTest bool_test(const BoolView& b0, const NegBoolView& b1);
|
|
1062
|
+
/// Test whether views \a b0 and \a b1 are complementary
|
|
1063
|
+
BoolTest bool_test(const NegBoolView& b0, const BoolView& b1);
|
|
1064
|
+
/// Test whether views \a b0 and \a b1 are the same
|
|
1065
|
+
BoolTest bool_test(const NegBoolView& b0, const NegBoolView& b1);
|
|
1066
|
+
//@}
|
|
1067
|
+
|
|
1068
|
+
}
|
|
1069
|
+
|
|
1070
|
+
/** \name View comparison
|
|
1071
|
+
* \relates Gecode::Int::NegBoolView
|
|
1072
|
+
*/
|
|
1073
|
+
//@{
|
|
1074
|
+
/// Test whether views \a x and \a y are the same
|
|
1075
|
+
bool same(const Int::NegBoolView& x, const Int::NegBoolView& y);
|
|
1076
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
1077
|
+
bool before(const Int::NegBoolView& x, const Int::NegBoolView& y);
|
|
1078
|
+
//@}
|
|
1079
|
+
|
|
1080
|
+
/**
|
|
1081
|
+
* \brief Traits class for views and variable implementations
|
|
1082
|
+
*
|
|
1083
|
+
* This class specializes the ViewVarTraits for NegBoolView.
|
|
1084
|
+
* \ingroup TaskActorIntView
|
|
1085
|
+
*/
|
|
1086
|
+
template<>
|
|
1087
|
+
class ViewVarTraits<Int::NegBoolView> {
|
|
1088
|
+
public:
|
|
1089
|
+
/// The variable type of a NegBoolView
|
|
1090
|
+
typedef Int::IntVarImp Var;
|
|
1091
|
+
};
|
|
1092
|
+
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1095
|
+
#include "gecode/int/var/int.icc"
|
|
1096
|
+
#include "gecode/int/var/bool.icc"
|
|
1097
|
+
|
|
1098
|
+
#include "gecode/int/view/int.icc"
|
|
1099
|
+
#include "gecode/int/view/bool.icc"
|
|
1100
|
+
|
|
1101
|
+
#include "gecode/int/view/constint.icc"
|
|
1102
|
+
|
|
1103
|
+
#include "gecode/int/view/minus.icc"
|
|
1104
|
+
#include "gecode/int/view/offset.icc"
|
|
1105
|
+
#include "gecode/int/view/scale.icc"
|
|
1106
|
+
|
|
1107
|
+
/**
|
|
1108
|
+
* \brief Print integer variable view
|
|
1109
|
+
* \relates Gecode::Int::IntView
|
|
1110
|
+
*/
|
|
1111
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1112
|
+
operator<<(std::ostream&, const Gecode::Int::IntView&);
|
|
1113
|
+
/**
|
|
1114
|
+
* \brief Print minus integer view
|
|
1115
|
+
* \relates Gecode::Int::MinusView
|
|
1116
|
+
*/
|
|
1117
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1118
|
+
operator<<(std::ostream&, const Gecode::Int::MinusView&);
|
|
1119
|
+
/**
|
|
1120
|
+
* \brief Print offset integer view
|
|
1121
|
+
* \relates Gecode::Int::OffsetView
|
|
1122
|
+
*/
|
|
1123
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1124
|
+
operator<<(std::ostream&, const Gecode::Int::OffsetView&);
|
|
1125
|
+
/**
|
|
1126
|
+
* \brief Print constant integer view
|
|
1127
|
+
* \relates Gecode::Int::ConstIntView
|
|
1128
|
+
*/
|
|
1129
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1130
|
+
operator<<(std::ostream&, const Gecode::Int::ConstIntView&);
|
|
1131
|
+
/**
|
|
1132
|
+
* \brief Print integer-precision scale integer view
|
|
1133
|
+
* \relates Gecode::Int::ScaleView
|
|
1134
|
+
*/
|
|
1135
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1136
|
+
operator<<(std::ostream&, const Gecode::Int::IntScaleView&);
|
|
1137
|
+
/**
|
|
1138
|
+
* \brief Print double-precision scale integer view
|
|
1139
|
+
* \relates Gecode::Int::ScaleView
|
|
1140
|
+
*/
|
|
1141
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1142
|
+
operator<<(std::ostream&, const Gecode::Int::DoubleScaleView&);
|
|
1143
|
+
/**
|
|
1144
|
+
* \brief Print negated Boolean view
|
|
1145
|
+
* \relates Gecode::Int::NegBoolView
|
|
1146
|
+
*/
|
|
1147
|
+
GECODE_INT_EXPORT std::ostream&
|
|
1148
|
+
operator<<(std::ostream&, const Gecode::Int::NegBoolView&);
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
inline std::ostream&
|
|
1152
|
+
operator<<(std::ostream& os, const Gecode::IntVar& x) {
|
|
1153
|
+
Gecode::Int::IntView vx(x);
|
|
1154
|
+
return os << vx;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
namespace Gecode {
|
|
1158
|
+
|
|
1159
|
+
namespace Int {
|
|
1160
|
+
|
|
1161
|
+
/**
|
|
1162
|
+
* \defgroup TaskActorIntTest Testing relations between integer views
|
|
1163
|
+
* \ingroup TaskActorInt
|
|
1164
|
+
*/
|
|
1165
|
+
|
|
1166
|
+
//@{
|
|
1167
|
+
/// Result of testing relation
|
|
1168
|
+
enum RelTest {
|
|
1169
|
+
RT_FALSE = 0, ///< Relation does not hold
|
|
1170
|
+
RT_MAYBE = 1, ///< Relation may hold or not
|
|
1171
|
+
RT_TRUE = 2 ///< Relation does hold
|
|
1172
|
+
};
|
|
1173
|
+
|
|
1174
|
+
/// Test whether views \a x and \a y are equal (use bounds information)
|
|
1175
|
+
template <class View> RelTest rtest_eq_bnd(View x, View y);
|
|
1176
|
+
/// Test whether views \a x and \a y are equal (use full domain information)
|
|
1177
|
+
template <class View> RelTest rtest_eq_dom(View x, View y);
|
|
1178
|
+
/// Test whether view \a x and integer \a n are equal (use bounds information)
|
|
1179
|
+
template <class View> RelTest rtest_eq_bnd(View x, int n);
|
|
1180
|
+
/// Test whether view \a x and integer \a n are equal (use full domain information)
|
|
1181
|
+
template <class View> RelTest rtest_eq_dom(View x, int n);
|
|
1182
|
+
|
|
1183
|
+
/// Test whether views \a x and \a y are different (use bounds information)
|
|
1184
|
+
template <class View> RelTest rtest_nq_bnd(View x, View y);
|
|
1185
|
+
/// Test whether views \a x and \a y are different (use full domain information)
|
|
1186
|
+
template <class View> RelTest rtest_nq_dom(View x, View y);
|
|
1187
|
+
/// Test whether view \a x and integer \a n are different (use bounds information)
|
|
1188
|
+
template <class View> RelTest rtest_nq_bnd(View x, int n);
|
|
1189
|
+
/// Test whether view \a x and integer \a n are different (use full domain information)
|
|
1190
|
+
template <class View> RelTest rtest_nq_dom(View x, int n);
|
|
1191
|
+
|
|
1192
|
+
/// Test whether view \a x is less or equal than view \a y
|
|
1193
|
+
template <class View> RelTest rtest_lq(View x, View y);
|
|
1194
|
+
/// Test whether view \a x is less or equal than integer \a n
|
|
1195
|
+
template <class View> RelTest rtest_lq(View x, int n);
|
|
1196
|
+
|
|
1197
|
+
/// Test whether view \a x is less than view \a y
|
|
1198
|
+
template <class View> RelTest rtest_le(View x, View y);
|
|
1199
|
+
/// Test whether view \a x is less than integer \a n
|
|
1200
|
+
template <class View> RelTest rtest_le(View x, int n);
|
|
1201
|
+
|
|
1202
|
+
/// Test whether view \a x is greater or equal than view \a y
|
|
1203
|
+
template <class View> RelTest rtest_gq(View x, View y);
|
|
1204
|
+
/// Test whether view \a x is greater or equal than integer \a n
|
|
1205
|
+
template <class View> RelTest rtest_gq(View x, int n);
|
|
1206
|
+
|
|
1207
|
+
/// Test whether view \a x is greater than view \a y
|
|
1208
|
+
template <class View> RelTest rtest_gr(View x, View y);
|
|
1209
|
+
/// Test whether view \a x is greater than integer \a n
|
|
1210
|
+
template <class View> RelTest rtest_gr(View x, int n);
|
|
1211
|
+
//@}
|
|
1212
|
+
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
}
|
|
1216
|
+
|
|
1217
|
+
#include "gecode/int/view/rtest.icc"
|
|
1218
|
+
|
|
1219
|
+
// STATISTICS: int-var
|