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,29 @@
|
|
1
|
+
module Gecode
|
2
|
+
class FreeBoolVar
|
3
|
+
# Creates a linear expression where the bool variables are summed.
|
4
|
+
def +(var)
|
5
|
+
Gecode::Constraints::Int::Linear::ExpressionNode.new(self,
|
6
|
+
@model) + var
|
7
|
+
end
|
8
|
+
|
9
|
+
alias_method :pre_linear_mult, :* if instance_methods.include? '*'
|
10
|
+
|
11
|
+
# Creates a linear expression where the bool variable is multiplied with
|
12
|
+
# a constant integer.
|
13
|
+
def *(int)
|
14
|
+
if int.kind_of? Fixnum
|
15
|
+
Gecode::Constraints::Int::Linear::ExpressionNode.new(self,
|
16
|
+
@model) * int
|
17
|
+
else
|
18
|
+
pre_linear_mult(int) if respond_to? :pre_linear_mult
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Creates a linear expression where the specified variable is subtracted
|
23
|
+
# from this one.
|
24
|
+
def -(var)
|
25
|
+
Gecode::Constraints::Int::Linear::ExpressionNode.new(self,
|
26
|
+
@model) - var
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Gecode
|
2
|
+
module BoolEnumMethods
|
3
|
+
# Produces an expression that can be handled as if it was a variable
|
4
|
+
# representing the conjunction of all boolean variables in the enumeration.
|
5
|
+
def conjunction
|
6
|
+
return Gecode::Constraints::BoolEnum::ConjunctionStub.new(
|
7
|
+
@model, :lhs => self)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Produces an expression that can be handled as if it was a variable
|
11
|
+
# representing the disjunction of all boolean variables in the enumeration.
|
12
|
+
def disjunction
|
13
|
+
return Gecode::Constraints::BoolEnum::DisjunctionStub.new(
|
14
|
+
@model, :lhs => self)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# A module that gathers the classes and modules used by boolean enumeration
|
19
|
+
# constraints.
|
20
|
+
module Constraints::BoolEnum
|
21
|
+
# Describes a CompositeStub for the conjunction constraint, which constrain
|
22
|
+
# the conjunction of all boolean variables in an enumeration.
|
23
|
+
#
|
24
|
+
# == Example
|
25
|
+
#
|
26
|
+
# # The conjunction of all variables in +bool_enum+ must be true. I.e. all
|
27
|
+
# # boolean variables must take the value true.
|
28
|
+
# bool_enum.conjunction.must_be.true
|
29
|
+
#
|
30
|
+
# # The conjunction of all variables in +bool_enum+ must equal b1.
|
31
|
+
# bool_enum.conjunction.must == b1
|
32
|
+
#
|
33
|
+
# # The conjunction of all variables in +bool_enum+ must not equal b1 and
|
34
|
+
# # b2. It's reified it with +bool+ and selects the strength +domain+.
|
35
|
+
# bool_enum.conjunction.must_not.equal(b1 & b2, :reify => bool,
|
36
|
+
# :strength => :domain)
|
37
|
+
class ConjunctionStub < Gecode::Constraints::Bool::CompositeStub
|
38
|
+
def constrain_equal(variable, params, constrain)
|
39
|
+
enum, strength = @params.values_at(:lhs, :strength)
|
40
|
+
|
41
|
+
@model.add_interaction do
|
42
|
+
if variable.respond_to? :bind
|
43
|
+
bound = variable.bind
|
44
|
+
else
|
45
|
+
bound = variable
|
46
|
+
end
|
47
|
+
Gecode::Raw::bool_and(@model.active_space, enum.to_bool_var_array,
|
48
|
+
bound, strength)
|
49
|
+
end
|
50
|
+
return variable
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Describes a CompositeStub for the disjunction constraint, which constrain
|
55
|
+
# the disjunction of all boolean variables in an enumeration.
|
56
|
+
#
|
57
|
+
# == Example
|
58
|
+
#
|
59
|
+
# # The disjunction of all variables in +bool_enum+ must be true. I.e. at
|
60
|
+
# # least one of the boolean variables must take the value true.
|
61
|
+
# bool_enum.disjunction.must_be.true
|
62
|
+
#
|
63
|
+
# # The disjunction of all variables in +bool_enum+ must equal b1.
|
64
|
+
# bool_enum.conjunction.must == b1
|
65
|
+
#
|
66
|
+
# # The disjunction of all variables in +bool_enum+ must not equal b1 and
|
67
|
+
# # b2. It's reified it with +bool+ and selects the strength +domain+.
|
68
|
+
# bool_enum.disjunction.must_not.equal(b1 & b2, :reify => bool,
|
69
|
+
# :strength => :domain)
|
70
|
+
class DisjunctionStub < Gecode::Constraints::Bool::CompositeStub
|
71
|
+
def constrain_equal(variable, params, constrain)
|
72
|
+
enum, strength = @params.values_at(:lhs, :strength)
|
73
|
+
|
74
|
+
if variable.respond_to? :bind
|
75
|
+
bound = variable.bind
|
76
|
+
else
|
77
|
+
bound = variable
|
78
|
+
end
|
79
|
+
Gecode::Raw::bool_or(@model.active_space, enum.to_bool_var_array,
|
80
|
+
bound, strength)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Gecode
|
2
|
+
class FreeBoolVar
|
3
|
+
include Gecode::Constraints::LeftHandSideMethods
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
# Produces an expression for the lhs module.
|
8
|
+
def expression(params)
|
9
|
+
params.update(:lhs => self)
|
10
|
+
Constraints::Bool::Expression.new(@model, params)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# A module containing constraints that have int variables as left hand side
|
15
|
+
# (but not enumerations).
|
16
|
+
module Constraints::Bool
|
17
|
+
# Describes a boolean expression.
|
18
|
+
class Expression < Gecode::Constraints::Expression #:nodoc:
|
19
|
+
end
|
20
|
+
|
21
|
+
# A composite expression which is an bool expression with a left hand side
|
22
|
+
# resulting from a previous constraint.
|
23
|
+
class CompositeExpression < Gecode::Constraints::CompositeExpression #:nodoc:
|
24
|
+
# The block given should take three parameters. The first is the variable
|
25
|
+
# that should be the left hand side, if it's nil then a new one should be
|
26
|
+
# created. The second is the has of parameters. The block should return
|
27
|
+
# the variable used as left hand side.
|
28
|
+
def initialize(model, params, &block)
|
29
|
+
super(Expression, Gecode::FreeBoolVar, lambda{ model.bool_var }, model,
|
30
|
+
params, &block)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Override to also deal with constant booleans.
|
34
|
+
def true(options = {})
|
35
|
+
# We don't need any additional constraints.
|
36
|
+
@params.update Gecode::Constraints::Util.decode_options(options)
|
37
|
+
@model.add_interaction do
|
38
|
+
@constrain_equal_proc.call(!@params[:negate], @params)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Override to also deal with constant booleans.
|
43
|
+
def false(options = {})
|
44
|
+
# We don't need any additional constraints.
|
45
|
+
@params.update Gecode::Constraints::Util.decode_options(options)
|
46
|
+
@model.add_interaction do
|
47
|
+
@constrain_equal_proc.call(@params[:negate], @params)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Describes a stub that produces an int variable, which can then be used
|
53
|
+
# with the normal int variable constraints. An example would be the
|
54
|
+
# conjunction constraint.
|
55
|
+
#
|
56
|
+
# bools.conjunction.must == b1 | b2
|
57
|
+
#
|
58
|
+
# <tt>bools.conjunction</tt> produces a boolean variable which the
|
59
|
+
# constraint <tt>.must == b1 | b2</tt> is then applied to. In the above
|
60
|
+
# case two constraints (and one temporary variable) are required, but in
|
61
|
+
# the case of equality only one constraint is required.
|
62
|
+
#
|
63
|
+
# Whether a constraint involving a reification stub supports negation,
|
64
|
+
# reification, strength options and so on depends on the constraint on the
|
65
|
+
# right hand side.
|
66
|
+
class CompositeStub < Gecode::Constraints::CompositeStub
|
67
|
+
def initialize(model, params)
|
68
|
+
super(CompositeExpression, model, params)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
require 'gecoder/interface/constraints/bool/boolean'
|
75
|
+
require 'gecoder/interface/constraints/bool/linear'
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class Gecode::FreeIntVar
|
2
|
+
# Initiates an arithmetic absolute value constraint.
|
3
|
+
def abs
|
4
|
+
Gecode::Constraints::Int::Arithmetic::AbsExpressionStub.new(@model,
|
5
|
+
:lhs => self)
|
6
|
+
end
|
7
|
+
|
8
|
+
alias_method :pre_arith_mult, :* if instance_methods.include? '*'
|
9
|
+
|
10
|
+
# Begins a multiplication constraint involving the two int variable.
|
11
|
+
def *(var)
|
12
|
+
if var.kind_of? Gecode::FreeIntVar
|
13
|
+
Gecode::Constraints::Int::Arithmetic::MultExpressionStub.new(
|
14
|
+
@model, :lhs => self, :var => var)
|
15
|
+
else
|
16
|
+
pre_arith_mult(var) if respond_to? :pre_arith_mult
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# A module that gathers the classes and modules used by arithmetic constraints.
|
22
|
+
module Gecode::Constraints::Int::Arithmetic #:nodoc:
|
23
|
+
# Describes a CompositeStub for absolute value constraints, which constrain
|
24
|
+
# the absolute value of an integer variable.
|
25
|
+
#
|
26
|
+
# == Examples
|
27
|
+
#
|
28
|
+
# # The absolute value of +x+ must be less than 2.
|
29
|
+
# x.abs.must < 2
|
30
|
+
#
|
31
|
+
# # The absolute value of +x+ must be in the range 5..7, with +bool+ as
|
32
|
+
# # reification variable and +value+ as strength.
|
33
|
+
# x.abs.must_be.in(5..7, :reify => bool, :strength => :value)
|
34
|
+
class AbsExpressionStub < Gecode::Constraints::Int::CompositeStub
|
35
|
+
def constrain_equal(variable, params, constrain)
|
36
|
+
lhs, strength = @params.values_at(:lhs, :strength)
|
37
|
+
if constrain
|
38
|
+
bounds = [lhs.min.abs, lhs.max.abs]
|
39
|
+
variable.must_be.in bounds.min..bounds.max
|
40
|
+
end
|
41
|
+
|
42
|
+
Gecode::Raw::abs(@model.active_space, lhs.bind, variable.bind, strength)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Describes a CompositeStub for multiplication constraint, which constrain
|
47
|
+
# the value of the multiplication of two variables.
|
48
|
+
#
|
49
|
+
# == Examples
|
50
|
+
#
|
51
|
+
# # The value of +x*y+ must be equal to their sum.
|
52
|
+
# (x*y).must == x + y
|
53
|
+
#
|
54
|
+
# # The valye of +x*y+ must be less than 17, with +bool+ as reification
|
55
|
+
# # variable and +domain+ as strength.
|
56
|
+
# (x*y).must_be.less_than(17, :reify => bool, :strength => :domain)
|
57
|
+
class MultExpressionStub < Gecode::Constraints::Int::CompositeStub
|
58
|
+
def constrain_equal(variable, params, constrain)
|
59
|
+
lhs, lhs2, strength = @params.values_at(:lhs, :var, :strength)
|
60
|
+
if constrain
|
61
|
+
a_min = lhs.min; a_max = lhs.max
|
62
|
+
b_min = lhs2.min; b_max = lhs2.max
|
63
|
+
products = [a_min*b_min, a_min*b_max, a_max*b_min, a_max*b_max]
|
64
|
+
variable.must_be.in products.min..products.max
|
65
|
+
end
|
66
|
+
|
67
|
+
Gecode::Raw::mult(@model.active_space, lhs.bind, lhs2.bind,
|
68
|
+
variable.bind, strength)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Gecode::Constraints::Int
|
2
|
+
class Expression
|
3
|
+
# Creates a domain constraint using the specified domain.
|
4
|
+
def in(domain, options = {})
|
5
|
+
@params.update(Gecode::Constraints::Util.decode_options(options))
|
6
|
+
@params[:domain] = domain
|
7
|
+
if domain.kind_of? Range
|
8
|
+
@model.add_constraint Domain::RangeDomainConstraint.new(@model, @params)
|
9
|
+
elsif domain.kind_of?(Enumerable) and domain.all?{ |e| e.kind_of? Fixnum }
|
10
|
+
@model.add_constraint Domain::EnumDomainConstraint.new(@model,
|
11
|
+
@params)
|
12
|
+
else
|
13
|
+
raise TypeError, "Expected integer enumerable, got #{domain.class}."
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# A module that gathers the classes and modules used in domain constraints.
|
19
|
+
module Domain #:nodoc:
|
20
|
+
# Range domain constraints specify that an integer variable must be
|
21
|
+
# contained within a specified range of integers. Supports reification and
|
22
|
+
# negation.
|
23
|
+
#
|
24
|
+
# == Examples
|
25
|
+
#
|
26
|
+
# # +x+ must be in the range 1..10
|
27
|
+
# x.must_be.in 1..10
|
28
|
+
#
|
29
|
+
# # +x+ must not be in the range -5...5
|
30
|
+
# x.must_not_be.in -5...5
|
31
|
+
#
|
32
|
+
# # Specifies the above, but but reifies the constraint with the boolean
|
33
|
+
# # variable +bool+ and specified +value+ as strength.
|
34
|
+
# x.must_not_be.in(-5...5, :reify => bool, :strength => :value)
|
35
|
+
class RangeDomainConstraint < Gecode::Constraints::ReifiableConstraint
|
36
|
+
def post
|
37
|
+
var, domain, reif_var, strength = @params.values_at(:lhs, :domain,
|
38
|
+
:reif, :strength)
|
39
|
+
(params = []) << var.bind
|
40
|
+
params << domain.first << domain.last
|
41
|
+
params << reif_var.bind if reif_var.respond_to? :bind
|
42
|
+
params << strength
|
43
|
+
Gecode::Raw::dom(@model.active_space, *params)
|
44
|
+
end
|
45
|
+
negate_using_reification
|
46
|
+
end
|
47
|
+
|
48
|
+
# Enum domain constraints specify that an integer variable must be contained
|
49
|
+
# in an enumeration of integers. Supports reification and negation.
|
50
|
+
#
|
51
|
+
# == Examples
|
52
|
+
#
|
53
|
+
# # +x+ must be in the enumeration [3,5,7].
|
54
|
+
# x.must_be.in [3,5,7]
|
55
|
+
#
|
56
|
+
# # +x+ must not be in the enumeration [5,6,7,17].
|
57
|
+
# x.must_not_be.in [5,6,7,17]
|
58
|
+
#
|
59
|
+
# # Specifies the above, but but reifies the constraint with the boolean
|
60
|
+
# # variable +bool+ and specified +value+ as strength.
|
61
|
+
# x.must_not_be.in(-[5,6,7,17], :reify => bool, :strength => :value)
|
62
|
+
class EnumDomainConstraint < Gecode::Constraints::ReifiableConstraint
|
63
|
+
def post
|
64
|
+
space = @model.active_space
|
65
|
+
|
66
|
+
var, domain, reif_var, strength = @params.values_at(:lhs, :domain,
|
67
|
+
:reif, :strength)
|
68
|
+
|
69
|
+
(params = []) << var.bind
|
70
|
+
params << Gecode::Constraints::Util.constant_set_to_int_set(domain)
|
71
|
+
params << reif_var.bind if reif_var.respond_to? :bind
|
72
|
+
params << strength
|
73
|
+
Gecode::Raw::dom(space, *params)
|
74
|
+
end
|
75
|
+
negate_using_reification
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,295 @@
|
|
1
|
+
module Gecode
|
2
|
+
class FreeIntVar
|
3
|
+
# Creates a linear expression where the int variables are summed.
|
4
|
+
def +(var)
|
5
|
+
Gecode::Constraints::Int::Linear::ExpressionNode.new(self,
|
6
|
+
@model) + var
|
7
|
+
end
|
8
|
+
|
9
|
+
alias_method :pre_linear_mult, :* if instance_methods.include? '*'
|
10
|
+
|
11
|
+
# Creates a linear expression where the int variable is multiplied with
|
12
|
+
# a constant integer.
|
13
|
+
def *(int)
|
14
|
+
if int.kind_of? Fixnum
|
15
|
+
Gecode::Constraints::Int::Linear::ExpressionNode.new(self,
|
16
|
+
@model) * int
|
17
|
+
else
|
18
|
+
pre_linear_mult(int) if respond_to? :pre_linear_mult
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# Creates a linear expression where the specified variable is subtracted
|
23
|
+
# from this one.
|
24
|
+
def -(var)
|
25
|
+
Gecode::Constraints::Int::Linear::ExpressionNode.new(self,
|
26
|
+
@model) - var
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
module Constraints::Int
|
31
|
+
class Expression #:nodoc:
|
32
|
+
# Add some relation selection based on whether the expression is negated.
|
33
|
+
alias_method :pre_linear_initialize, :initialize
|
34
|
+
def initialize(model, params)
|
35
|
+
pre_linear_initialize(model, params)
|
36
|
+
unless params[:negate]
|
37
|
+
@method_relations = Constraints::Util::RELATION_TYPES
|
38
|
+
else
|
39
|
+
@method_relations = Constraints::Util::NEGATED_RELATION_TYPES
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Define the relation methods.
|
44
|
+
Constraints::Util::RELATION_TYPES.each_key do |name|
|
45
|
+
module_eval <<-"end_code"
|
46
|
+
def #{name}(expression, options = {})
|
47
|
+
relation = @method_relations[:#{name}]
|
48
|
+
@params.update(
|
49
|
+
Gecode::Constraints::Util.decode_options(options))
|
50
|
+
if self.simple_expression? and simple_expression?(expression)
|
51
|
+
# A relation constraint is enough.
|
52
|
+
add_relation_constraint(relation, expression)
|
53
|
+
else
|
54
|
+
add_linear_constraint(relation, expression)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end_code
|
58
|
+
end
|
59
|
+
alias_comparison_methods
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
# Checks whether the given expression is simple enough to be used in a
|
64
|
+
# simple relation constraint. Returns true if it is, false otherwise. If
|
65
|
+
# no expression is given then the this expression's left hand side is
|
66
|
+
# checked.
|
67
|
+
def simple_expression?(expression = nil)
|
68
|
+
if expression.nil?
|
69
|
+
simple_expression?(@params[:lhs])
|
70
|
+
else
|
71
|
+
expression.kind_of?(Gecode::FreeIntVar) or
|
72
|
+
expression.kind_of?(Gecode::FreeBoolVar) or
|
73
|
+
expression.kind_of?(Fixnum)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
private
|
78
|
+
|
79
|
+
# Places the linear constraint corresponding to the specified (integer)
|
80
|
+
# relation type (as specified by Gecode) in relation to the specifed
|
81
|
+
# expression.
|
82
|
+
#
|
83
|
+
# Raises TypeError if the element is of a type that doesn't allow a
|
84
|
+
# relation to be specified.
|
85
|
+
def add_linear_constraint(relation_type, right_hand_side)
|
86
|
+
# Bind parameters.
|
87
|
+
lhs = @params[:lhs]
|
88
|
+
if lhs.kind_of?(Gecode::FreeIntVar) or lhs.kind_of?(Gecode::FreeBoolVar)
|
89
|
+
lhs = lhs * 1 # Convert to Gecode::Raw::LinExp
|
90
|
+
end
|
91
|
+
if not (right_hand_side.respond_to? :to_minimodel_lin_exp or
|
92
|
+
right_hand_side.kind_of?(Gecode::FreeIntVar) or
|
93
|
+
right_hand_side.kind_of?(Gecode::FreeBoolVar) or
|
94
|
+
right_hand_side.kind_of?(Fixnum))
|
95
|
+
raise TypeError, 'Invalid right hand side of linear equation.'
|
96
|
+
end
|
97
|
+
|
98
|
+
@params.update(:relation_type => relation_type, :lhs => lhs,
|
99
|
+
:rhs => right_hand_side)
|
100
|
+
@model.add_constraint Linear::LinearConstraint.new(@model, @params)
|
101
|
+
end
|
102
|
+
|
103
|
+
# Places the relation constraint corresponding to the specified (integer)
|
104
|
+
# relation type (as specified by Gecode) in relation to the specifed
|
105
|
+
# element.
|
106
|
+
def add_relation_constraint(relation_type, element)
|
107
|
+
@model.add_constraint Linear::SimpleRelationConstraint.new(@model,
|
108
|
+
@params.update(:relation_type => relation_type, :element => element))
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# A module that gathers the classes and modules used in linear constraints.
|
114
|
+
module Constraints::Int::Linear #:nodoc:
|
115
|
+
# Linear constraints specify that an integer variable must have a linear
|
116
|
+
# equation containing variables must hold. The same relations and options
|
117
|
+
# used in +SimpleRelationConstraint+ can also be used for linear
|
118
|
+
# constraints.
|
119
|
+
#
|
120
|
+
# Boolean variables can also be used instead of integer variables. In that
|
121
|
+
# case a boolean variable assigned true is equal to 1 and a boolean variable
|
122
|
+
# assigned false is equal to 0. There is one exception: boolean variables
|
123
|
+
# can not be used alone as left hand side.
|
124
|
+
#
|
125
|
+
# Do not mix boolean and integer variables. Even if possible it's not
|
126
|
+
# supported, and might be removed in the future.
|
127
|
+
#
|
128
|
+
# == Examples
|
129
|
+
#
|
130
|
+
# # The sum of the int variables +x+ and +y+ must equal +z+ + 3.
|
131
|
+
# (x + y).must == z + 3
|
132
|
+
#
|
133
|
+
# # Another way of writing the above.
|
134
|
+
# z.must == x + y - 3
|
135
|
+
#
|
136
|
+
# # The inequality 10(x + y) > 3x must not hold.
|
137
|
+
# (x + y)*10.must_not > x*3
|
138
|
+
#
|
139
|
+
# # Specifies the above, but reifies the constraint with the boolean
|
140
|
+
# # variable +bool+ and gives it propagation strength +domain+.
|
141
|
+
# (x + y)*10.must_not_be.greater_than(x*3, :reify => bool, :strength => :domain)
|
142
|
+
class LinearConstraint < Gecode::Constraints::ReifiableConstraint
|
143
|
+
def post
|
144
|
+
lhs, rhs, relation_type, reif_var, strength = @params.values_at(:lhs,
|
145
|
+
:rhs, :relation_type, :reif, :strength)
|
146
|
+
reif_var = reif_var.bind if reif_var.respond_to? :bind
|
147
|
+
if rhs.respond_to? :to_minimodel_lin_exp
|
148
|
+
rhs = rhs.to_minimodel_lin_exp
|
149
|
+
elsif rhs.respond_to? :bind
|
150
|
+
rhs = rhs.bind * 1
|
151
|
+
end
|
152
|
+
|
153
|
+
final_exp = (lhs.to_minimodel_lin_exp - rhs)
|
154
|
+
if reif_var.nil?
|
155
|
+
final_exp.post(@model.active_space, relation_type, strength)
|
156
|
+
else
|
157
|
+
final_exp.post(@model.active_space, relation_type, reif_var)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
# Simple relation constraints specify that an integer variable must have a
|
163
|
+
# specified relation to a constant integer or another integer variable. The
|
164
|
+
# following relations are supported (the aliases of each relation are also
|
165
|
+
# listed).
|
166
|
+
#
|
167
|
+
# * <, lesser, lesser_than
|
168
|
+
# * >, greater, greater_than
|
169
|
+
# * >=, greater_or_equal, greater_than_or_equal_to
|
170
|
+
# * <=, less_or_equal, less_than_or_equal_to
|
171
|
+
# * ==, equal, equal_to
|
172
|
+
#
|
173
|
+
# Each can be negated by using +must_not+ instead of +must+.
|
174
|
+
#
|
175
|
+
# Two options (given as a hash) are available:
|
176
|
+
#
|
177
|
+
# [strength] Specifies the propagation strength of the constraint. Must be
|
178
|
+
# one of +value+, +bounds+, +domain+ and +default+. The
|
179
|
+
# strength generally progresses as +value+ -> +bounds+ ->
|
180
|
+
# +domain+ (+value+ being the weakest, but usually cheapest,
|
181
|
+
# while +domain+ is the strongest but usually costly).
|
182
|
+
# [reify] Specifies a boolean variable that should be used for
|
183
|
+
# reification (see +ReifiableConstraint+).
|
184
|
+
#
|
185
|
+
# == Examples
|
186
|
+
#
|
187
|
+
# # Int variable +x+ must not equal 0.
|
188
|
+
# x.must_not.equal(0)
|
189
|
+
#
|
190
|
+
# # Another way of writing the above.
|
191
|
+
# x.must_not == 0
|
192
|
+
#
|
193
|
+
# # +x+ must be strictly larger than +y+.
|
194
|
+
# x.must > y
|
195
|
+
#
|
196
|
+
# # Specifies the above, but reifies the constraint with the boolean
|
197
|
+
# # variable +bool+.
|
198
|
+
# x.must_be.greater_than(y, :reify => bool)
|
199
|
+
class SimpleRelationConstraint < Gecode::Constraints::ReifiableConstraint
|
200
|
+
def post
|
201
|
+
# Fetch the parameters to Gecode.
|
202
|
+
lhs, relation, rhs, reif_var, strength = @params.values_at(:lhs,
|
203
|
+
:relation_type, :element, :reif, :strength)
|
204
|
+
|
205
|
+
rhs = rhs.bind if rhs.respond_to? :bind
|
206
|
+
if reif_var.nil?
|
207
|
+
Gecode::Raw::rel(@model.active_space, lhs.bind, relation, rhs,
|
208
|
+
strength)
|
209
|
+
else
|
210
|
+
Gecode::Raw::rel(@model.active_space, lhs.bind, relation, rhs,
|
211
|
+
reif_var.bind, strength)
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
# Helper methods for linear expressions. Classes mixing in this module must
|
217
|
+
# have a method #model which gives the model the expression is operating in.
|
218
|
+
module Helper #:nodoc:
|
219
|
+
include Gecode::Constraints::LeftHandSideMethods
|
220
|
+
|
221
|
+
private
|
222
|
+
|
223
|
+
OPERATION_TYPES = [:+, :-, :*]
|
224
|
+
|
225
|
+
public
|
226
|
+
|
227
|
+
# Define methods for the available operations.
|
228
|
+
OPERATION_TYPES.each do |name|
|
229
|
+
module_eval <<-"end_code"
|
230
|
+
def #{name}(expression)
|
231
|
+
unless expression.kind_of? ExpressionTree
|
232
|
+
expression = ExpressionNode.new(expression)
|
233
|
+
end
|
234
|
+
ExpressionTree.new(self, expression, :#{name})
|
235
|
+
end
|
236
|
+
end_code
|
237
|
+
end
|
238
|
+
|
239
|
+
private
|
240
|
+
|
241
|
+
# Produces an expression for the lhs module.
|
242
|
+
def expression(params)
|
243
|
+
params.update(:lhs => self)
|
244
|
+
Gecode::Constraints::Int::Expression.new(model, params)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
# Describes a binary tree of expression nodes which together form a linear
|
249
|
+
# expression.
|
250
|
+
class ExpressionTree #:nodoc:
|
251
|
+
include Helper
|
252
|
+
|
253
|
+
# Constructs a new expression with the specified variable
|
254
|
+
def initialize(left_node, right_node, operation)
|
255
|
+
@left = left_node
|
256
|
+
@right = right_node
|
257
|
+
@operation = operation
|
258
|
+
end
|
259
|
+
|
260
|
+
# Converts the linear expression to an instance of
|
261
|
+
# Gecode::Raw::MiniModel::LinExpr
|
262
|
+
def to_minimodel_lin_exp
|
263
|
+
@left.to_minimodel_lin_exp.send(@operation, @right.to_minimodel_lin_exp)
|
264
|
+
end
|
265
|
+
|
266
|
+
# Fetches the space that the expression's variables is in.
|
267
|
+
def model
|
268
|
+
@left.model || @right.model
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
# Describes a single node in a linear expression.
|
273
|
+
class ExpressionNode #:nodoc:
|
274
|
+
include Helper
|
275
|
+
|
276
|
+
attr :model
|
277
|
+
|
278
|
+
def initialize(value, model = nil)
|
279
|
+
@value = value
|
280
|
+
@model = model
|
281
|
+
end
|
282
|
+
|
283
|
+
# Converts the linear expression to an instance of
|
284
|
+
# Gecode::Raw::MiniModel::LinExpr
|
285
|
+
def to_minimodel_lin_exp
|
286
|
+
expression = @value
|
287
|
+
if expression.respond_to? :bind
|
288
|
+
# Minimodel requires that we do this first.
|
289
|
+
expression = expression.bind * 1
|
290
|
+
end
|
291
|
+
expression
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|