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,47 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Guido Tack, 2004
|
|
8
|
+
* Gabor Szokoli, 2004
|
|
9
|
+
*
|
|
10
|
+
* Last modified:
|
|
11
|
+
* $Date: 2005-08-10 15:18:45 +0200 (Wed, 10 Aug 2005) $ by $Author: tack $
|
|
12
|
+
* $Revision: 2199 $
|
|
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
|
+
namespace Gecode { namespace Set {
|
|
25
|
+
|
|
26
|
+
template <class T>
|
|
27
|
+
forceinline
|
|
28
|
+
UnknownRanges<T>::UnknownRanges(void) {}
|
|
29
|
+
|
|
30
|
+
template <class T>
|
|
31
|
+
forceinline
|
|
32
|
+
UnknownRanges<T>::UnknownRanges(const T& v) : i1(v), i2(v) {
|
|
33
|
+
Iter::Ranges::Diff<LubRanges<T>, GlbRanges<T> >::init(i1,i2);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
template <class T>
|
|
37
|
+
forceinline void
|
|
38
|
+
UnknownRanges<T>::init(const T& v) {
|
|
39
|
+
i1.init(v);
|
|
40
|
+
i2.init(v);
|
|
41
|
+
Iter::Ranges::Diff<LubRanges<T>, GlbRanges<T> >::init(i1,i2);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
}}
|
|
45
|
+
|
|
46
|
+
// STATISTICS: set-var
|
|
47
|
+
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
* Christian Schulte <schulte@gecode.org>
|
|
5
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
6
|
+
*
|
|
7
|
+
* Copyright:
|
|
8
|
+
* Guido Tack, 2004
|
|
9
|
+
* Christian Schulte, 2004
|
|
10
|
+
* Gabor Szokoli, 2004
|
|
11
|
+
*
|
|
12
|
+
* Last modified:
|
|
13
|
+
* $Date: 2006-04-11 15:58:37 +0200 (Tue, 11 Apr 2006) $ by $Author: tack $
|
|
14
|
+
* $Revision: 3188 $
|
|
15
|
+
*
|
|
16
|
+
* This file is part of Gecode, the generic constraint
|
|
17
|
+
* development environment:
|
|
18
|
+
* http://www.gecode.org
|
|
19
|
+
*
|
|
20
|
+
* See the file "LICENSE" for information on usage and
|
|
21
|
+
* redistribution of this file, and for a
|
|
22
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
#include "gecode/set.hh"
|
|
28
|
+
|
|
29
|
+
namespace Gecode {
|
|
30
|
+
|
|
31
|
+
SetVar::SetVar(Space* home)
|
|
32
|
+
: x(new (home) Set::SetVarImp(home)) {}
|
|
33
|
+
|
|
34
|
+
SetVar::SetVar(Space* home,int lbMin,int lbMax,int ubMin,int ubMax,
|
|
35
|
+
unsigned int minCard, unsigned int maxCard)
|
|
36
|
+
: x(new (home) Set::SetVarImp(home,lbMin,lbMax,ubMin,ubMax,
|
|
37
|
+
minCard,maxCard)) {
|
|
38
|
+
if ((lbMin < Limits::Set::int_min) ||
|
|
39
|
+
(lbMax > Limits::Set::int_max) ||
|
|
40
|
+
(ubMin < Limits::Set::int_min) ||
|
|
41
|
+
(ubMax > Limits::Set::int_max))
|
|
42
|
+
throw Set::VariableOutOfRangeDomain("SetVar");
|
|
43
|
+
if (maxCard > Limits::Set::card_max)
|
|
44
|
+
throw Set::VariableOutOfRangeCardinality("SetVar");
|
|
45
|
+
if (minCard > maxCard)
|
|
46
|
+
throw Set::VariableFailedDomain("SetVar");
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
SetVar::SetVar(Space* home, const IntSet& glb,int ubMin,int ubMax,
|
|
50
|
+
unsigned int minCard, unsigned int maxCard)
|
|
51
|
+
: x(new (home) Set::SetVarImp(home,glb,ubMin,ubMax,minCard,maxCard)) {
|
|
52
|
+
if ( ((glb.size() > 0) &&
|
|
53
|
+
((glb.min() < Limits::Set::int_min) ||
|
|
54
|
+
(glb.max() > Limits::Set::int_max))) ||
|
|
55
|
+
(ubMin < Limits::Set::int_min) ||
|
|
56
|
+
(ubMax > Limits::Set::int_max))
|
|
57
|
+
throw Set::VariableOutOfRangeDomain("SetVar");
|
|
58
|
+
if (maxCard > Limits::Set::card_max)
|
|
59
|
+
throw Set::VariableOutOfRangeCardinality("SetVar");
|
|
60
|
+
if (minCard > maxCard)
|
|
61
|
+
throw Set::VariableFailedDomain("SetVar");
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
SetVar::SetVar(Space* home,int lbMin,int lbMax,const IntSet& lub,
|
|
65
|
+
unsigned int minCard, unsigned int maxCard)
|
|
66
|
+
: x(new (home) Set::SetVarImp(home,lbMin,lbMax,lub,minCard,maxCard)) {
|
|
67
|
+
if ( ((lub.size() > 0) &&
|
|
68
|
+
((lub.min() < Limits::Set::int_min) ||
|
|
69
|
+
(lub.max() > Limits::Set::int_max))) ||
|
|
70
|
+
(lbMin < Limits::Set::int_min) ||
|
|
71
|
+
(lbMax > Limits::Set::int_max))
|
|
72
|
+
throw Set::VariableOutOfRangeDomain("SetVarArray");
|
|
73
|
+
if (maxCard > Limits::Set::card_max)
|
|
74
|
+
throw Set::VariableOutOfRangeCardinality("SetVar");
|
|
75
|
+
if (minCard > maxCard)
|
|
76
|
+
throw Set::VariableFailedDomain("SetVar");
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
SetVar::SetVar(Space* home,
|
|
80
|
+
const IntSet& glb, const IntSet& lub,
|
|
81
|
+
unsigned int minCard, unsigned int maxCard)
|
|
82
|
+
: x(new (home) Set::SetVarImp(home,glb,lub,minCard,maxCard)) {
|
|
83
|
+
if (((glb.size() > 0) &&
|
|
84
|
+
((glb.min() < Limits::Set::int_min) ||
|
|
85
|
+
(glb.max() > Limits::Set::int_max))) ||
|
|
86
|
+
((glb.size() > 0) &&
|
|
87
|
+
((lub.min() < Limits::Set::int_min) ||
|
|
88
|
+
(lub.max() > Limits::Set::int_max))))
|
|
89
|
+
throw Set::VariableOutOfRangeDomain("SetVar");
|
|
90
|
+
if (maxCard > Limits::Set::card_max)
|
|
91
|
+
throw Set::VariableOutOfRangeCardinality("SetVar");
|
|
92
|
+
if (minCard > maxCard)
|
|
93
|
+
throw Set::VariableFailedDomain("SetVar");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// STATISTICS: set-var
|
|
99
|
+
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
* Christian Schulte <schulte@gecode.org>
|
|
5
|
+
* Gabor Szokoli <szokoli@gecode.org>
|
|
6
|
+
*
|
|
7
|
+
* Copyright:
|
|
8
|
+
* Guido Tack, 2004
|
|
9
|
+
* Christian Schulte, 2004
|
|
10
|
+
* Gabor Szokoli, 2004
|
|
11
|
+
*
|
|
12
|
+
* Last modified:
|
|
13
|
+
* $Date: 2005-10-11 17:57:38 +0200 (Tue, 11 Oct 2005) $ by $Author: tack $
|
|
14
|
+
* $Revision: 2334 $
|
|
15
|
+
*
|
|
16
|
+
* This file is part of Gecode, the generic constraint
|
|
17
|
+
* development environment:
|
|
18
|
+
* http://www.gecode.org
|
|
19
|
+
*
|
|
20
|
+
* See the file "LICENSE" for information on usage and
|
|
21
|
+
* redistribution of this file, and for a
|
|
22
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
namespace Gecode {
|
|
27
|
+
|
|
28
|
+
/*
|
|
29
|
+
* Constructors and access
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
forceinline
|
|
34
|
+
SetVar::SetVar(void) {
|
|
35
|
+
//Beware! Constructor bypassed when instance created via VarArray!
|
|
36
|
+
//Use init() instead!
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
forceinline void
|
|
40
|
+
SetVar::init(Space* home) {
|
|
41
|
+
x = new (home) Set::SetVarImp(home);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
forceinline void
|
|
45
|
+
SetVar::init(Space* home,int lbMin,int lbMax,int ubMin,int ubMax,
|
|
46
|
+
unsigned int cardMin, unsigned int cardMax) {
|
|
47
|
+
x = new (home) Set::SetVarImp(home, lbMin,lbMax,ubMin,ubMax,
|
|
48
|
+
cardMin, cardMax);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
forceinline void
|
|
52
|
+
SetVar::init(Space* home, const IntSet& glb,int ubMin,int ubMax,
|
|
53
|
+
unsigned int cardMin, unsigned int cardMax) {
|
|
54
|
+
x = new (home) Set::SetVarImp(home, glb, ubMin, ubMax, cardMin, cardMax);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
forceinline void
|
|
58
|
+
SetVar::init(Space* home, int lbMin,int lbMax,const IntSet& lub,
|
|
59
|
+
unsigned int cardMin, unsigned int cardMax) {
|
|
60
|
+
x = new (home) Set::SetVarImp(home, lbMin, lbMax, lub, cardMin, cardMax);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
forceinline void
|
|
64
|
+
SetVar::init(Space* home, const IntSet& glb, const IntSet& lub,
|
|
65
|
+
unsigned int cardMin, unsigned int cardMax) {
|
|
66
|
+
x = new (home) Set::SetVarImp(home, glb, lub, cardMin, cardMax);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
forceinline Set::SetVarImp*
|
|
70
|
+
SetVar::variable(void) const {
|
|
71
|
+
return x;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* Variable information
|
|
78
|
+
*
|
|
79
|
+
*/
|
|
80
|
+
|
|
81
|
+
forceinline unsigned int
|
|
82
|
+
SetVar::glbSize(void) const { return x->glbSize(); }
|
|
83
|
+
|
|
84
|
+
forceinline unsigned int
|
|
85
|
+
SetVar::lubSize(void) const { return x->lubSize(); }
|
|
86
|
+
|
|
87
|
+
forceinline unsigned int
|
|
88
|
+
SetVar::unknownSize(void) const { return x->lubSize() - x->glbSize(); }
|
|
89
|
+
|
|
90
|
+
forceinline bool
|
|
91
|
+
SetVar::assigned(void) const { return x->assigned(); }
|
|
92
|
+
|
|
93
|
+
forceinline bool
|
|
94
|
+
SetVar::contains(int i) const { return (x->knownIn(i)); }
|
|
95
|
+
|
|
96
|
+
forceinline bool
|
|
97
|
+
SetVar::notContains(int i) const { return (x->knownOut(i)); }
|
|
98
|
+
|
|
99
|
+
forceinline unsigned int
|
|
100
|
+
SetVar::cardMin(void) const { return x->cardMin(); }
|
|
101
|
+
|
|
102
|
+
forceinline unsigned int
|
|
103
|
+
SetVar::cardMax(void) const { return x->cardMax(); }
|
|
104
|
+
|
|
105
|
+
forceinline int
|
|
106
|
+
SetVar::lubMin(void) const { return x->lubMin(); }
|
|
107
|
+
|
|
108
|
+
forceinline int
|
|
109
|
+
SetVar::lubMax(void) const { return x->lubMax(); }
|
|
110
|
+
|
|
111
|
+
forceinline int
|
|
112
|
+
SetVar::glbMin(void) const { return x->glbMin(); }
|
|
113
|
+
|
|
114
|
+
forceinline int
|
|
115
|
+
SetVar::glbMax(void) const { return x->glbMax(); }
|
|
116
|
+
|
|
117
|
+
/*
|
|
118
|
+
* Cloning
|
|
119
|
+
*
|
|
120
|
+
*/
|
|
121
|
+
|
|
122
|
+
forceinline void
|
|
123
|
+
SetVar::update(Space* home, bool share, SetVar& y) {
|
|
124
|
+
x = y.x->copy(home,share);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* Range and value iterators for set variables
|
|
130
|
+
*
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
forceinline
|
|
134
|
+
SetVarGlbRanges::SetVarGlbRanges(void) {}
|
|
135
|
+
|
|
136
|
+
forceinline
|
|
137
|
+
SetVarGlbRanges::SetVarGlbRanges(const SetVar& s)
|
|
138
|
+
: iter(s.variable()) {}
|
|
139
|
+
|
|
140
|
+
forceinline
|
|
141
|
+
bool
|
|
142
|
+
SetVarGlbRanges::operator()(void) const { return iter(); }
|
|
143
|
+
|
|
144
|
+
forceinline
|
|
145
|
+
void
|
|
146
|
+
SetVarGlbRanges::operator++(void) { ++iter; }
|
|
147
|
+
|
|
148
|
+
forceinline
|
|
149
|
+
int
|
|
150
|
+
SetVarGlbRanges::min(void) const { return iter.min(); }
|
|
151
|
+
|
|
152
|
+
forceinline
|
|
153
|
+
int
|
|
154
|
+
SetVarGlbRanges::max(void) const { return iter.max(); }
|
|
155
|
+
|
|
156
|
+
forceinline
|
|
157
|
+
unsigned int
|
|
158
|
+
SetVarGlbRanges::width(void) const { return iter.width(); }
|
|
159
|
+
|
|
160
|
+
forceinline
|
|
161
|
+
SetVarLubRanges::SetVarLubRanges(void) {}
|
|
162
|
+
|
|
163
|
+
forceinline
|
|
164
|
+
SetVarLubRanges::SetVarLubRanges(const SetVar& s)
|
|
165
|
+
: iter(s.variable()) {}
|
|
166
|
+
|
|
167
|
+
forceinline
|
|
168
|
+
bool
|
|
169
|
+
SetVarLubRanges::operator()(void) const { return iter(); }
|
|
170
|
+
|
|
171
|
+
forceinline
|
|
172
|
+
void
|
|
173
|
+
SetVarLubRanges::operator++(void) { ++iter; }
|
|
174
|
+
|
|
175
|
+
forceinline
|
|
176
|
+
int
|
|
177
|
+
SetVarLubRanges::min(void) const { return iter.min(); }
|
|
178
|
+
|
|
179
|
+
forceinline
|
|
180
|
+
int
|
|
181
|
+
SetVarLubRanges::max(void) const { return iter.max(); }
|
|
182
|
+
|
|
183
|
+
forceinline
|
|
184
|
+
unsigned int
|
|
185
|
+
SetVarLubRanges::width(void) const { return iter.width(); }
|
|
186
|
+
|
|
187
|
+
forceinline
|
|
188
|
+
SetVarUnknownRanges::SetVarUnknownRanges(void) {}
|
|
189
|
+
|
|
190
|
+
forceinline
|
|
191
|
+
SetVarUnknownRanges::SetVarUnknownRanges(const SetVar& s) {
|
|
192
|
+
Set::SetVarImp *si = s.variable();
|
|
193
|
+
iter.init(si);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
forceinline
|
|
197
|
+
bool
|
|
198
|
+
SetVarUnknownRanges::operator()(void) const { return iter(); }
|
|
199
|
+
|
|
200
|
+
forceinline
|
|
201
|
+
void
|
|
202
|
+
SetVarUnknownRanges::operator++(void) { ++iter; }
|
|
203
|
+
|
|
204
|
+
forceinline
|
|
205
|
+
int
|
|
206
|
+
SetVarUnknownRanges::min(void) const { return iter.min(); }
|
|
207
|
+
|
|
208
|
+
forceinline
|
|
209
|
+
int
|
|
210
|
+
SetVarUnknownRanges::max(void) const { return iter.max(); }
|
|
211
|
+
|
|
212
|
+
forceinline
|
|
213
|
+
unsigned int
|
|
214
|
+
SetVarUnknownRanges::width(void) const { return iter.width(); }
|
|
215
|
+
|
|
216
|
+
forceinline
|
|
217
|
+
SetVarGlbValues::SetVarGlbValues(const SetVar& x) {
|
|
218
|
+
SetVarGlbRanges ivr(x);
|
|
219
|
+
iter.init(ivr);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
forceinline bool
|
|
223
|
+
SetVarGlbValues::operator()(void) const {
|
|
224
|
+
return iter();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
forceinline void
|
|
228
|
+
SetVarGlbValues::operator++(void) {
|
|
229
|
+
++iter;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
forceinline int
|
|
233
|
+
SetVarGlbValues::val(void) const {
|
|
234
|
+
return iter.val();
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
forceinline
|
|
238
|
+
SetVarLubValues::SetVarLubValues(const SetVar& x) {
|
|
239
|
+
SetVarLubRanges ivr(x);
|
|
240
|
+
iter.init(ivr);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
forceinline bool
|
|
244
|
+
SetVarLubValues::operator()(void) const {
|
|
245
|
+
return iter();
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
forceinline void
|
|
249
|
+
SetVarLubValues::operator++(void) {
|
|
250
|
+
++iter;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
forceinline int
|
|
254
|
+
SetVarLubValues::val(void) const {
|
|
255
|
+
return iter.val();
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
forceinline
|
|
259
|
+
SetVarUnknownValues::SetVarUnknownValues(const SetVar& x) {
|
|
260
|
+
SetVarUnknownRanges ivr(x);
|
|
261
|
+
iter.init(ivr);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
forceinline bool
|
|
265
|
+
SetVarUnknownValues::operator()(void) const {
|
|
266
|
+
return iter();
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
forceinline void
|
|
270
|
+
SetVarUnknownValues::operator++(void) {
|
|
271
|
+
++iter;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
forceinline int
|
|
275
|
+
SetVarUnknownValues::val(void) const {
|
|
276
|
+
return iter.val();
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// STATISTICS: set-var
|
|
282
|
+
|
|
@@ -0,0 +1,1075 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Guido Tack <tack@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Contributing authors:
|
|
6
|
+
* Christian Schulte <schulte@gecode.org>
|
|
7
|
+
*
|
|
8
|
+
* Copyright:
|
|
9
|
+
* Guido Tack, 2004
|
|
10
|
+
* Christian Schulte, 2004
|
|
11
|
+
*
|
|
12
|
+
* Last modified:
|
|
13
|
+
* $Date: 2006-08-24 11:25:05 +0200 (Thu, 24 Aug 2006) $ by $Author: schulte $
|
|
14
|
+
* $Revision: 3559 $
|
|
15
|
+
*
|
|
16
|
+
* This file is part of Gecode, the generic constraint
|
|
17
|
+
* development environment:
|
|
18
|
+
* http://www.gecode.org
|
|
19
|
+
*
|
|
20
|
+
* See the file "LICENSE" for information on usage and
|
|
21
|
+
* redistribution of this file, and for a
|
|
22
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
23
|
+
*
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
#include <iostream>
|
|
27
|
+
#include "gecode/iter.hh"
|
|
28
|
+
|
|
29
|
+
namespace Gecode {
|
|
30
|
+
|
|
31
|
+
namespace Set {
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* \defgroup TaskActorSetView Set views
|
|
35
|
+
*
|
|
36
|
+
* Set propagators and branchings compute with set views.
|
|
37
|
+
* Set views provide views on set variable implementations,
|
|
38
|
+
* set constants, and integer variable implementations.
|
|
39
|
+
* \ingroup TaskActorSet
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* \brief %Set view for set variables
|
|
44
|
+
* \ingroup TaskActorSetView
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
class SetView : public VariableViewBase<SetVarImp> {
|
|
48
|
+
protected:
|
|
49
|
+
using VariableViewBase<SetVarImp>::var;
|
|
50
|
+
public:
|
|
51
|
+
/// \name Constructors and initialization
|
|
52
|
+
//@{
|
|
53
|
+
/// Default constructor
|
|
54
|
+
SetView(void);
|
|
55
|
+
/// Initialize from set variable \a x
|
|
56
|
+
SetView(const SetVar& x);
|
|
57
|
+
//@}
|
|
58
|
+
|
|
59
|
+
/// \name Value access
|
|
60
|
+
//@{
|
|
61
|
+
|
|
62
|
+
/// Return minimum cardinality
|
|
63
|
+
unsigned int cardMin(void) const;
|
|
64
|
+
/// Return maximum cardinality
|
|
65
|
+
unsigned int cardMax(void) const;
|
|
66
|
+
/// Return minimum of the least upper bound
|
|
67
|
+
int lubMin(void) const;
|
|
68
|
+
/// Return maximum of the least upper bound
|
|
69
|
+
int lubMax(void) const;
|
|
70
|
+
/// Return n-th smallest element of the least upper bound
|
|
71
|
+
int lubMinN(int n) const;
|
|
72
|
+
/// Return the n-th largest element of the least upper bound
|
|
73
|
+
int lubMaxN(int n) const;
|
|
74
|
+
/// Return minimum of the greatest lower bound
|
|
75
|
+
int glbMin(void) const;
|
|
76
|
+
/// Return maximum of the greatest lower bound
|
|
77
|
+
int glbMax(void) const;
|
|
78
|
+
|
|
79
|
+
/// Return the number of elements in the greatest lower bound
|
|
80
|
+
unsigned int glbSize(void) const;
|
|
81
|
+
/// Return the number of elements in the least upper bound
|
|
82
|
+
unsigned int lubSize(void) const;
|
|
83
|
+
/// Return the number of unknown elements
|
|
84
|
+
unsigned int unknownSize(void) const;
|
|
85
|
+
//@}
|
|
86
|
+
|
|
87
|
+
/// \name Domain tests
|
|
88
|
+
//@{
|
|
89
|
+
/// Test whether view is assigned
|
|
90
|
+
bool assigned(void) const;
|
|
91
|
+
/// Test whether \a i is in the greatest lower bound
|
|
92
|
+
bool contains(int i) const;
|
|
93
|
+
/// Test whether \a i is not in the least upper bound
|
|
94
|
+
bool notContains(int i) const;
|
|
95
|
+
//@}
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
/// \name Domain update by value
|
|
99
|
+
//@{
|
|
100
|
+
/// Restrict cardinality to be greater than or equal to \a m
|
|
101
|
+
ModEvent cardMin(Space* home, unsigned int m);
|
|
102
|
+
/// Restrict cardinality to be less than or equal to \a m
|
|
103
|
+
ModEvent cardMax(Space* home, unsigned int m);
|
|
104
|
+
/**
|
|
105
|
+
* \brief Update greatest lower bound to include all elements
|
|
106
|
+
* between and including \a i and \a j
|
|
107
|
+
*/
|
|
108
|
+
ModEvent include(Space* home,int i,int j);
|
|
109
|
+
/**
|
|
110
|
+
* \brief Restrict least upper bound to not contain all elements
|
|
111
|
+
* between and including \a i and \a j
|
|
112
|
+
*/
|
|
113
|
+
ModEvent exclude(Space* home,int i,int j);
|
|
114
|
+
/// Update greatest lower bound to contain \a i
|
|
115
|
+
ModEvent include(Space* home,int i);
|
|
116
|
+
/// Restrict least upper bound to not contain \a i
|
|
117
|
+
ModEvent exclude(Space* home,int i);
|
|
118
|
+
/**
|
|
119
|
+
* \brief Update least upper bound to contain at most all elements
|
|
120
|
+
* between and including \a i and \a j
|
|
121
|
+
*/
|
|
122
|
+
ModEvent intersect(Space* home,int i,int j);
|
|
123
|
+
/// Update least upper bound to contain at most the element \a i
|
|
124
|
+
ModEvent intersect(Space* home,int i);
|
|
125
|
+
//@}
|
|
126
|
+
|
|
127
|
+
/// \name Domain update by range iterator
|
|
128
|
+
//@{
|
|
129
|
+
|
|
130
|
+
/// Remove range sequence described by \a i from least upper bound
|
|
131
|
+
template <class I> ModEvent excludeI(Space* home, I& i);
|
|
132
|
+
/// Include range sequence described by \a i in greatest lower bound
|
|
133
|
+
template <class I> ModEvent includeI(Space* home, I& i);
|
|
134
|
+
/// Intersect least upper bound with range sequence described by \a i
|
|
135
|
+
template <class I> ModEvent intersectI(Space* home, I& iter);
|
|
136
|
+
//@}
|
|
137
|
+
|
|
138
|
+
/// \name Cloning
|
|
139
|
+
//@{
|
|
140
|
+
/// Update this view to be a clone of view \a x
|
|
141
|
+
void update(Space* home, bool share, SetView& x);
|
|
142
|
+
//@}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* \brief Traits class for views and variable implementations
|
|
149
|
+
*
|
|
150
|
+
* This class specializes the ViewVarTraits for SetView.
|
|
151
|
+
* \ingroup TaskActorSetView
|
|
152
|
+
*/
|
|
153
|
+
template<>
|
|
154
|
+
class ViewVarTraits<Set::SetView> {
|
|
155
|
+
public:
|
|
156
|
+
/// The variable type of a SetView
|
|
157
|
+
typedef Set::SetVarImp Var;
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
// Forward declarations for friends
|
|
161
|
+
namespace Set { class ConstantView; }
|
|
162
|
+
bool same(const Set::ConstantView&, const Set::ConstantView&);
|
|
163
|
+
bool before(const Set::ConstantView&, const Set::ConstantView&);
|
|
164
|
+
|
|
165
|
+
namespace Set {
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* \brief Constant view
|
|
169
|
+
*
|
|
170
|
+
* A constant set view \f$x\f$ for a set \f$s\f$ provides operations such
|
|
171
|
+
* that \f$x\f$ behaves like \f$s\f$.
|
|
172
|
+
* \ingroup TaskActorSetView
|
|
173
|
+
*/
|
|
174
|
+
class ConstantView : public ConstantViewBase {
|
|
175
|
+
friend class LubRanges<ConstantView>;
|
|
176
|
+
friend class GlbRanges<ConstantView>;
|
|
177
|
+
friend bool Gecode::same(const Gecode::Set::ConstantView&,
|
|
178
|
+
const Gecode::Set::ConstantView&);
|
|
179
|
+
friend bool Gecode::before(const Gecode::Set::ConstantView&,
|
|
180
|
+
const Gecode::Set::ConstantView&);
|
|
181
|
+
private:
|
|
182
|
+
int *ranges;
|
|
183
|
+
unsigned int size;
|
|
184
|
+
unsigned int domSize;
|
|
185
|
+
public:
|
|
186
|
+
/// \name Constructors and initialization
|
|
187
|
+
//@{
|
|
188
|
+
/// Default constructor
|
|
189
|
+
ConstantView(void);
|
|
190
|
+
/// Construct with \a s as the domain
|
|
191
|
+
ConstantView(Space* home, const IntSet& s);
|
|
192
|
+
//@}
|
|
193
|
+
|
|
194
|
+
/// \name Value access
|
|
195
|
+
//@{
|
|
196
|
+
/// Return minimum cardinality
|
|
197
|
+
unsigned int cardMin(void) const;
|
|
198
|
+
/// Return maximum cardinality
|
|
199
|
+
unsigned int cardMax(void) const;
|
|
200
|
+
/// Return minimum of the least upper bound
|
|
201
|
+
int lubMin(void) const;
|
|
202
|
+
/// Return maximum of the least upper bound
|
|
203
|
+
int lubMax(void) const;
|
|
204
|
+
/// Return n-th smallest element of the least upper bound
|
|
205
|
+
int lubMinN(int n) const;
|
|
206
|
+
/// Return the n-th largest element of the least upper bound
|
|
207
|
+
int lubMaxN(int n) const;
|
|
208
|
+
/// Return minimum of the greatest lower bound
|
|
209
|
+
int glbMin(void) const;
|
|
210
|
+
/// Return maximum of the greatest lower bound
|
|
211
|
+
int glbMax(void) const;
|
|
212
|
+
|
|
213
|
+
/// Return the number of elements in the greatest lower bound
|
|
214
|
+
unsigned int glbSize(void) const;
|
|
215
|
+
/// Return the number of elements in the least upper bound
|
|
216
|
+
unsigned int lubSize(void) const;
|
|
217
|
+
/// Return the number of unknown elements
|
|
218
|
+
unsigned int unknownSize(void) const;
|
|
219
|
+
//@}
|
|
220
|
+
|
|
221
|
+
/// \name Domain tests
|
|
222
|
+
//@{
|
|
223
|
+
/// Test whether view is assigned
|
|
224
|
+
bool assigned(void) const;
|
|
225
|
+
/// Test whether \a i is in the greatest lower bound
|
|
226
|
+
bool contains(int i) const;
|
|
227
|
+
/// Test whether \a i is not in the least upper bound
|
|
228
|
+
bool notContains(int i) const;
|
|
229
|
+
//@}
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
/// \name Domain update by value
|
|
233
|
+
//@{
|
|
234
|
+
/// Restrict cardinality to be greater than or equal to \a m
|
|
235
|
+
ModEvent cardMin(Space* home, unsigned int m);
|
|
236
|
+
/// Restrict cardinality to be less than or equal to \a m
|
|
237
|
+
ModEvent cardMax(Space* home, unsigned int m);
|
|
238
|
+
/**
|
|
239
|
+
* \brief Update greatest lower bound to include all elements
|
|
240
|
+
* between and including \a i and \a j
|
|
241
|
+
*/
|
|
242
|
+
ModEvent include(Space* home,int i,int j);
|
|
243
|
+
/**
|
|
244
|
+
* \brief Restrict least upper bound to not contain all elements
|
|
245
|
+
* between and including \a i and \a j
|
|
246
|
+
*/
|
|
247
|
+
ModEvent exclude(Space* home,int i,int j);
|
|
248
|
+
/// Update greatest lower bound to contain \a i
|
|
249
|
+
ModEvent include(Space* home,int i);
|
|
250
|
+
/// Restrict least upper bound to not contain \a i
|
|
251
|
+
ModEvent exclude(Space* home,int i);
|
|
252
|
+
/**
|
|
253
|
+
* \brief Update least upper bound to contain at most all elements
|
|
254
|
+
* between and including \a i and \a j
|
|
255
|
+
*/
|
|
256
|
+
ModEvent intersect(Space* home,int i,int j);
|
|
257
|
+
/// Update least upper bound to contain at most the element \a i
|
|
258
|
+
ModEvent intersect(Space* home,int i);
|
|
259
|
+
//@}
|
|
260
|
+
|
|
261
|
+
/// \name Domain update by range iterator
|
|
262
|
+
//@{
|
|
263
|
+
|
|
264
|
+
/// Remove range sequence described by \a i from least upper bound
|
|
265
|
+
template <class I> ModEvent excludeI(Space* home, I& i);
|
|
266
|
+
/// Include range sequence described by \a i in greatest lower bound
|
|
267
|
+
template <class I> ModEvent includeI(Space* home, I& i);
|
|
268
|
+
/// Intersect least upper bound with range sequence described by \a i
|
|
269
|
+
template <class I> ModEvent intersectI(Space* home, I& iter);
|
|
270
|
+
//@}
|
|
271
|
+
|
|
272
|
+
/// \name Propagator modification events
|
|
273
|
+
//@{
|
|
274
|
+
/// Return modification event of propagator \a p for view
|
|
275
|
+
static ModEvent pme(const Propagator* p);
|
|
276
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
277
|
+
static PropModEvent pme(ModEvent);
|
|
278
|
+
//@}
|
|
279
|
+
|
|
280
|
+
/// \name Dependencies
|
|
281
|
+
//@{
|
|
282
|
+
/**
|
|
283
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
284
|
+
*
|
|
285
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
286
|
+
* not processed for execution (this must be used when creating
|
|
287
|
+
* subscriptions during propagation).
|
|
288
|
+
*/
|
|
289
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
290
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
291
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
292
|
+
//@}
|
|
293
|
+
|
|
294
|
+
/// \name Cloning
|
|
295
|
+
//@{
|
|
296
|
+
/// Update this view to be a clone of view \a x
|
|
297
|
+
void update(Space* home, bool share, ConstantView& x);
|
|
298
|
+
//@}
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/** \name View comparison
|
|
304
|
+
* \relates Gecode::Set::ConstantView
|
|
305
|
+
*/
|
|
306
|
+
//@{
|
|
307
|
+
/// Test whether views \a x and \a y are the same
|
|
308
|
+
bool same(const Set::ConstantView& x, const Set::ConstantView& y);
|
|
309
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
310
|
+
bool before(const Set::ConstantView& x, const Set::ConstantView& y);
|
|
311
|
+
//@}
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* \brief Traits class for views and variable implementations
|
|
315
|
+
*
|
|
316
|
+
* This class specializes the ViewVarTraits for ConstantView.
|
|
317
|
+
* \ingroup TaskActorSetView
|
|
318
|
+
*/
|
|
319
|
+
template<>
|
|
320
|
+
class ViewVarTraits<Set::ConstantView> {
|
|
321
|
+
public:
|
|
322
|
+
/// The variable type of a ConstantView
|
|
323
|
+
typedef VarBase Var;
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
namespace Set {
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* \brief Constant view for the empty set
|
|
330
|
+
*
|
|
331
|
+
* A constant set view \f$x\f$ for the empty set provides operations such
|
|
332
|
+
* that \f$x\f$ behaves like the empty set.
|
|
333
|
+
* \ingroup TaskActorSetView
|
|
334
|
+
*/
|
|
335
|
+
|
|
336
|
+
class EmptyView : public ConstantViewBase {
|
|
337
|
+
public:
|
|
338
|
+
/// \name Constructors and initialization
|
|
339
|
+
//@{
|
|
340
|
+
/// Default constructor
|
|
341
|
+
EmptyView(void);
|
|
342
|
+
//@}
|
|
343
|
+
|
|
344
|
+
/// \name Value access
|
|
345
|
+
//@{
|
|
346
|
+
|
|
347
|
+
/// Return minimum cardinality
|
|
348
|
+
unsigned int cardMin(void) const;
|
|
349
|
+
/// Return maximum cardinality
|
|
350
|
+
unsigned int cardMax(void) const;
|
|
351
|
+
/// Return minimum of the least upper bound
|
|
352
|
+
int lubMin(void) const;
|
|
353
|
+
/// Return maximum of the least upper bound
|
|
354
|
+
int lubMax(void) const;
|
|
355
|
+
/// Return n-th smallest element of the least upper bound
|
|
356
|
+
int lubMinN(int n) const;
|
|
357
|
+
/// Return the n-th largest element of the least upper bound
|
|
358
|
+
int lubMaxN(int n) const;
|
|
359
|
+
/// Return minimum of the greatest lower bound
|
|
360
|
+
int glbMin(void) const;
|
|
361
|
+
/// Return maximum of the greatest lower bound
|
|
362
|
+
int glbMax(void) const;
|
|
363
|
+
|
|
364
|
+
/// Return the number of elements in the greatest lower bound
|
|
365
|
+
unsigned int glbSize(void) const;
|
|
366
|
+
/// Return the number of elements in the least upper bound
|
|
367
|
+
unsigned int lubSize(void) const;
|
|
368
|
+
/// Return the number of unknown elements
|
|
369
|
+
unsigned int unknownSize(void) const;
|
|
370
|
+
//@}
|
|
371
|
+
|
|
372
|
+
/// \name Domain tests
|
|
373
|
+
//@{
|
|
374
|
+
/// Test whether view is assigned
|
|
375
|
+
bool assigned(void) const;
|
|
376
|
+
/// Test whether \a i is in the greatest lower bound
|
|
377
|
+
bool contains(int i) const;
|
|
378
|
+
/// Test whether \a i is not in the least upper bound
|
|
379
|
+
bool notContains(int i) const;
|
|
380
|
+
//@}
|
|
381
|
+
|
|
382
|
+
|
|
383
|
+
/// \name Domain update by value
|
|
384
|
+
//@{
|
|
385
|
+
/// Restrict cardinality to be greater than or equal to \a m
|
|
386
|
+
ModEvent cardMin(Space* home, unsigned int m);
|
|
387
|
+
/// Restrict cardinality to be less than or equal to \a m
|
|
388
|
+
ModEvent cardMax(Space* home, unsigned int m);
|
|
389
|
+
/**
|
|
390
|
+
* \brief Update greatest lower bound to include all elements
|
|
391
|
+
* between and including \a i and \a j
|
|
392
|
+
*/
|
|
393
|
+
ModEvent include(Space* home,int i,int j);
|
|
394
|
+
/**
|
|
395
|
+
* \brief Restrict least upper bound to not contain all elements
|
|
396
|
+
* between and including \a i and \a j
|
|
397
|
+
*/
|
|
398
|
+
ModEvent exclude(Space* home,int i,int j);
|
|
399
|
+
/// Update greatest lower bound to contain \a i
|
|
400
|
+
ModEvent include(Space* home,int i);
|
|
401
|
+
/// Restrict least upper bound to not contain \a i
|
|
402
|
+
ModEvent exclude(Space* home,int i);
|
|
403
|
+
/**
|
|
404
|
+
* \brief Update least upper bound to contain at most all elements
|
|
405
|
+
* between and including \a i and \a j
|
|
406
|
+
*/
|
|
407
|
+
ModEvent intersect(Space* home,int i,int j);
|
|
408
|
+
/// Update least upper bound to contain at most the element \a i
|
|
409
|
+
ModEvent intersect(Space* home,int i);
|
|
410
|
+
//@}
|
|
411
|
+
|
|
412
|
+
/// \name Domain update by range iterator
|
|
413
|
+
//@{
|
|
414
|
+
|
|
415
|
+
/// Remove range sequence described by \a i from least upper bound
|
|
416
|
+
template <class I> ModEvent excludeI(Space* home, I& i);
|
|
417
|
+
/// Include range sequence described by \a i in greatest lower bound
|
|
418
|
+
template <class I> ModEvent includeI(Space* home, I& i);
|
|
419
|
+
/// Intersect least upper bound with range sequence described by \a i
|
|
420
|
+
template <class I> ModEvent intersectI(Space* home, I& iter);
|
|
421
|
+
//@}
|
|
422
|
+
|
|
423
|
+
/// \name Propagator modification events
|
|
424
|
+
//@{
|
|
425
|
+
/// Return modification event of propagator \a p for view
|
|
426
|
+
static ModEvent pme(const Propagator* p);
|
|
427
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
428
|
+
static PropModEvent pme(ModEvent);
|
|
429
|
+
//@}
|
|
430
|
+
|
|
431
|
+
/// \name Dependencies
|
|
432
|
+
//@{
|
|
433
|
+
/**
|
|
434
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
435
|
+
*
|
|
436
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
437
|
+
* not processed for execution (this must be used when creating
|
|
438
|
+
* subscriptions during propagation).
|
|
439
|
+
*/
|
|
440
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
441
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
442
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
443
|
+
//@}
|
|
444
|
+
|
|
445
|
+
/// \name Cloning
|
|
446
|
+
//@{
|
|
447
|
+
/// Update this view to be a clone of view \a x
|
|
448
|
+
void update(Space* home, bool share, EmptyView& x);
|
|
449
|
+
//@}
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/** \name View comparison
|
|
455
|
+
* \relates Gecode::Set::EmptyView
|
|
456
|
+
*/
|
|
457
|
+
//@{
|
|
458
|
+
/// Test whether views \a x and \a y are the same
|
|
459
|
+
bool same(const Set::EmptyView& x, const Set::EmptyView& y);
|
|
460
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
461
|
+
bool before(const Set::EmptyView& x, const Set::EmptyView& y);
|
|
462
|
+
//@}
|
|
463
|
+
|
|
464
|
+
/**
|
|
465
|
+
* \brief Traits class for views and variable implementations
|
|
466
|
+
*
|
|
467
|
+
* This class specializes the ViewVarTraits for EmptyView.
|
|
468
|
+
* \ingroup TaskActorSetView
|
|
469
|
+
*/
|
|
470
|
+
template<>
|
|
471
|
+
class ViewVarTraits<Set::EmptyView> {
|
|
472
|
+
public:
|
|
473
|
+
/// The variable type of an EmptyView
|
|
474
|
+
typedef VarBase Var;
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
namespace Set {
|
|
478
|
+
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* \brief Constant view for the universe
|
|
482
|
+
*
|
|
483
|
+
* A constant set view \f$x\f$ for the universe provides operations such
|
|
484
|
+
* that \f$x\f$ behaves like the universe.
|
|
485
|
+
* \ingroup TaskActorSetView
|
|
486
|
+
*/
|
|
487
|
+
|
|
488
|
+
class UniverseView : public ConstantViewBase {
|
|
489
|
+
public:
|
|
490
|
+
/// \name Constructors and initialization
|
|
491
|
+
//@{
|
|
492
|
+
/// Default constructor
|
|
493
|
+
UniverseView(void);
|
|
494
|
+
//@}
|
|
495
|
+
|
|
496
|
+
/// \name Value access
|
|
497
|
+
//@{
|
|
498
|
+
|
|
499
|
+
/// Return minimum cardinality
|
|
500
|
+
unsigned int cardMin(void) const;
|
|
501
|
+
/// Return maximum cardinality
|
|
502
|
+
unsigned int cardMax(void) const;
|
|
503
|
+
/// Return minimum of the least upper bound
|
|
504
|
+
int lubMin(void) const;
|
|
505
|
+
/// Return maximum of the least upper bound
|
|
506
|
+
int lubMax(void) const;
|
|
507
|
+
/// Return n-th smallest element of the least upper bound
|
|
508
|
+
int lubMinN(int n) const;
|
|
509
|
+
/// Return the n-th largest element of the least upper bound
|
|
510
|
+
int lubMaxN(int n) const;
|
|
511
|
+
/// Return minimum of the greatest lower bound
|
|
512
|
+
int glbMin(void) const;
|
|
513
|
+
/// Return maximum of the greatest lower bound
|
|
514
|
+
int glbMax(void) const;
|
|
515
|
+
|
|
516
|
+
/// Return the number of elements in the greatest lower bound
|
|
517
|
+
unsigned int glbSize(void) const;
|
|
518
|
+
/// Return the number of elements in the least upper bound
|
|
519
|
+
unsigned int lubSize(void) const;
|
|
520
|
+
/// Return the number of unknown elements
|
|
521
|
+
unsigned int unknownSize(void) const;
|
|
522
|
+
//@}
|
|
523
|
+
|
|
524
|
+
/// \name Domain tests
|
|
525
|
+
//@{
|
|
526
|
+
/// Test whether view is assigned
|
|
527
|
+
bool assigned(void) const;
|
|
528
|
+
/// Test whether \a i is in the greatest lower bound
|
|
529
|
+
bool contains(int i) const;
|
|
530
|
+
/// Test whether \a i is not in the least upper bound
|
|
531
|
+
bool notContains(int i) const;
|
|
532
|
+
//@}
|
|
533
|
+
|
|
534
|
+
|
|
535
|
+
/// \name Domain update by value
|
|
536
|
+
//@{
|
|
537
|
+
/// Restrict cardinality to be greater than or equal to \a m
|
|
538
|
+
ModEvent cardMin(Space* home, unsigned int m);
|
|
539
|
+
/// Restrict cardinality to be less than or equal to \a m
|
|
540
|
+
ModEvent cardMax(Space* home, unsigned int m);
|
|
541
|
+
/**
|
|
542
|
+
* \brief Update greatest lower bound to include all elements
|
|
543
|
+
* between and including \a i and \a j
|
|
544
|
+
*/
|
|
545
|
+
ModEvent include(Space* home,int i,int j);
|
|
546
|
+
/**
|
|
547
|
+
* \brief Restrict least upper bound to not contain all elements
|
|
548
|
+
* between and including \a i and \a j
|
|
549
|
+
*/
|
|
550
|
+
ModEvent exclude(Space* home,int i,int j);
|
|
551
|
+
/// Update greatest lower bound to contain \a i
|
|
552
|
+
ModEvent include(Space* home,int i);
|
|
553
|
+
/// Restrict least upper bound to not contain \a i
|
|
554
|
+
ModEvent exclude(Space* home,int i);
|
|
555
|
+
/**
|
|
556
|
+
* \brief Update least upper bound to contain at most all elements
|
|
557
|
+
* between and including \a i and \a j
|
|
558
|
+
*/
|
|
559
|
+
ModEvent intersect(Space* home,int i,int j);
|
|
560
|
+
/// Update least upper bound to contain at most the element \a i
|
|
561
|
+
ModEvent intersect(Space* home,int i);
|
|
562
|
+
//@}
|
|
563
|
+
|
|
564
|
+
/// \name Domain update by range iterator
|
|
565
|
+
//@{
|
|
566
|
+
|
|
567
|
+
/// Remove range sequence described by \a i from least upper bound
|
|
568
|
+
template <class I> ModEvent excludeI(Space* home, I& i);
|
|
569
|
+
/// Include range sequence described by \a i in greatest lower bound
|
|
570
|
+
template <class I> ModEvent includeI(Space* home, I& i);
|
|
571
|
+
/// Intersect least upper bound with range sequence described by \a i
|
|
572
|
+
template <class I> ModEvent intersectI(Space* home, I& iter);
|
|
573
|
+
//@}
|
|
574
|
+
|
|
575
|
+
/// \name Propagator modification events
|
|
576
|
+
//@{
|
|
577
|
+
/// Return modification event of propagator \a p for view
|
|
578
|
+
static ModEvent pme(const Propagator* p);
|
|
579
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
580
|
+
static PropModEvent pme(ModEvent);
|
|
581
|
+
//@}
|
|
582
|
+
|
|
583
|
+
/// \name Dependencies
|
|
584
|
+
//@{
|
|
585
|
+
/**
|
|
586
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
587
|
+
*
|
|
588
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
589
|
+
* not processed for execution (this must be used when creating
|
|
590
|
+
* subscriptions during propagation).
|
|
591
|
+
*/
|
|
592
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
593
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
594
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
595
|
+
//@}
|
|
596
|
+
|
|
597
|
+
/// \name Cloning
|
|
598
|
+
//@{
|
|
599
|
+
/// Update this view to be a clone of view \a x
|
|
600
|
+
void update(Space* home, bool share, UniverseView& x);
|
|
601
|
+
//@}
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
/** \name View comparison
|
|
607
|
+
* \relates Gecode::Set::UniverseView
|
|
608
|
+
*/
|
|
609
|
+
//@{
|
|
610
|
+
/// Test whether views \a x and \a y are the same
|
|
611
|
+
bool same(const Set::UniverseView& x, const Set::UniverseView& y);
|
|
612
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
613
|
+
bool before(const Set::UniverseView& x, const Set::UniverseView& y);
|
|
614
|
+
//@}
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* \brief Traits class for views and variable implementations
|
|
618
|
+
*
|
|
619
|
+
* This class specializes the ViewVarTraits for UniverseView.
|
|
620
|
+
* \ingroup TaskActorSetView
|
|
621
|
+
*/
|
|
622
|
+
template<>
|
|
623
|
+
class ViewVarTraits<Set::UniverseView> {
|
|
624
|
+
public:
|
|
625
|
+
/// The variable type of a UniverseView
|
|
626
|
+
typedef VarBase Var;
|
|
627
|
+
};
|
|
628
|
+
|
|
629
|
+
namespace Set {
|
|
630
|
+
|
|
631
|
+
|
|
632
|
+
|
|
633
|
+
/**
|
|
634
|
+
* \brief Singleton set view
|
|
635
|
+
*
|
|
636
|
+
* A singleton set view \f$s\f$ for an integer view \f$x\f$ provides
|
|
637
|
+
* operations such that \f$s\f$ behaves like the singleton set \f$\{x\}\f$.
|
|
638
|
+
* \ingroup TaskActorSetView
|
|
639
|
+
*/
|
|
640
|
+
|
|
641
|
+
class SingletonView :
|
|
642
|
+
public DerivedViewBase<Gecode::Int::IntView> {
|
|
643
|
+
protected:
|
|
644
|
+
using DerivedViewBase<Gecode::Int::IntView>::view;;
|
|
645
|
+
|
|
646
|
+
/// Convert set variable PropCond \a pc to a PropCond for integer variables
|
|
647
|
+
static PropCond pc_settoint(PropCond pc);
|
|
648
|
+
/// Convert integer variable ModEvent \a me to a ModEvent for set variables
|
|
649
|
+
static ModEvent me_inttoset(ModEvent me);
|
|
650
|
+
|
|
651
|
+
public:
|
|
652
|
+
/// \name Constructors and initialization
|
|
653
|
+
//@{
|
|
654
|
+
/// Default constructor
|
|
655
|
+
SingletonView(void);
|
|
656
|
+
/// Initialize with integer view \a x
|
|
657
|
+
SingletonView(Gecode::Int::IntView& x);
|
|
658
|
+
//@}
|
|
659
|
+
|
|
660
|
+
/// \name Value access
|
|
661
|
+
//@{
|
|
662
|
+
|
|
663
|
+
/// Return minimum cardinality
|
|
664
|
+
unsigned int cardMin(void) const;
|
|
665
|
+
/// Return maximum cardinality
|
|
666
|
+
unsigned int cardMax(void) const;
|
|
667
|
+
/// Return minimum of the least upper bound
|
|
668
|
+
int lubMin(void) const;
|
|
669
|
+
/// Return maximum of the least upper bound
|
|
670
|
+
int lubMax(void) const;
|
|
671
|
+
/// Return n-th smallest element of the least upper bound
|
|
672
|
+
int lubMinN(int n) const;
|
|
673
|
+
/// Return the n-th largest element of the least upper bound
|
|
674
|
+
int lubMaxN(int n) const;
|
|
675
|
+
/// Return minimum of the greatest lower bound
|
|
676
|
+
int glbMin(void) const;
|
|
677
|
+
/// Return maximum of the greatest lower bound
|
|
678
|
+
int glbMax(void) const;
|
|
679
|
+
|
|
680
|
+
/// Return the number of elements in the greatest lower bound
|
|
681
|
+
unsigned int glbSize(void) const;
|
|
682
|
+
/// Return the number of elements in the least upper bound
|
|
683
|
+
unsigned int lubSize(void) const;
|
|
684
|
+
/// Return the number of unknown elements
|
|
685
|
+
unsigned int unknownSize(void) const;
|
|
686
|
+
//@}
|
|
687
|
+
|
|
688
|
+
/// \name Domain tests
|
|
689
|
+
//@{
|
|
690
|
+
/// Test whether view is assigned
|
|
691
|
+
bool assigned(void) const;
|
|
692
|
+
/// Test whether \a i is in the greatest lower bound
|
|
693
|
+
bool contains(int i) const;
|
|
694
|
+
/// Test whether \a i is not in the least upper bound
|
|
695
|
+
bool notContains(int i) const;
|
|
696
|
+
//@}
|
|
697
|
+
|
|
698
|
+
|
|
699
|
+
/// \name Domain update by value
|
|
700
|
+
//@{
|
|
701
|
+
/// Restrict cardinality to be greater than or equal to \a m
|
|
702
|
+
ModEvent cardMin(Space* home, unsigned int m);
|
|
703
|
+
/// Restrict cardinality to be less than or equal to \a m
|
|
704
|
+
ModEvent cardMax(Space* home, unsigned int m);
|
|
705
|
+
/**
|
|
706
|
+
* \brief Update greatest lower bound to include all elements
|
|
707
|
+
* between and including \a i and \a j
|
|
708
|
+
*/
|
|
709
|
+
ModEvent include(Space* home,int i,int j);
|
|
710
|
+
/**
|
|
711
|
+
* \brief Restrict least upper bound to not contain all elements
|
|
712
|
+
* between and including \a i and \a j
|
|
713
|
+
*/
|
|
714
|
+
ModEvent exclude(Space* home,int i,int j);
|
|
715
|
+
/// Update greatest lower bound to contain \a i
|
|
716
|
+
ModEvent include(Space* home,int i);
|
|
717
|
+
/// Restrict least upper bound to not contain \a i
|
|
718
|
+
ModEvent exclude(Space* home,int i);
|
|
719
|
+
/**
|
|
720
|
+
* \brief Update least upper bound to contain at most all elements
|
|
721
|
+
* between and including \a i and \a j
|
|
722
|
+
*/
|
|
723
|
+
ModEvent intersect(Space* home,int i,int j);
|
|
724
|
+
/// Update least upper bound to contain at most the element \a i
|
|
725
|
+
ModEvent intersect(Space* home,int i);
|
|
726
|
+
//@}
|
|
727
|
+
|
|
728
|
+
/// \name Domain update by range iterator
|
|
729
|
+
//@{
|
|
730
|
+
|
|
731
|
+
/// Remove range sequence described by \a i from least upper bound
|
|
732
|
+
template <class I> ModEvent excludeI(Space* home, I& i);
|
|
733
|
+
/// Include range sequence described by \a i in greatest lower bound
|
|
734
|
+
template <class I> ModEvent includeI(Space* home, I& i);
|
|
735
|
+
/// Intersect least upper bound with range sequence described by \a i
|
|
736
|
+
template <class I> ModEvent intersectI(Space* home, I& iter);
|
|
737
|
+
//@}
|
|
738
|
+
|
|
739
|
+
/// \name Propagator modification events
|
|
740
|
+
//@{
|
|
741
|
+
/// Return modification event of propagator \a p for view
|
|
742
|
+
static ModEvent pme(const Propagator* p);
|
|
743
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
744
|
+
static PropModEvent pme(ModEvent);
|
|
745
|
+
//@}
|
|
746
|
+
|
|
747
|
+
/// \name Dependencies
|
|
748
|
+
//@{
|
|
749
|
+
/**
|
|
750
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
751
|
+
*
|
|
752
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
753
|
+
* not processed for execution (this must be used when creating
|
|
754
|
+
* subscriptions during propagation).
|
|
755
|
+
*/
|
|
756
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
757
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
758
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
759
|
+
//@}
|
|
760
|
+
|
|
761
|
+
|
|
762
|
+
/// \name Cloning
|
|
763
|
+
//@{
|
|
764
|
+
/// Update this view to be a clone of view \a x
|
|
765
|
+
void update(Space* home, bool share, SingletonView& x);
|
|
766
|
+
//@}
|
|
767
|
+
};
|
|
768
|
+
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
/** \name View comparison
|
|
772
|
+
* \relates Gecode::Set::SingletonView
|
|
773
|
+
*/
|
|
774
|
+
//@{
|
|
775
|
+
/// Test whether views \a x and \a y are the same
|
|
776
|
+
bool same(const Set::SingletonView& x, const Set::SingletonView& y);
|
|
777
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
778
|
+
bool before(const Set::SingletonView& x, const Set::SingletonView& y);
|
|
779
|
+
//@}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* \brief Traits class for views and variable implementations
|
|
783
|
+
*
|
|
784
|
+
* This class specializes the ViewVarTraits for SingletonView.
|
|
785
|
+
* \ingroup TaskActorSetView
|
|
786
|
+
*/
|
|
787
|
+
template<>
|
|
788
|
+
class ViewVarTraits<Set::SingletonView> {
|
|
789
|
+
public:
|
|
790
|
+
/// The variable type of a SingletonView
|
|
791
|
+
typedef Int::IntVarImp Var;
|
|
792
|
+
};
|
|
793
|
+
|
|
794
|
+
namespace Set {
|
|
795
|
+
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* \brief Complement set view
|
|
799
|
+
*
|
|
800
|
+
* A complement set view \f$s\f$ for a set view \f$t\f$ provides
|
|
801
|
+
* operations such that \f$s\f$ behaves like the complement of \f$\{t\}\f$.
|
|
802
|
+
* The complement is defined in terms of the set universe.
|
|
803
|
+
* \ingroup TaskActorSetView
|
|
804
|
+
*/
|
|
805
|
+
|
|
806
|
+
template <class View>
|
|
807
|
+
class ComplementView
|
|
808
|
+
: public DerivedViewBase<View> {
|
|
809
|
+
protected:
|
|
810
|
+
using DerivedViewBase<View>::view;
|
|
811
|
+
|
|
812
|
+
public:
|
|
813
|
+
/// Negate the propagation condition \a pc
|
|
814
|
+
static PropCond pc_negateset(PropCond pc);
|
|
815
|
+
/// Negate the modification event \a me
|
|
816
|
+
static ModEvent me_negateset(ModEvent me);
|
|
817
|
+
|
|
818
|
+
/// \name Constructors and initialization
|
|
819
|
+
//@{
|
|
820
|
+
/// Default constructor
|
|
821
|
+
ComplementView(void);
|
|
822
|
+
/// Initialize with set view x
|
|
823
|
+
ComplementView(View& x);
|
|
824
|
+
//@}
|
|
825
|
+
|
|
826
|
+
/// \name Value access
|
|
827
|
+
//@{
|
|
828
|
+
|
|
829
|
+
/// Return minimum cardinality
|
|
830
|
+
unsigned int cardMin(void) const;
|
|
831
|
+
/// Return maximum cardinality
|
|
832
|
+
unsigned int cardMax(void) const;
|
|
833
|
+
/// Return minimum of the least upper bound
|
|
834
|
+
int lubMin(void) const;
|
|
835
|
+
/// Return maximum of the least upper bound
|
|
836
|
+
int lubMax(void) const;
|
|
837
|
+
/// Return n-th smallest element of the least upper bound
|
|
838
|
+
int lubMinN(int n) const;
|
|
839
|
+
/// Return the n-th largest element of the least upper bound
|
|
840
|
+
int lubMaxN(int n) const;
|
|
841
|
+
/// Return minimum of the greatest lower bound
|
|
842
|
+
int glbMin(void) const;
|
|
843
|
+
/// Return maximum of the greatest lower bound
|
|
844
|
+
int glbMax(void) const;
|
|
845
|
+
|
|
846
|
+
/// Return the number of elements in the greatest lower bound
|
|
847
|
+
unsigned int glbSize(void) const;
|
|
848
|
+
/// Return the number of elements in the least upper bound
|
|
849
|
+
unsigned int lubSize(void) const;
|
|
850
|
+
/// Return the number of unknown elements
|
|
851
|
+
unsigned int unknownSize(void) const;
|
|
852
|
+
//@}
|
|
853
|
+
|
|
854
|
+
/// \name Domain tests
|
|
855
|
+
//@{
|
|
856
|
+
/// Test whether view is assigned
|
|
857
|
+
bool assigned(void) const;
|
|
858
|
+
/// Test whether \a i is in the greatest lower bound
|
|
859
|
+
bool contains(int i) const;
|
|
860
|
+
/// Test whether \a i is not in the least upper bound
|
|
861
|
+
bool notContains(int i) const;
|
|
862
|
+
//@}
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
/// \name Domain update by value
|
|
866
|
+
//@{
|
|
867
|
+
/// Restrict cardinality to be greater than or equal to \a m
|
|
868
|
+
ModEvent cardMin(Space* home, unsigned int m);
|
|
869
|
+
/// Restrict cardinality to be less than or equal to \a m
|
|
870
|
+
ModEvent cardMax(Space* home, unsigned int m);
|
|
871
|
+
/**
|
|
872
|
+
* \brief Update greatest lower bound to include all elements
|
|
873
|
+
* between and including \a i and \a j
|
|
874
|
+
*/
|
|
875
|
+
ModEvent include(Space* home,int i,int j);
|
|
876
|
+
/**
|
|
877
|
+
* \brief Restrict least upper bound to not contain all elements
|
|
878
|
+
* between and including \a i and \a j
|
|
879
|
+
*/
|
|
880
|
+
ModEvent exclude(Space* home,int i,int j);
|
|
881
|
+
/// Update greatest lower bound to contain \a i
|
|
882
|
+
ModEvent include(Space* home,int i);
|
|
883
|
+
/// Restrict least upper bound to not contain \a i
|
|
884
|
+
ModEvent exclude(Space* home,int i);
|
|
885
|
+
/**
|
|
886
|
+
* \brief Update least upper bound to contain at most all elements
|
|
887
|
+
* between and including \a i and \a j
|
|
888
|
+
*/
|
|
889
|
+
ModEvent intersect(Space* home,int i,int j);
|
|
890
|
+
/// Update least upper bound to contain at most the element \a i
|
|
891
|
+
ModEvent intersect(Space* home,int i);
|
|
892
|
+
//@}
|
|
893
|
+
|
|
894
|
+
/// \name Domain update by range iterator
|
|
895
|
+
//@{
|
|
896
|
+
|
|
897
|
+
/// Remove range sequence described by \a i from least upper bound
|
|
898
|
+
template <class I> ModEvent excludeI(Space* home, I& i);
|
|
899
|
+
/// Include range sequence described by \a i in greatest lower bound
|
|
900
|
+
template <class I> ModEvent includeI(Space* home, I& i);
|
|
901
|
+
/// Intersect least upper bound with range sequence described by \a i
|
|
902
|
+
template <class I> ModEvent intersectI(Space* home, I& iter);
|
|
903
|
+
//@}
|
|
904
|
+
|
|
905
|
+
/// \name Propagator modification events
|
|
906
|
+
//@{
|
|
907
|
+
/// Return modification event of propagator \a p for view
|
|
908
|
+
static ModEvent pme(const Propagator* p);
|
|
909
|
+
/// Translate modification event \a me to propagator modification event for view
|
|
910
|
+
static PropModEvent pme(ModEvent);
|
|
911
|
+
//@}
|
|
912
|
+
|
|
913
|
+
/// \name Dependencies
|
|
914
|
+
//@{
|
|
915
|
+
/**
|
|
916
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
|
917
|
+
*
|
|
918
|
+
* In case \a process is false, the propagator is just subscribed but
|
|
919
|
+
* not processed for execution (this must be used when creating
|
|
920
|
+
* subscriptions during propagation).
|
|
921
|
+
*/
|
|
922
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
|
923
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to view
|
|
924
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
|
925
|
+
//@}
|
|
926
|
+
|
|
927
|
+
|
|
928
|
+
/// \name Cloning
|
|
929
|
+
//@{
|
|
930
|
+
/// Update this view to be a clone of view \a x
|
|
931
|
+
void update(Space* home, bool share, ComplementView& x);
|
|
932
|
+
//@}
|
|
933
|
+
};
|
|
934
|
+
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
/** \name View comparison
|
|
938
|
+
* \relates Gecode::Set::ComplementView
|
|
939
|
+
*/
|
|
940
|
+
//@{
|
|
941
|
+
/// Test whether views \a x and \a y are the same
|
|
942
|
+
template <class View>
|
|
943
|
+
bool same(const Set::ComplementView<View>& x,
|
|
944
|
+
const Set::ComplementView<View>& y);
|
|
945
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
946
|
+
template <class View>
|
|
947
|
+
bool before(const Set::ComplementView<View>& x,
|
|
948
|
+
const Set::ComplementView<View>& y);
|
|
949
|
+
//@}
|
|
950
|
+
|
|
951
|
+
|
|
952
|
+
/**
|
|
953
|
+
* \brief Traits class for views and variable implementations
|
|
954
|
+
*
|
|
955
|
+
* This class specializes the ViewVarTraits for ComplementView.
|
|
956
|
+
* \ingroup TaskActorSetView
|
|
957
|
+
*/
|
|
958
|
+
template <class View>
|
|
959
|
+
class ViewVarTraits<Set::ComplementView<View> > {
|
|
960
|
+
public:
|
|
961
|
+
/// The variable type of a ComplementView
|
|
962
|
+
typedef typename ViewVarTraits<View>::Var Var;
|
|
963
|
+
};
|
|
964
|
+
|
|
965
|
+
namespace Set {
|
|
966
|
+
|
|
967
|
+
/**
|
|
968
|
+
* \brief Complement set view specialized for complement set views
|
|
969
|
+
*
|
|
970
|
+
* A complement set view \f$s\f$ for a complement set view for a set
|
|
971
|
+
* view \f$t\f$ provides operations such that \f$s\f$ behaves like
|
|
972
|
+
* \f$\{t\}\f$. This eliminates double negation.
|
|
973
|
+
* \ingroup TaskActorSetView
|
|
974
|
+
*/
|
|
975
|
+
template <class View>
|
|
976
|
+
class ComplementView<ComplementView<View> > : public View {
|
|
977
|
+
public:
|
|
978
|
+
/// \name Constructors and initialization
|
|
979
|
+
//@{
|
|
980
|
+
/// Default constructor
|
|
981
|
+
ComplementView(void);
|
|
982
|
+
/// Initialize with set view x
|
|
983
|
+
ComplementView(ComplementView<View>& x);
|
|
984
|
+
//@}
|
|
985
|
+
};
|
|
986
|
+
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
/** \name View comparison
|
|
990
|
+
* \relates Gecode::Set::ComplementView
|
|
991
|
+
*/
|
|
992
|
+
//@{
|
|
993
|
+
/// Test whether views \a x and \a y are the same
|
|
994
|
+
template <class View>
|
|
995
|
+
bool same(const Set::ComplementView<Set::ComplementView<View> >& x,
|
|
996
|
+
const Set::ComplementView<Set::ComplementView<View> >& y);
|
|
997
|
+
/// Test whether view \a x comes before \a y (arbitrary order)
|
|
998
|
+
template <class View>
|
|
999
|
+
bool before(const Set::ComplementView<Set::ComplementView<View> >& x,
|
|
1000
|
+
const Set::ComplementView<Set::ComplementView<View> >& y);
|
|
1001
|
+
//@}
|
|
1002
|
+
|
|
1003
|
+
|
|
1004
|
+
/**
|
|
1005
|
+
* \brief Traits class for views and variable implementations
|
|
1006
|
+
*
|
|
1007
|
+
* This class specializes the ViewVarTraits for double-negated
|
|
1008
|
+
* ComplementView.
|
|
1009
|
+
* \ingroup TaskActorSetView
|
|
1010
|
+
*/
|
|
1011
|
+
template <class View>
|
|
1012
|
+
class ViewVarTraits<Set::ComplementView<Set::ComplementView<View> > > {
|
|
1013
|
+
public:
|
|
1014
|
+
/// The variable type of a ComplementView
|
|
1015
|
+
typedef typename ViewVarTraits<View>::Var Var;
|
|
1016
|
+
};
|
|
1017
|
+
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
#include "gecode/set/view/set.icc"
|
|
1021
|
+
#include "gecode/set/view/const.icc"
|
|
1022
|
+
#include "gecode/set/view/singleton.icc"
|
|
1023
|
+
#include "gecode/set/view/complement.icc"
|
|
1024
|
+
|
|
1025
|
+
/**
|
|
1026
|
+
* \brief Print set variable view
|
|
1027
|
+
* \relates Gecode::Set::SetView
|
|
1028
|
+
*/
|
|
1029
|
+
GECODE_SET_EXPORT std::ostream&
|
|
1030
|
+
operator<<(std::ostream&, const Gecode::Set::SetView&);
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
/**
|
|
1034
|
+
* \brief Print empty set view
|
|
1035
|
+
* \relates Gecode::Set::EmptyView
|
|
1036
|
+
*/
|
|
1037
|
+
GECODE_SET_EXPORT std::ostream&
|
|
1038
|
+
operator<<(std::ostream&, const Gecode::Set::EmptyView&);
|
|
1039
|
+
|
|
1040
|
+
/**
|
|
1041
|
+
* \brief Print universe set view
|
|
1042
|
+
* \relates Gecode::Set::UniverseView
|
|
1043
|
+
*/
|
|
1044
|
+
GECODE_SET_EXPORT std::ostream&
|
|
1045
|
+
operator<<(std::ostream&, const Gecode::Set::UniverseView&);
|
|
1046
|
+
|
|
1047
|
+
/**
|
|
1048
|
+
* \brief Print set constant view
|
|
1049
|
+
* \relates Gecode::Set::ConstantView
|
|
1050
|
+
*/
|
|
1051
|
+
GECODE_SET_EXPORT std::ostream&
|
|
1052
|
+
operator<<(std::ostream&, const Gecode::Set::ConstantView&);
|
|
1053
|
+
|
|
1054
|
+
/**
|
|
1055
|
+
* \brief Print singelton set view
|
|
1056
|
+
* \relates Gecode::Set::SingletonView
|
|
1057
|
+
*/
|
|
1058
|
+
GECODE_SET_EXPORT std::ostream&
|
|
1059
|
+
operator<<(std::ostream&, const Gecode::Set::SingletonView&);
|
|
1060
|
+
|
|
1061
|
+
/**
|
|
1062
|
+
* \brief Print set complement view
|
|
1063
|
+
* \relates Gecode::Set::ComplementView
|
|
1064
|
+
*/
|
|
1065
|
+
template <class View>
|
|
1066
|
+
std::ostream&
|
|
1067
|
+
operator<<(std::ostream&, const Gecode::Set::ComplementView<View>&);
|
|
1068
|
+
|
|
1069
|
+
inline std::ostream&
|
|
1070
|
+
operator<<(std::ostream& os, const Gecode::SetVar& x) {
|
|
1071
|
+
Gecode::Set::SetView vx(x);
|
|
1072
|
+
return os << vx;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
// STATISTICS: set-var
|