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,126 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Guido Tack <tack@gecode.org>
|
4
|
+
*
|
5
|
+
* Copyright:
|
6
|
+
* Guido Tack, 2006
|
7
|
+
*
|
8
|
+
* Last modified:
|
9
|
+
* $Date: 2006-07-14 13:46:14 +0200 (Fri, 14 Jul 2006) $ by $Author: tack $
|
10
|
+
* $Revision: 3363 $
|
11
|
+
*
|
12
|
+
* This file is part of Gecode, the generic constraint
|
13
|
+
* development environment:
|
14
|
+
* http://www.gecode.org
|
15
|
+
*
|
16
|
+
* See the file "LICENSE" for information on usage and
|
17
|
+
* redistribution of this file, and for a
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
19
|
+
*
|
20
|
+
*/
|
21
|
+
|
22
|
+
namespace Gecode { namespace Iter { namespace Ranges { namespace Virt {
|
23
|
+
|
24
|
+
/**
|
25
|
+
* \brief Abstract base class for range iterators
|
26
|
+
*
|
27
|
+
* Requires \code #include "gecode/iter.hh" \endcode
|
28
|
+
* \ingroup FuncIterRangesVirt
|
29
|
+
*/
|
30
|
+
class Iterator {
|
31
|
+
public:
|
32
|
+
/// \name Iteration control
|
33
|
+
//@{
|
34
|
+
/// Move iterator to next range (if possible)
|
35
|
+
virtual void operator++(void) = 0;
|
36
|
+
/// Test whether iterator is still at a range or done
|
37
|
+
virtual bool operator()(void) = 0;
|
38
|
+
//@}
|
39
|
+
/// \name Range access
|
40
|
+
//@{
|
41
|
+
/// Return smallest value of range
|
42
|
+
virtual int min(void) const = 0;
|
43
|
+
/// Return largest value of range
|
44
|
+
virtual int max(void) const = 0;
|
45
|
+
/// Return width of range (distance between minimum and maximum)
|
46
|
+
virtual unsigned int width(void) const = 0;
|
47
|
+
//@}
|
48
|
+
|
49
|
+
/// Virtual destructor
|
50
|
+
virtual ~Iterator(void);
|
51
|
+
};
|
52
|
+
|
53
|
+
forceinline
|
54
|
+
Iterator::~Iterator(void) {}
|
55
|
+
|
56
|
+
/**
|
57
|
+
* \brief Adaptor class to virtualize any iterator
|
58
|
+
*
|
59
|
+
* Provides an iterator with virtual member functions for any template-based
|
60
|
+
* iterator.
|
61
|
+
*
|
62
|
+
* Requires \code #include "gecode/iter.hh" \endcode
|
63
|
+
* \ingroup FuncIterRangesVirt
|
64
|
+
*/
|
65
|
+
template <class I>
|
66
|
+
class RangesTemplate : public Iterator {
|
67
|
+
private:
|
68
|
+
/// The template-based iterator
|
69
|
+
I i;
|
70
|
+
public:
|
71
|
+
/// \name Constructors and initialization
|
72
|
+
//@{
|
73
|
+
/// Initialize with iterator \a i
|
74
|
+
RangesTemplate(I& i);
|
75
|
+
/// Initialize with iterator \a i
|
76
|
+
void init(I& i);
|
77
|
+
//@}
|
78
|
+
/// \name Iteration control
|
79
|
+
//@{
|
80
|
+
/// Move iterator to next range (if possible)
|
81
|
+
virtual void operator++(void);
|
82
|
+
/// Test whether iterator is still at a range or done
|
83
|
+
virtual bool operator()(void);
|
84
|
+
//@}
|
85
|
+
|
86
|
+
/// \name Range access
|
87
|
+
//@{
|
88
|
+
/// Return smallest value of range
|
89
|
+
virtual int min(void) const;
|
90
|
+
/// Return largest value of range
|
91
|
+
virtual int max(void) const;
|
92
|
+
/// Return width of range (distance between minimum and maximum)
|
93
|
+
virtual unsigned int width(void) const;
|
94
|
+
//@}
|
95
|
+
};
|
96
|
+
|
97
|
+
template <class I>
|
98
|
+
RangesTemplate<I>::RangesTemplate(I& i0) : i(i0) {}
|
99
|
+
|
100
|
+
template <class I>
|
101
|
+
void
|
102
|
+
RangesTemplate<I>::init(I& i0) { i=i0; }
|
103
|
+
|
104
|
+
template <class I>
|
105
|
+
bool
|
106
|
+
RangesTemplate<I>::operator()(void) { return i(); }
|
107
|
+
|
108
|
+
template <class I>
|
109
|
+
void
|
110
|
+
RangesTemplate<I>::operator++(void) { ++i; }
|
111
|
+
|
112
|
+
template <class I>
|
113
|
+
int
|
114
|
+
RangesTemplate<I>::min(void) const { return i.min(); }
|
115
|
+
|
116
|
+
template <class I>
|
117
|
+
int
|
118
|
+
RangesTemplate<I>::max(void) const { return i.max(); }
|
119
|
+
|
120
|
+
template <class I>
|
121
|
+
unsigned int
|
122
|
+
RangesTemplate<I>::width(void) const { return i.width(); }
|
123
|
+
|
124
|
+
}}}}
|
125
|
+
|
126
|
+
// STATISTICS: iter-any
|
@@ -0,0 +1,141 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
4
|
+
*
|
5
|
+
* Contributing authors:
|
6
|
+
* Guido Tack <tack@gecode.org>
|
7
|
+
*
|
8
|
+
* Copyright:
|
9
|
+
* Christian Schulte, 2004
|
10
|
+
* Guido Tack, 2004
|
11
|
+
*
|
12
|
+
* Last modified:
|
13
|
+
* $Date: 2006-08-24 10:39:08 +0200 (Thu, 24 Aug 2006) $ by $Author: tack $
|
14
|
+
* $Revision: 3558 $
|
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
|
+
#ifndef __GECODE_KERNEL_HH__
|
27
|
+
#define __GECODE_KERNEL_HH__
|
28
|
+
|
29
|
+
#include <cstddef>
|
30
|
+
#include <cstdlib>
|
31
|
+
#include <cstring>
|
32
|
+
#include <cassert>
|
33
|
+
|
34
|
+
#include "gecode/config.icc"
|
35
|
+
|
36
|
+
/*
|
37
|
+
* Support for DLLs under Windows
|
38
|
+
*
|
39
|
+
*/
|
40
|
+
|
41
|
+
#if !defined(GECODE_STATIC_LIBS) && \
|
42
|
+
(defined(__CYGWIN__) || defined(__MINGW32__) || defined(_MSC_VER))
|
43
|
+
|
44
|
+
#ifdef GECODE_BUILD_KERNEL
|
45
|
+
#define GECODE_KERNEL_EXPORT __declspec( dllexport )
|
46
|
+
#else
|
47
|
+
#define GECODE_KERNEL_EXPORT __declspec( dllimport )
|
48
|
+
#endif
|
49
|
+
|
50
|
+
#else
|
51
|
+
|
52
|
+
#ifdef GCC_HASCLASSVISIBILITY
|
53
|
+
|
54
|
+
#define GECODE_KERNEL_EXPORT __attribute__ ((visibility("default")))
|
55
|
+
|
56
|
+
#else
|
57
|
+
|
58
|
+
#define GECODE_KERNEL_EXPORT
|
59
|
+
|
60
|
+
#endif
|
61
|
+
#endif
|
62
|
+
|
63
|
+
/**
|
64
|
+
* \namespace Gecode
|
65
|
+
* \brief Gecode toplevel namespace
|
66
|
+
*
|
67
|
+
* The Gecode namespace contains nested namespaces for
|
68
|
+
* the various submodules (for example Int for the
|
69
|
+
* definition of integer propagator classes). Functionality
|
70
|
+
* that is used for interfacing (search engines, variables,
|
71
|
+
* and so on) or belongs to the %Gecode %Kernel is contained
|
72
|
+
* directly in the Gecode namespace.
|
73
|
+
*
|
74
|
+
*/
|
75
|
+
|
76
|
+
/*
|
77
|
+
* General exceptions and kernel exceptions
|
78
|
+
*
|
79
|
+
*/
|
80
|
+
|
81
|
+
#include "gecode/kernel/exception.icc"
|
82
|
+
|
83
|
+
|
84
|
+
|
85
|
+
/*
|
86
|
+
* Basic kernel services
|
87
|
+
*
|
88
|
+
*/
|
89
|
+
|
90
|
+
#include "gecode/kernel/memory.icc"
|
91
|
+
#include "gecode/kernel/memory-manager.icc"
|
92
|
+
|
93
|
+
|
94
|
+
/*
|
95
|
+
* Macros for checking failure
|
96
|
+
*
|
97
|
+
*/
|
98
|
+
|
99
|
+
|
100
|
+
#include "gecode/kernel/macros.icc"
|
101
|
+
|
102
|
+
/*
|
103
|
+
* Gecode kernel
|
104
|
+
*
|
105
|
+
*/
|
106
|
+
|
107
|
+
#include "gecode/kernel/core.icc"
|
108
|
+
#include "gecode/kernel/modevent.icc"
|
109
|
+
|
110
|
+
|
111
|
+
/*
|
112
|
+
* Variable views and testing for shared variables
|
113
|
+
*
|
114
|
+
*/
|
115
|
+
|
116
|
+
#include "gecode/kernel/view.icc"
|
117
|
+
|
118
|
+
|
119
|
+
|
120
|
+
/*
|
121
|
+
* Variable and argument arrays
|
122
|
+
*
|
123
|
+
*/
|
124
|
+
|
125
|
+
#include "gecode/kernel/array.icc"
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
/*
|
131
|
+
* Common propagator and branching patterns
|
132
|
+
*
|
133
|
+
*/
|
134
|
+
|
135
|
+
#include "gecode/kernel/propagator.icc"
|
136
|
+
#include "gecode/kernel/branching.icc"
|
137
|
+
|
138
|
+
#endif
|
139
|
+
|
140
|
+
|
141
|
+
// STATISTICS: kernel-other
|
@@ -0,0 +1,954 @@
|
|
1
|
+
/*
|
2
|
+
* Main authors:
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
4
|
+
* Guido Tack <tack@gecode.org>
|
5
|
+
*
|
6
|
+
* Copyright:
|
7
|
+
* Christian Schulte, 2003
|
8
|
+
* Guido Tack, 2004
|
9
|
+
*
|
10
|
+
* Last modified:
|
11
|
+
* $Date: 2006-10-10 20:13:50 +0200 (Tue, 10 Oct 2006) $ by $Author: tack $
|
12
|
+
* $Revision: 3741 $
|
13
|
+
*
|
14
|
+
* This file is part of Gecode, the generic constraint
|
15
|
+
* development environment:
|
16
|
+
* http://www.gecode.org
|
17
|
+
*
|
18
|
+
* See the file "LICENSE" for information on usage and
|
19
|
+
* redistribution of this file, and for a
|
20
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
21
|
+
*
|
22
|
+
*/
|
23
|
+
|
24
|
+
#include <cstdarg>
|
25
|
+
#include "gecode/support/sort.hh"
|
26
|
+
|
27
|
+
namespace Gecode {
|
28
|
+
|
29
|
+
template <class Var> class VarArray;
|
30
|
+
template <class Var> class VarArgArray;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* \brief %Variable arrays
|
34
|
+
*
|
35
|
+
* %Variable arrays store variables. They are typically used
|
36
|
+
* for storing the variables being part of a solution.
|
37
|
+
*
|
38
|
+
* Never use them for temporary purposes, use argument arrays
|
39
|
+
* instead.
|
40
|
+
* \ingroup TaskVar
|
41
|
+
*/
|
42
|
+
template <class Var>
|
43
|
+
class VarArray {
|
44
|
+
protected:
|
45
|
+
/// Number of variables (size)
|
46
|
+
int n;
|
47
|
+
/// Array of variables
|
48
|
+
Var* x;
|
49
|
+
public:
|
50
|
+
/// \name Constructors and initialization
|
51
|
+
//@{
|
52
|
+
/// Default constructor (array of size 0)
|
53
|
+
VarArray(void);
|
54
|
+
/// Allocate array with \a m variables
|
55
|
+
VarArray(Space*, int m);
|
56
|
+
/// Initialize from variable argument array \a a (copy elements)
|
57
|
+
VarArray(Space*,const VarArgArray<Var>&);
|
58
|
+
/// Initialize from variable array \a a (share elements)
|
59
|
+
VarArray(const VarArray<Var>& a);
|
60
|
+
/// Initialize from variable array \a a (share elements)
|
61
|
+
const VarArray<Var>& operator=(const VarArray<Var>& a);
|
62
|
+
//@}
|
63
|
+
|
64
|
+
/// \name Array size
|
65
|
+
//@{
|
66
|
+
/// Return size of array (number of elements)
|
67
|
+
int size(void) const;
|
68
|
+
//@}
|
69
|
+
|
70
|
+
/// \name Array elements
|
71
|
+
//@{
|
72
|
+
/// Return variable at position \a i
|
73
|
+
Var& operator[](int i);
|
74
|
+
/// Return variable at position \a i
|
75
|
+
const Var& operator[](int i) const;
|
76
|
+
//@}
|
77
|
+
|
78
|
+
/// \name Cloning
|
79
|
+
//@{
|
80
|
+
/**
|
81
|
+
* \brief Update array to be a clone of array \a a
|
82
|
+
*
|
83
|
+
* If \a share is true, sharing is retained for all shared
|
84
|
+
* data structures. Otherwise, for each of them an independent
|
85
|
+
* copy is created.
|
86
|
+
*/
|
87
|
+
void update(Space*, bool share, VarArray<Var>& a);
|
88
|
+
//@}
|
89
|
+
private:
|
90
|
+
static void* operator new(size_t);
|
91
|
+
static void operator delete(void*,size_t);
|
92
|
+
};
|
93
|
+
|
94
|
+
|
95
|
+
/**
|
96
|
+
* \brief View arrays
|
97
|
+
*
|
98
|
+
* View arrays store views. They are typically used for storing the
|
99
|
+
* views with which propagators and branchings compute.
|
100
|
+
* \ingroup TaskActor
|
101
|
+
*/
|
102
|
+
template <class View>
|
103
|
+
class ViewArray {
|
104
|
+
private:
|
105
|
+
/// Number of views (size)
|
106
|
+
int n;
|
107
|
+
/// Views
|
108
|
+
View* x;
|
109
|
+
/// Sort order for views
|
110
|
+
class ViewLess {
|
111
|
+
public:
|
112
|
+
bool operator()(const View&, const View&);
|
113
|
+
};
|
114
|
+
/// Sort \a n views \a x according to \a ViewLess
|
115
|
+
static void sort(View* x, int n);
|
116
|
+
public:
|
117
|
+
/// \name Constructors and initialization
|
118
|
+
//@{
|
119
|
+
/// Default constructor (array of size 0)
|
120
|
+
ViewArray(void);
|
121
|
+
/// Allocate array with \a m variables
|
122
|
+
ViewArray(Space*, int m);
|
123
|
+
/// Initialize from view array \a a (share elements)
|
124
|
+
ViewArray(const ViewArray<View>& a);
|
125
|
+
/// Initialize from view array \a a (copy elements)
|
126
|
+
ViewArray(Space*,const ViewArray<View>& a);
|
127
|
+
/// Initialize from view array \a a (share elements)
|
128
|
+
const ViewArray<View>& operator=(const ViewArray<View>& a);
|
129
|
+
/**
|
130
|
+
* \brief Initialize from variable argument array \a a (copy elements)
|
131
|
+
*
|
132
|
+
* Note that the view type \a View must provide a constructor
|
133
|
+
* for the associated \a Var type.
|
134
|
+
*/
|
135
|
+
template <class Var>
|
136
|
+
ViewArray(Space* home, const VarArgArray<Var>& a)
|
137
|
+
: n(a.size()) {
|
138
|
+
// This may not be in the icc file (to satisfy the MS compiler)
|
139
|
+
if (n>0) {
|
140
|
+
x = static_cast<View*>(home->alloc(sizeof(View)*n));
|
141
|
+
for (int i = n; i--; )
|
142
|
+
x[i] = a[i];
|
143
|
+
} else {
|
144
|
+
x = NULL;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
//@}
|
148
|
+
|
149
|
+
/// \name Array size
|
150
|
+
//@{
|
151
|
+
/// Return size of array (number of elements)
|
152
|
+
int size(void) const;
|
153
|
+
/// Decrease size of array (number of elements)
|
154
|
+
void size(int n);
|
155
|
+
//@}
|
156
|
+
|
157
|
+
/// \name Array elements
|
158
|
+
//@{
|
159
|
+
/// Return view at position \a i
|
160
|
+
View& operator[](int i);
|
161
|
+
/// Return view at position \a i
|
162
|
+
const View& operator[](int i) const;
|
163
|
+
//@}
|
164
|
+
|
165
|
+
/// \name Dependencies
|
166
|
+
//@{
|
167
|
+
/**
|
168
|
+
* \brief Subscribe propagator \a p with propagation condition \a pc to variable
|
169
|
+
*
|
170
|
+
* In case \a process is false, the propagator is just subscribed but
|
171
|
+
* not processed for execution (this must be used when creating
|
172
|
+
* subscriptions during propagation).
|
173
|
+
*/
|
174
|
+
void subscribe(Space* home, Propagator* p, PropCond pc, bool process=true);
|
175
|
+
/// Cancel subscription of propagator \a p with propagation condition \a pc to all views
|
176
|
+
void cancel(Space* home, Propagator* p, PropCond pc);
|
177
|
+
//@}
|
178
|
+
|
179
|
+
/// \name Cloning
|
180
|
+
//@{
|
181
|
+
/**
|
182
|
+
* \brief Update array to be a clone of array \a a
|
183
|
+
*
|
184
|
+
* If \a share is true, sharing is retained for all shared
|
185
|
+
* data structures. Otherwise, for each of them an independent
|
186
|
+
* copy is created.
|
187
|
+
*/
|
188
|
+
void update(Space*, bool share, ViewArray<View>& a);
|
189
|
+
//@}
|
190
|
+
|
191
|
+
|
192
|
+
/// \name Moving elements
|
193
|
+
//@{
|
194
|
+
/// Move assigned view from position 0 to position \a i (shift elements to the left)
|
195
|
+
void move_fst(int i);
|
196
|
+
/// Move assigned view from position \c size()-1 to position \a i (truncate array by one)
|
197
|
+
void move_lst(int i);
|
198
|
+
/** \brief Move view from position 0 to position \a i (shift elements to the left)
|
199
|
+
*
|
200
|
+
* Before moving, cancel subscription of propagator \a p with
|
201
|
+
* propagation condition \a pc to view at position \a i.
|
202
|
+
*/
|
203
|
+
void move_fst(int i, Space* home, Propagator* p, PropCond pc);
|
204
|
+
/** \brief Move view from position \c size()-1 to position \a i (truncate array by one)
|
205
|
+
*
|
206
|
+
* Before moving, cancel subscription of propagator \a p with
|
207
|
+
* propagation condition \a pc to view at position \a i.
|
208
|
+
*/
|
209
|
+
void move_lst(int i, Space* home, Propagator* p, PropCond pc);
|
210
|
+
//@}
|
211
|
+
|
212
|
+
/// \name Dropping elements
|
213
|
+
//@{
|
214
|
+
/// Drop assigned views from positions 0 to \a i-1 from array
|
215
|
+
void drop_fst(int i);
|
216
|
+
/// Drop assigned views from positions \a i+1 to \c size()-1 from array
|
217
|
+
void drop_lst(int i);
|
218
|
+
/** \brief Drop views from positions 0 to \a i-1 from array
|
219
|
+
*
|
220
|
+
* Before moving, cancel subscription of propagator \a p with
|
221
|
+
* propagation condition \a pc to views at positions 0 to \a i-1.
|
222
|
+
*/
|
223
|
+
void drop_fst(int i, Space* home, Propagator* p, PropCond pc);
|
224
|
+
/** \brief Drop assigned views from positions \a i+1 to \c size()-1 from array
|
225
|
+
*
|
226
|
+
* Before moving, cancel subscription of propagator \a p with
|
227
|
+
* propagation condition \a pc to views at positions \a i+1 to
|
228
|
+
* \c size()-1.
|
229
|
+
*/
|
230
|
+
void drop_lst(int i, Space* home, Propagator* p, PropCond pc);
|
231
|
+
//@}
|
232
|
+
|
233
|
+
/// \name View equality
|
234
|
+
//@{
|
235
|
+
/// Test whether array has same views
|
236
|
+
bool same(void) const;
|
237
|
+
/// Test whether array contains a view being the same as \a y
|
238
|
+
bool same(const View& y) const;
|
239
|
+
/// Remove all duplicate views from array (changes element order)
|
240
|
+
void unique(void);
|
241
|
+
//@}
|
242
|
+
|
243
|
+
/// \name View sharing
|
244
|
+
//@{
|
245
|
+
/// Test whether array has shared views
|
246
|
+
bool shared(void) const;
|
247
|
+
/// Test whether array contains view shared with \a y
|
248
|
+
bool shared(const View& y) const;
|
249
|
+
//@}
|
250
|
+
|
251
|
+
private:
|
252
|
+
static void* operator new(size_t);
|
253
|
+
static void operator delete(void*,size_t);
|
254
|
+
};
|
255
|
+
|
256
|
+
/**
|
257
|
+
* \brief Base-class for argument arrays
|
258
|
+
*
|
259
|
+
* Argument arrays are used as convenient mechanism of passing arguments
|
260
|
+
* when calling functions as they combine both the size and the elements
|
261
|
+
* of an array. For a small number of elements, memory is allocated by
|
262
|
+
* creating an argument array object. Otherwise the memory is allocated
|
263
|
+
* from the heap.
|
264
|
+
*
|
265
|
+
* This base-class is not to be used directly, use PrimArgArray for
|
266
|
+
* argument arrays of primitive types and VarArgArray for argument
|
267
|
+
* arrays storing variables.
|
268
|
+
*/
|
269
|
+
template <class T>
|
270
|
+
class ArgArrayBase {
|
271
|
+
protected:
|
272
|
+
/// Number of elements
|
273
|
+
int n;
|
274
|
+
/// Element array
|
275
|
+
T* a;
|
276
|
+
/// How much elements are possible inside array
|
277
|
+
static const int onstack_size = 16;
|
278
|
+
/// In-array storage for elements
|
279
|
+
T onstack[onstack_size];
|
280
|
+
/// Allocate memory for \a n elements
|
281
|
+
T* allocate(int n);
|
282
|
+
public:
|
283
|
+
/// \name Constructors and initialization
|
284
|
+
//@{
|
285
|
+
/// Allocate array with \a n elements
|
286
|
+
ArgArrayBase(int n);
|
287
|
+
/// Initialize from argument array \a a (copy elements)
|
288
|
+
ArgArrayBase(const ArgArrayBase<T>& a);
|
289
|
+
/// Initialize from view array \a a (copy elements)
|
290
|
+
const ArgArrayBase<T>& operator=(const ArgArrayBase<T>& a);
|
291
|
+
//@}
|
292
|
+
|
293
|
+
/// \name Array size
|
294
|
+
//@{
|
295
|
+
/// Return size of array (number of elements)
|
296
|
+
int size(void) const;
|
297
|
+
//@}
|
298
|
+
|
299
|
+
/// \name Array elements
|
300
|
+
//@{
|
301
|
+
/// Return element at position \a i
|
302
|
+
T& operator[](int i);
|
303
|
+
/// Return element at position \a i
|
304
|
+
const T& operator[](int i) const;
|
305
|
+
//@}
|
306
|
+
|
307
|
+
/// \name Destructor
|
308
|
+
//@{
|
309
|
+
/// Destructor
|
310
|
+
~ArgArrayBase(void);
|
311
|
+
//@}
|
312
|
+
private:
|
313
|
+
static void* operator new(size_t);
|
314
|
+
static void operator delete(void*,size_t);
|
315
|
+
};
|
316
|
+
|
317
|
+
|
318
|
+
/**
|
319
|
+
* \brief Argument array for primtive types
|
320
|
+
*
|
321
|
+
* Argument arrays are used as convenient mechanism of passing arguments
|
322
|
+
* when calling functions as they combine both the size and the elements
|
323
|
+
* of an array. For a small number of elements, memory is allocated by
|
324
|
+
* creating an argument array object. Otherwise the memory is allocated
|
325
|
+
* from the heap.
|
326
|
+
*
|
327
|
+
* \ingroup TaskVar
|
328
|
+
*/
|
329
|
+
template <class T>
|
330
|
+
class PrimArgArray : public ArgArrayBase<T> {
|
331
|
+
protected:
|
332
|
+
using ArgArrayBase<T>::a;
|
333
|
+
public:
|
334
|
+
using ArgArrayBase<T>::size;
|
335
|
+
/// \name Constructors and initialization
|
336
|
+
//@{
|
337
|
+
/// Allocate array with \a n elements
|
338
|
+
PrimArgArray(int n);
|
339
|
+
/// Allocate array with \a n elements and initialize with \a e0, ...
|
340
|
+
PrimArgArray(int n, T e0, ...);
|
341
|
+
/// Allocate array with \a n elements and initialize with elements from array \a e
|
342
|
+
PrimArgArray(int n, const T* e);
|
343
|
+
/// Initialize from primitive argument array \a a (copy elements)
|
344
|
+
PrimArgArray(const PrimArgArray<T>& a);
|
345
|
+
//@}
|
346
|
+
};
|
347
|
+
|
348
|
+
/**
|
349
|
+
* \brief Argument array for variables
|
350
|
+
*
|
351
|
+
* Argument arrays are used as convenient mechanism of passing arguments
|
352
|
+
* when calling functions as they combine both the size and the elements
|
353
|
+
* of an array. For a small number of elements, memory is allocated by
|
354
|
+
* creating an argument array object. Otherwise the memory is allocated
|
355
|
+
* from the heap.
|
356
|
+
*
|
357
|
+
* \ingroup TaskVar
|
358
|
+
*/
|
359
|
+
template <class Var>
|
360
|
+
class VarArgArray : public ArgArrayBase<Var> {
|
361
|
+
protected:
|
362
|
+
using ArgArrayBase<Var>::a;
|
363
|
+
using ArgArrayBase<Var>::n;
|
364
|
+
/// Sort order for variables
|
365
|
+
class VarLess {
|
366
|
+
public:
|
367
|
+
bool operator()(const Var&, const Var&);
|
368
|
+
};
|
369
|
+
public:
|
370
|
+
using ArgArrayBase<Var>::size;
|
371
|
+
/// \name Constructors and initialization
|
372
|
+
//@{
|
373
|
+
/// Allocate array with \a n elements
|
374
|
+
VarArgArray(int n);
|
375
|
+
/// Initialize from variable argument array \a a (copy elements)
|
376
|
+
VarArgArray(const VarArgArray<Var>& a);
|
377
|
+
/// Initialize from variable array \a a (copy elements)
|
378
|
+
VarArgArray(const VarArray<Var>& a);
|
379
|
+
//@}
|
380
|
+
/// \name Variable equality
|
381
|
+
//@{
|
382
|
+
/// Test whether array contains same variable multiply
|
383
|
+
bool same(void) const;
|
384
|
+
/// Test whether array contains variable \a y
|
385
|
+
bool same(const Var& y) const;
|
386
|
+
/// Test whether all elements from array and \a y contains same variable multiply
|
387
|
+
bool same(const VarArgArray<Var>& y) const;
|
388
|
+
//@}
|
389
|
+
};
|
390
|
+
|
391
|
+
/** \brief Traits of arrays in Gecode
|
392
|
+
*
|
393
|
+
* This class collects the traits of an array in Gecode.
|
394
|
+
* The traits used are the following.
|
395
|
+
* - <code>typedef Type storage_type</code> where \c Type is the type
|
396
|
+
* of an appropriate storage type for this array.
|
397
|
+
* - <code>typedef Type value_type</code> where \c Type is the type
|
398
|
+
* of the elements of this array.
|
399
|
+
* - <code>typedef Type args_type</code> where \c Type is the type
|
400
|
+
* of the appropriate Args-array type (e.g., \c BoolVarArgs if \c A is
|
401
|
+
* \c BoolVarArray).
|
402
|
+
*/
|
403
|
+
template <class A>
|
404
|
+
class ArrayTraits {};
|
405
|
+
|
406
|
+
/*
|
407
|
+
* Implementation
|
408
|
+
*
|
409
|
+
*/
|
410
|
+
|
411
|
+
/*
|
412
|
+
* Variable arrays
|
413
|
+
*
|
414
|
+
*/
|
415
|
+
|
416
|
+
template <class Var>
|
417
|
+
forceinline
|
418
|
+
VarArray<Var>::VarArray(void) : n(0), x(NULL) {}
|
419
|
+
|
420
|
+
template <class Var>
|
421
|
+
forceinline
|
422
|
+
VarArray<Var>::VarArray(Space* home, int n0)
|
423
|
+
: n(n0) {
|
424
|
+
x = (n>0) ? static_cast<Var*>(home->alloc(sizeof(Var)*n)) : NULL;
|
425
|
+
}
|
426
|
+
|
427
|
+
template <class Var>
|
428
|
+
forceinline
|
429
|
+
VarArray<Var>::VarArray(const VarArray<Var>& a) {
|
430
|
+
n = a.n; x = a.x;
|
431
|
+
}
|
432
|
+
|
433
|
+
template <class Var>
|
434
|
+
forceinline const VarArray<Var>&
|
435
|
+
VarArray<Var>::operator=(const VarArray<Var>& a) {
|
436
|
+
n = a.n; x = a.x;
|
437
|
+
return *this;
|
438
|
+
}
|
439
|
+
|
440
|
+
template <class Var>
|
441
|
+
forceinline int
|
442
|
+
VarArray<Var>::size(void) const {
|
443
|
+
return n;
|
444
|
+
}
|
445
|
+
|
446
|
+
template <class Var>
|
447
|
+
forceinline Var&
|
448
|
+
VarArray<Var>::operator[](int i) {
|
449
|
+
assert((i >= 0) && (i < size()));
|
450
|
+
return x[i];
|
451
|
+
}
|
452
|
+
|
453
|
+
template <class Var>
|
454
|
+
forceinline const Var&
|
455
|
+
VarArray<Var>::operator[](int i) const {
|
456
|
+
assert((i >= 0) && (i < size()));
|
457
|
+
return x[i];
|
458
|
+
}
|
459
|
+
|
460
|
+
template <class Var>
|
461
|
+
forceinline void
|
462
|
+
VarArray<Var>::update(Space* home, bool share, VarArray<Var>& a) {
|
463
|
+
n = a.n;
|
464
|
+
if (n > 0) {
|
465
|
+
x = static_cast<Var*>(home->alloc(sizeof(Var)*n));
|
466
|
+
for (int i = n; i--; )
|
467
|
+
x[i].update(home, share, a.x[i]);
|
468
|
+
} else {
|
469
|
+
x = NULL;
|
470
|
+
}
|
471
|
+
}
|
472
|
+
|
473
|
+
template <class Var>
|
474
|
+
void*
|
475
|
+
VarArray<Var>::operator new(size_t) {
|
476
|
+
return NULL;
|
477
|
+
}
|
478
|
+
|
479
|
+
template <class Var>
|
480
|
+
void
|
481
|
+
VarArray<Var>::operator delete(void*,size_t) {
|
482
|
+
}
|
483
|
+
|
484
|
+
/*
|
485
|
+
* View arrays
|
486
|
+
*
|
487
|
+
*/
|
488
|
+
|
489
|
+
template <class View>
|
490
|
+
forceinline
|
491
|
+
ViewArray<View>::ViewArray(void) : n(0), x(NULL) {}
|
492
|
+
|
493
|
+
template <class View>
|
494
|
+
forceinline
|
495
|
+
ViewArray<View>::ViewArray(Space* home, int n0)
|
496
|
+
: n(n0) {
|
497
|
+
x = (n>0) ? static_cast<View*>(home->alloc(sizeof(View)*n)) : NULL;
|
498
|
+
}
|
499
|
+
|
500
|
+
template <class View>
|
501
|
+
ViewArray<View>::ViewArray(Space* home, const ViewArray<View>& a)
|
502
|
+
: n(a.size()) {
|
503
|
+
if (n>0) {
|
504
|
+
x = static_cast<View*>(home->alloc(sizeof(View)*n));
|
505
|
+
for (int i = n; i--; )
|
506
|
+
x[i] = a[i];
|
507
|
+
} else {
|
508
|
+
x = NULL;
|
509
|
+
}
|
510
|
+
}
|
511
|
+
|
512
|
+
template <class View>
|
513
|
+
forceinline
|
514
|
+
ViewArray<View>::ViewArray(const ViewArray<View>& a)
|
515
|
+
: n(a.n), x(a.x) {}
|
516
|
+
|
517
|
+
template <class View>
|
518
|
+
forceinline const ViewArray<View>&
|
519
|
+
ViewArray<View>::operator=(const ViewArray<View>& a) {
|
520
|
+
n = a.n; x = a.x;
|
521
|
+
return *this;
|
522
|
+
}
|
523
|
+
|
524
|
+
template <class View>
|
525
|
+
forceinline int
|
526
|
+
ViewArray<View>::size(void) const {
|
527
|
+
return n;
|
528
|
+
}
|
529
|
+
|
530
|
+
template <class View>
|
531
|
+
forceinline void
|
532
|
+
ViewArray<View>::size(int n0) {
|
533
|
+
n = n0;
|
534
|
+
}
|
535
|
+
|
536
|
+
template <class View>
|
537
|
+
forceinline View&
|
538
|
+
ViewArray<View>::operator[](int i) {
|
539
|
+
assert((i >= 0) && (i < size()));
|
540
|
+
return x[i];
|
541
|
+
}
|
542
|
+
|
543
|
+
template <class View>
|
544
|
+
forceinline const View&
|
545
|
+
ViewArray<View>::operator[](int i) const {
|
546
|
+
assert((i >= 0) && (i < size()));
|
547
|
+
return x[i];
|
548
|
+
}
|
549
|
+
|
550
|
+
template <class View>
|
551
|
+
forceinline void
|
552
|
+
ViewArray<View>::move_fst(int i) {
|
553
|
+
// move x[0] to x[i]
|
554
|
+
assert(x[i].assigned());
|
555
|
+
x[i]=x[0]; x++; n--;
|
556
|
+
}
|
557
|
+
|
558
|
+
template <class View>
|
559
|
+
forceinline void
|
560
|
+
ViewArray<View>::move_lst(int i) {
|
561
|
+
// move x[n-1] to x[i]
|
562
|
+
assert(x[i].assigned());
|
563
|
+
n--; x[i]=x[n];
|
564
|
+
}
|
565
|
+
|
566
|
+
template <class View>
|
567
|
+
forceinline void
|
568
|
+
ViewArray<View>::drop_fst(int i) {
|
569
|
+
// Drop elements from 0..i-1
|
570
|
+
assert(i>=0);
|
571
|
+
x += i; n -= i;
|
572
|
+
}
|
573
|
+
|
574
|
+
template <class View>
|
575
|
+
forceinline void
|
576
|
+
ViewArray<View>::drop_lst(int i) {
|
577
|
+
// Drop elements from i+1..n-1
|
578
|
+
assert(i<n);
|
579
|
+
n = i+1;
|
580
|
+
}
|
581
|
+
|
582
|
+
template <class View>
|
583
|
+
forceinline void
|
584
|
+
ViewArray<View>::move_fst(int i, Space* home, Propagator* p, PropCond pc) {
|
585
|
+
// Move x[0] to x[i]
|
586
|
+
x[i].cancel(home,p,pc);
|
587
|
+
x[i]=x[0]; x++; n--;
|
588
|
+
}
|
589
|
+
|
590
|
+
template <class View>
|
591
|
+
forceinline void
|
592
|
+
ViewArray<View>::move_lst(int i, Space* home, Propagator* p, PropCond pc) {
|
593
|
+
// Move x[n-1] to x[i]
|
594
|
+
x[i].cancel(home,p,pc);
|
595
|
+
n--; x[i]=x[n];
|
596
|
+
}
|
597
|
+
|
598
|
+
template <class View>
|
599
|
+
void
|
600
|
+
ViewArray<View>::drop_fst(int i, Space* home, Propagator* p, PropCond pc) {
|
601
|
+
// Drop elements from 0..i-1
|
602
|
+
assert(i>=0);
|
603
|
+
for (int j=i; j--; )
|
604
|
+
x[j].cancel(home,p,pc);
|
605
|
+
x += i; n -= i;
|
606
|
+
}
|
607
|
+
|
608
|
+
template <class View>
|
609
|
+
void
|
610
|
+
ViewArray<View>::drop_lst(int i, Space* home, Propagator* p, PropCond pc) {
|
611
|
+
// Drop elements from i+1..n-1
|
612
|
+
assert(i<n);
|
613
|
+
for (int j=i+1; j<n; j++)
|
614
|
+
x[j].cancel(home,p,pc);
|
615
|
+
n = i+1;
|
616
|
+
}
|
617
|
+
|
618
|
+
template <class View>
|
619
|
+
void
|
620
|
+
ViewArray<View>::update(Space* home, bool share, ViewArray<View>& y) {
|
621
|
+
n = y.n;
|
622
|
+
if (n > 0) {
|
623
|
+
x = static_cast<View*>(home->alloc(sizeof(View)*n));
|
624
|
+
for (int i = n; i--; )
|
625
|
+
x[i].update(home, share, y.x[i]);
|
626
|
+
} else {
|
627
|
+
x = NULL;
|
628
|
+
}
|
629
|
+
}
|
630
|
+
|
631
|
+
template <class View>
|
632
|
+
void
|
633
|
+
ViewArray<View>::subscribe(Space* home, Propagator* p, PropCond pc,
|
634
|
+
bool process) {
|
635
|
+
for (int i = n; i--; )
|
636
|
+
x[i].subscribe(home,p,pc,process);
|
637
|
+
}
|
638
|
+
|
639
|
+
template <class View>
|
640
|
+
void
|
641
|
+
ViewArray<View>::cancel(Space* home, Propagator* p, PropCond pc) {
|
642
|
+
for (int i = n; i--; )
|
643
|
+
x[i].cancel(home,p,pc);
|
644
|
+
}
|
645
|
+
|
646
|
+
template <class View>
|
647
|
+
forceinline bool
|
648
|
+
__before(const View& x, const View& y) {
|
649
|
+
return before(x,y);
|
650
|
+
}
|
651
|
+
|
652
|
+
template <class View>
|
653
|
+
forceinline bool
|
654
|
+
ViewArray<View>::ViewLess::operator()(const View& a, const View& b) {
|
655
|
+
return __before(a,b);
|
656
|
+
}
|
657
|
+
|
658
|
+
template <class View>
|
659
|
+
void
|
660
|
+
ViewArray<View>::sort(View* y, int m) {
|
661
|
+
ViewLess vl;
|
662
|
+
Support::quicksort<View,ViewLess>(y,m,vl);
|
663
|
+
}
|
664
|
+
|
665
|
+
template <class View>
|
666
|
+
forceinline bool
|
667
|
+
__same(const View& x, const View& y) {
|
668
|
+
return same(x,y);
|
669
|
+
}
|
670
|
+
template <class View>
|
671
|
+
forceinline bool
|
672
|
+
__shared(const View& x, const View& y) {
|
673
|
+
return shared(x,y);
|
674
|
+
}
|
675
|
+
|
676
|
+
template <class View>
|
677
|
+
bool
|
678
|
+
ViewArray<View>::same(void) const {
|
679
|
+
if (n < 2)
|
680
|
+
return false;
|
681
|
+
GECODE_AUTOARRAY(View,y,n);
|
682
|
+
for (int i = n; i--; )
|
683
|
+
y[i] = x[i];
|
684
|
+
sort(y,n);
|
685
|
+
for (int i = n-1; i--; )
|
686
|
+
if (__same(y[i+1],y[i]))
|
687
|
+
return true;
|
688
|
+
return false;
|
689
|
+
}
|
690
|
+
|
691
|
+
template <class View>
|
692
|
+
bool
|
693
|
+
ViewArray<View>::same(const View& y) const {
|
694
|
+
for (int i = n; i--; )
|
695
|
+
if (__same(x[i],y))
|
696
|
+
return true;
|
697
|
+
return false;
|
698
|
+
}
|
699
|
+
|
700
|
+
template <class View>
|
701
|
+
void
|
702
|
+
ViewArray<View>::unique(void) {
|
703
|
+
if (n < 2)
|
704
|
+
return;
|
705
|
+
sort(x,n);
|
706
|
+
int j = 0;
|
707
|
+
for (int i = 1; i<n; i++)
|
708
|
+
if (!__same(x[j],x[i]))
|
709
|
+
x[++j] = x[i];
|
710
|
+
n = j+1;
|
711
|
+
}
|
712
|
+
|
713
|
+
template <class View>
|
714
|
+
bool
|
715
|
+
ViewArray<View>::shared(void) const {
|
716
|
+
if (n < 2)
|
717
|
+
return false;
|
718
|
+
GECODE_AUTOARRAY(View,y,n);
|
719
|
+
for (int i = n; i--; )
|
720
|
+
y[i] = x[i];
|
721
|
+
sort(y,n);
|
722
|
+
for (int i = n-1; i--; )
|
723
|
+
if (__shared(y[i+1],y[i]))
|
724
|
+
return true;
|
725
|
+
return false;
|
726
|
+
}
|
727
|
+
|
728
|
+
template <class View>
|
729
|
+
bool
|
730
|
+
ViewArray<View>::shared(const View& y) const {
|
731
|
+
for (int i = n; i--; )
|
732
|
+
if (__shared(x[i],y))
|
733
|
+
return true;
|
734
|
+
return false;
|
735
|
+
}
|
736
|
+
|
737
|
+
template <class View>
|
738
|
+
void*
|
739
|
+
ViewArray<View>::operator new(size_t) {
|
740
|
+
return NULL;
|
741
|
+
}
|
742
|
+
|
743
|
+
template <class View>
|
744
|
+
void
|
745
|
+
ViewArray<View>::operator delete(void*,size_t) {
|
746
|
+
}
|
747
|
+
|
748
|
+
|
749
|
+
/*
|
750
|
+
* Argument arrays: base class
|
751
|
+
*
|
752
|
+
*/
|
753
|
+
|
754
|
+
template <class T>
|
755
|
+
forceinline T*
|
756
|
+
ArgArrayBase<T>::allocate(int n) {
|
757
|
+
return (n > onstack_size) ?
|
758
|
+
Memory::bmalloc<T>(n) : &onstack[0];
|
759
|
+
}
|
760
|
+
|
761
|
+
template <class T>
|
762
|
+
forceinline
|
763
|
+
ArgArrayBase<T>::ArgArrayBase(int n0)
|
764
|
+
: n(n0), a(allocate(n0)) {}
|
765
|
+
|
766
|
+
template <class T>
|
767
|
+
inline
|
768
|
+
ArgArrayBase<T>::ArgArrayBase(const ArgArrayBase<T>& aa)
|
769
|
+
: n(aa.n), a(allocate(aa.n)) {
|
770
|
+
for (int i = n; i--; )
|
771
|
+
a[i] = aa.a[i];
|
772
|
+
}
|
773
|
+
|
774
|
+
template <class T>
|
775
|
+
forceinline
|
776
|
+
ArgArrayBase<T>::~ArgArrayBase(void) {
|
777
|
+
if (n > onstack_size)
|
778
|
+
Memory::free(a);
|
779
|
+
}
|
780
|
+
|
781
|
+
template <class T>
|
782
|
+
forceinline const ArgArrayBase<T>&
|
783
|
+
ArgArrayBase<T>::operator=(const ArgArrayBase<T>& aa) {
|
784
|
+
if (&aa != this) {
|
785
|
+
if (n > onstack_size)
|
786
|
+
Memory::free(a);
|
787
|
+
n = aa.n;
|
788
|
+
a = allocate(aa.n);
|
789
|
+
for (int i = n; i--; )
|
790
|
+
a[i] = aa.a[i];
|
791
|
+
}
|
792
|
+
return *this;
|
793
|
+
}
|
794
|
+
|
795
|
+
template <class T>
|
796
|
+
forceinline int
|
797
|
+
ArgArrayBase<T>::size(void) const {
|
798
|
+
return n;
|
799
|
+
}
|
800
|
+
|
801
|
+
template <class T>
|
802
|
+
forceinline T&
|
803
|
+
ArgArrayBase<T>::operator[](int i) {
|
804
|
+
assert((i>=0) && (i < n));
|
805
|
+
return a[i];
|
806
|
+
}
|
807
|
+
|
808
|
+
template <class T>
|
809
|
+
forceinline const T&
|
810
|
+
ArgArrayBase<T>::operator[](int i) const {
|
811
|
+
assert((i>=0) && (i < n));
|
812
|
+
return a[i];
|
813
|
+
}
|
814
|
+
|
815
|
+
|
816
|
+
/*
|
817
|
+
* Argument arrays for primitive types
|
818
|
+
*
|
819
|
+
*/
|
820
|
+
|
821
|
+
template <class T>
|
822
|
+
forceinline
|
823
|
+
PrimArgArray<T>::PrimArgArray(int n)
|
824
|
+
: ArgArrayBase<T>(n) {}
|
825
|
+
|
826
|
+
template <class T>
|
827
|
+
PrimArgArray<T>::PrimArgArray(int n, T a0, ...)
|
828
|
+
: ArgArrayBase<T>(n) {
|
829
|
+
va_list args;
|
830
|
+
va_start(args, a0);
|
831
|
+
a[0] = a0;
|
832
|
+
for (int i = 1; i < n; i++)
|
833
|
+
a[i] = va_arg(args,T);
|
834
|
+
va_end(args);
|
835
|
+
}
|
836
|
+
|
837
|
+
template <class T>
|
838
|
+
PrimArgArray<T>::PrimArgArray(int n, const T* a0)
|
839
|
+
: ArgArrayBase<T>(n) {
|
840
|
+
for (int i=n; i--; )
|
841
|
+
a[i] = a0[i];
|
842
|
+
}
|
843
|
+
|
844
|
+
template <class T>
|
845
|
+
PrimArgArray<T>::PrimArgArray(const PrimArgArray<T>& aa)
|
846
|
+
: ArgArrayBase<T>(aa.size()) {
|
847
|
+
for (int i = size(); i--; )
|
848
|
+
a[i] = aa.a[i];
|
849
|
+
}
|
850
|
+
|
851
|
+
|
852
|
+
|
853
|
+
/*
|
854
|
+
* Argument arrays for variables
|
855
|
+
*
|
856
|
+
*/
|
857
|
+
|
858
|
+
template <class T>
|
859
|
+
forceinline
|
860
|
+
VarArgArray<T>::VarArgArray(int n)
|
861
|
+
: ArgArrayBase<T>(n) {}
|
862
|
+
|
863
|
+
template <class T>
|
864
|
+
inline
|
865
|
+
VarArgArray<T>::VarArgArray(const VarArgArray<T>& aa)
|
866
|
+
: ArgArrayBase<T>(aa.size()) {
|
867
|
+
for (int i = size(); i--; )
|
868
|
+
a[i] = aa.a[i];
|
869
|
+
}
|
870
|
+
|
871
|
+
template <class T>
|
872
|
+
inline
|
873
|
+
VarArgArray<T>::VarArgArray(const VarArray<T>& x)
|
874
|
+
: ArgArrayBase<T>(x.size()) {
|
875
|
+
for (int i = x.size(); i--; )
|
876
|
+
a[i] = x[i];
|
877
|
+
}
|
878
|
+
|
879
|
+
template <class Var>
|
880
|
+
forceinline bool
|
881
|
+
VarArgArray<Var>::VarLess::operator()(const Var& a, const Var& b) {
|
882
|
+
return a.variable() < b.variable();
|
883
|
+
}
|
884
|
+
|
885
|
+
template <class Var>
|
886
|
+
bool
|
887
|
+
VarArgArray<Var>::same(void) const {
|
888
|
+
if (n < 2)
|
889
|
+
return false;
|
890
|
+
GECODE_AUTOARRAY(Var,y,n);
|
891
|
+
for (int i = n; i--; )
|
892
|
+
y[i] = a[i];
|
893
|
+
VarLess vl;
|
894
|
+
Support::quicksort<Var,VarLess>(y,n,vl);
|
895
|
+
for (int i = n-1; i--; )
|
896
|
+
if (y[i+1].variable() == y[i].variable())
|
897
|
+
return true;
|
898
|
+
return false;
|
899
|
+
}
|
900
|
+
|
901
|
+
template <class Var>
|
902
|
+
bool
|
903
|
+
VarArgArray<Var>::same(const VarArgArray<Var>& y) const {
|
904
|
+
int m = n + y.n;
|
905
|
+
if (m < 2)
|
906
|
+
return false;
|
907
|
+
GECODE_AUTOARRAY(Var,z,m);
|
908
|
+
for (int i = n; i--; )
|
909
|
+
z[i] = a[i];
|
910
|
+
for (int i = y.n; i--; )
|
911
|
+
z[i+n] = y.a[i];
|
912
|
+
VarLess vl;
|
913
|
+
Support::quicksort<Var,VarLess>(z,m,vl);
|
914
|
+
for (int i = m-1; i--; )
|
915
|
+
if (z[i+1].variable() == z[i].variable())
|
916
|
+
return true;
|
917
|
+
return false;
|
918
|
+
}
|
919
|
+
|
920
|
+
template <class Var>
|
921
|
+
bool
|
922
|
+
VarArgArray<Var>::same(const Var& y) const {
|
923
|
+
for (int i = n; i--; )
|
924
|
+
if (a[i].variable() == y.variable())
|
925
|
+
return true;
|
926
|
+
return false;
|
927
|
+
}
|
928
|
+
|
929
|
+
|
930
|
+
|
931
|
+
|
932
|
+
|
933
|
+
|
934
|
+
/*
|
935
|
+
* Interdependent code
|
936
|
+
*
|
937
|
+
*/
|
938
|
+
|
939
|
+
template <class Var>
|
940
|
+
inline
|
941
|
+
VarArray<Var>::VarArray(Space* home, const VarArgArray<Var>& a)
|
942
|
+
: n(a.size()) {
|
943
|
+
if (n>0) {
|
944
|
+
x = static_cast<Var*>(home->alloc(sizeof(Var)*n));
|
945
|
+
for (int i = n; i--; )
|
946
|
+
x[i] = a[i];
|
947
|
+
} else {
|
948
|
+
x = NULL;
|
949
|
+
}
|
950
|
+
}
|
951
|
+
|
952
|
+
}
|
953
|
+
|
954
|
+
// STATISTICS: kernel-other
|