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,255 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2003
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-04 16:05:34 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3514 $
|
|
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
|
+
#ifndef __GECODE_SUPPORT_SHARED_ARRAY_HH__
|
|
23
|
+
#define __GECODE_SUPPORT_SHARED_ARRAY_HH__
|
|
24
|
+
|
|
25
|
+
#include "gecode/kernel.hh"
|
|
26
|
+
|
|
27
|
+
#include <algorithm>
|
|
28
|
+
|
|
29
|
+
namespace Gecode { namespace Support {
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* \brief Shared array with arbitrary number of elements
|
|
33
|
+
*
|
|
34
|
+
* Sharing is implemented by reference counting: the same elements
|
|
35
|
+
* are shared among several objects.
|
|
36
|
+
*
|
|
37
|
+
* If the template parameter \a fd is true, the destructors of all objects
|
|
38
|
+
* in the array will be called when the array is deallocated, i.e. when
|
|
39
|
+
* its reference count drops to zero.
|
|
40
|
+
*
|
|
41
|
+
* Requires \code #include "gecode/support/shared-array.hh" \endcode
|
|
42
|
+
* \ingroup FuncSupport
|
|
43
|
+
*/
|
|
44
|
+
template <class T, bool fd=false>
|
|
45
|
+
class SharedArray {
|
|
46
|
+
private:
|
|
47
|
+
/// Information for array elements
|
|
48
|
+
class Object {
|
|
49
|
+
public:
|
|
50
|
+
/// Reference count
|
|
51
|
+
unsigned int use;
|
|
52
|
+
/// Number of elements
|
|
53
|
+
int n;
|
|
54
|
+
/// Start of elements
|
|
55
|
+
T a[1];
|
|
56
|
+
|
|
57
|
+
/// Allocate new information for \a n elements
|
|
58
|
+
static Object* allocate(int n);
|
|
59
|
+
/// Create copy of elements
|
|
60
|
+
Object* copy(void) const;
|
|
61
|
+
|
|
62
|
+
/// Register new object
|
|
63
|
+
void subscribe(void);
|
|
64
|
+
/// Delete object
|
|
65
|
+
void release(void);
|
|
66
|
+
};
|
|
67
|
+
/// The object referenced
|
|
68
|
+
Object* sao;
|
|
69
|
+
public:
|
|
70
|
+
/// Initialize as empty array
|
|
71
|
+
SharedArray(void);
|
|
72
|
+
/// Initialize as array with \a n elements
|
|
73
|
+
SharedArray(int n);
|
|
74
|
+
/// Initialize from shared array \a a (share elements)
|
|
75
|
+
SharedArray(const SharedArray<T,fd>& a);
|
|
76
|
+
/// Initialize from shared array \a a (share elements)
|
|
77
|
+
const SharedArray& operator=(const SharedArray&);
|
|
78
|
+
|
|
79
|
+
/// Update this array from array \a a (share elements if \a share is true)
|
|
80
|
+
void update(bool share, SharedArray& a);
|
|
81
|
+
|
|
82
|
+
/// Delete array (elements might be still in use)
|
|
83
|
+
~SharedArray(void);
|
|
84
|
+
|
|
85
|
+
/// Access element at position \a i
|
|
86
|
+
T& operator[](int i);
|
|
87
|
+
/// Access element at position \a i
|
|
88
|
+
const T& operator[](int i) const;
|
|
89
|
+
|
|
90
|
+
/// Return number of elements
|
|
91
|
+
int size(void) const;
|
|
92
|
+
/// Change size to \a n
|
|
93
|
+
void size(int n);
|
|
94
|
+
|
|
95
|
+
/// Shrink array to \a n elements
|
|
96
|
+
void shrink(int n);
|
|
97
|
+
/// Ensure that array has at least \a n elements
|
|
98
|
+
void ensure(int n);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
template <class T, bool fd>
|
|
103
|
+
forceinline typename SharedArray<T,fd>::Object*
|
|
104
|
+
SharedArray<T,fd>::Object::allocate(int n) {
|
|
105
|
+
assert(n>0);
|
|
106
|
+
Object* o = reinterpret_cast<Object*>
|
|
107
|
+
(Memory::malloc(sizeof(T)*(n-1) + sizeof(Object)));
|
|
108
|
+
o->use = 1;
|
|
109
|
+
o->n = n;
|
|
110
|
+
return o;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
template <class T, bool fd>
|
|
114
|
+
forceinline typename SharedArray<T,fd>::Object*
|
|
115
|
+
SharedArray<T,fd>::Object::copy(void) const {
|
|
116
|
+
assert(n>0);
|
|
117
|
+
Object* o = allocate(n);
|
|
118
|
+
for (int i=n; i--;)
|
|
119
|
+
new (&(o->a[i])) T(a[i]);
|
|
120
|
+
return o;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
template <class T, bool fd>
|
|
124
|
+
forceinline void
|
|
125
|
+
SharedArray<T,fd>::Object::subscribe(void) {
|
|
126
|
+
use++;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
template <class T, bool fd>
|
|
130
|
+
forceinline void
|
|
131
|
+
SharedArray<T,fd>::Object::release(void) {
|
|
132
|
+
if (--use == 0) {
|
|
133
|
+
if (fd)
|
|
134
|
+
for (int i=n; i--;)
|
|
135
|
+
a[i].~T();
|
|
136
|
+
Memory::free(this);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
template <class T, bool fd>
|
|
142
|
+
forceinline
|
|
143
|
+
SharedArray<T,fd>::SharedArray(void) : sao(NULL) {}
|
|
144
|
+
|
|
145
|
+
template <class T, bool fd>
|
|
146
|
+
forceinline
|
|
147
|
+
SharedArray<T,fd>::SharedArray(int n) {
|
|
148
|
+
sao = (n>0) ? Object::allocate(n) : NULL;
|
|
149
|
+
}
|
|
150
|
+
template <class T, bool fd>
|
|
151
|
+
forceinline
|
|
152
|
+
SharedArray<T,fd>::SharedArray(const SharedArray<T,fd>& a) {
|
|
153
|
+
sao = a.sao;
|
|
154
|
+
if (sao != NULL)
|
|
155
|
+
sao->subscribe();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
template <class T, bool fd>
|
|
159
|
+
forceinline
|
|
160
|
+
SharedArray<T,fd>::~SharedArray(void) {
|
|
161
|
+
if (sao != NULL)
|
|
162
|
+
sao->release();
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
template <class T, bool fd>
|
|
166
|
+
forceinline const SharedArray<T,fd>&
|
|
167
|
+
SharedArray<T,fd>::operator=(const SharedArray<T,fd>& a) {
|
|
168
|
+
if (this != &a) {
|
|
169
|
+
if (sao != NULL)
|
|
170
|
+
sao->release();
|
|
171
|
+
sao = a.sao;
|
|
172
|
+
if (sao != NULL)
|
|
173
|
+
sao->subscribe();
|
|
174
|
+
}
|
|
175
|
+
return *this;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
template <class T, bool fd>
|
|
179
|
+
inline void
|
|
180
|
+
SharedArray<T,fd>::update(bool share, SharedArray<T,fd>& a) {
|
|
181
|
+
if (sao != NULL)
|
|
182
|
+
sao->release();
|
|
183
|
+
if (share) {
|
|
184
|
+
sao = a.sao;
|
|
185
|
+
if (sao != NULL)
|
|
186
|
+
sao->subscribe();
|
|
187
|
+
} else {
|
|
188
|
+
sao = (a.sao == NULL) ? NULL : a.sao->copy();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
template <class T, bool fd>
|
|
193
|
+
forceinline T&
|
|
194
|
+
SharedArray<T,fd>::operator[](int i) {
|
|
195
|
+
return sao->a[i];
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
template <class T, bool fd>
|
|
199
|
+
forceinline const T&
|
|
200
|
+
SharedArray<T,fd>::operator[](int i) const {
|
|
201
|
+
return sao->a[i];
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
template <class T, bool fd>
|
|
205
|
+
forceinline int
|
|
206
|
+
SharedArray<T,fd>::size(void) const {
|
|
207
|
+
return (sao == NULL) ? 0 : sao->n;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
template <class T, bool fd>
|
|
211
|
+
forceinline void
|
|
212
|
+
SharedArray<T,fd>::size(int n) {
|
|
213
|
+
if (n==0) {
|
|
214
|
+
if (sao != NULL)
|
|
215
|
+
sao->release();
|
|
216
|
+
sao = NULL;
|
|
217
|
+
} else {
|
|
218
|
+
sao->n = n;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
template <class T, bool fd>
|
|
223
|
+
inline void
|
|
224
|
+
SharedArray<T,fd>::shrink(int n) {
|
|
225
|
+
assert(n < sao->n);
|
|
226
|
+
Object* nsao = Object::allocate(n);
|
|
227
|
+
for (int i = n; i--; )
|
|
228
|
+
new (&(nsao->a[i])) T(sao->a[i]);
|
|
229
|
+
sao->release();
|
|
230
|
+
sao = nsao;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
template <class T, bool fd>
|
|
234
|
+
inline void
|
|
235
|
+
SharedArray<T,fd>::ensure(int n) {
|
|
236
|
+
if (sao == NULL) {
|
|
237
|
+
if (n>0)
|
|
238
|
+
sao = Object::allocate(n);
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
if (n >= sao->n) {
|
|
242
|
+
int m = std::max(2*sao->n,n);
|
|
243
|
+
Object* nsao = Object::allocate(m);
|
|
244
|
+
for (int i = sao->n; i--; )
|
|
245
|
+
new (&(nsao->a[i])) T(sao->a[i]);
|
|
246
|
+
sao->release();
|
|
247
|
+
sao = nsao;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
}}
|
|
252
|
+
|
|
253
|
+
#endif
|
|
254
|
+
|
|
255
|
+
// STATISTICS: support-any
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2002
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-04 16:05:34 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3514 $
|
|
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
|
+
#ifndef __GECODE_SUPPORT_SORT_HH__
|
|
23
|
+
#define __GECODE_SUPPORT_SORT_HH__
|
|
24
|
+
|
|
25
|
+
#include <algorithm>
|
|
26
|
+
|
|
27
|
+
namespace Gecode { namespace Support {
|
|
28
|
+
|
|
29
|
+
/// Exchange elements according to order
|
|
30
|
+
template <class Type, class LessThan>
|
|
31
|
+
forceinline void
|
|
32
|
+
exchange(Type &a, Type &b, LessThan <) {
|
|
33
|
+
if (lt(b,a)) std::swap(a,b);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// Perform quicksort only for more elements
|
|
37
|
+
int const QuickSortCutoff = 20;
|
|
38
|
+
|
|
39
|
+
/// Maximal stacksize quicksort ever needs
|
|
40
|
+
static const int QuickSortStack_maxsize = 32;
|
|
41
|
+
|
|
42
|
+
/// Static stack for quicksort
|
|
43
|
+
template <class Type>
|
|
44
|
+
class QuickSortStack {
|
|
45
|
+
private:
|
|
46
|
+
Type** tos;
|
|
47
|
+
Type* stack[2*QuickSortStack_maxsize];
|
|
48
|
+
public:
|
|
49
|
+
QuickSortStack(void);
|
|
50
|
+
bool empty(void) const;
|
|
51
|
+
void push(Type*, Type*);
|
|
52
|
+
void pop(Type*&, Type*&);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
template <class Type>
|
|
56
|
+
forceinline
|
|
57
|
+
QuickSortStack<Type>::QuickSortStack(void) : tos(&stack[0]) {
|
|
58
|
+
*(tos++) = 0;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
template <class Type>
|
|
62
|
+
forceinline bool
|
|
63
|
+
QuickSortStack<Type>::empty(void) const {
|
|
64
|
+
return !*(tos-1);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
template <class Type>
|
|
68
|
+
forceinline void
|
|
69
|
+
QuickSortStack<Type>::push(Type* l, Type* r) {
|
|
70
|
+
*(tos++) = l; *(tos++) = r;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
template <class Type>
|
|
74
|
+
forceinline void
|
|
75
|
+
QuickSortStack<Type>::pop(Type*& l, Type*& r) {
|
|
76
|
+
r = *(--tos); l = *(--tos);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/// Standard insertion sort
|
|
80
|
+
template <class Type, class LessThan>
|
|
81
|
+
inline void
|
|
82
|
+
insertion(Type* l, Type* r, LessThan <) {
|
|
83
|
+
for (Type* i = r; i > l; i--)
|
|
84
|
+
exchange(*(i-1),*i,lt);
|
|
85
|
+
for (Type* i = l+2; i <= r; i++) {
|
|
86
|
+
Type* j = i;
|
|
87
|
+
Type v = *i;
|
|
88
|
+
while (lt(v,*(j-1))) {
|
|
89
|
+
*j = *(j-1); j--;
|
|
90
|
+
}
|
|
91
|
+
*j = v;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/// Standard partioning
|
|
96
|
+
template <class Type, class LessThan>
|
|
97
|
+
inline Type*
|
|
98
|
+
partition(Type* l, Type* r, LessThan <) {
|
|
99
|
+
Type* i = l-1;
|
|
100
|
+
Type* j = r;
|
|
101
|
+
Type v = *r;
|
|
102
|
+
while (true) {
|
|
103
|
+
while (lt(*(++i),v));
|
|
104
|
+
while (lt(v,*(--j))) if (j == l) break;
|
|
105
|
+
if (i >= j) break;
|
|
106
|
+
std::swap(*i,*j);
|
|
107
|
+
}
|
|
108
|
+
std::swap(*i,*r);
|
|
109
|
+
return i;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/// Standard quick sort
|
|
113
|
+
template <class Type, class LessThan>
|
|
114
|
+
inline void
|
|
115
|
+
quicksort(Type* l, Type* r, LessThan <) {
|
|
116
|
+
QuickSortStack<Type> s;
|
|
117
|
+
s.push(l,r);
|
|
118
|
+
while (!s.empty()) {
|
|
119
|
+
s.pop(l,r);
|
|
120
|
+
nopush:
|
|
121
|
+
if (r-l <= QuickSortCutoff)
|
|
122
|
+
continue;
|
|
123
|
+
std::swap(*(l+((r-l) >> 1)),*(r-1));
|
|
124
|
+
exchange(*l,*(r-1),lt);
|
|
125
|
+
exchange(*l,*r,lt);
|
|
126
|
+
exchange(*(r-1),*r,lt);
|
|
127
|
+
Type* i = partition(l+1,r-1,lt);
|
|
128
|
+
if (i-l > r-i) {
|
|
129
|
+
s.push(l,i-1); l=i+1; goto nopush;
|
|
130
|
+
} else {
|
|
131
|
+
s.push(i+1,r); r=i-1; goto nopush;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/*
|
|
137
|
+
* These are the routines to be used
|
|
138
|
+
*
|
|
139
|
+
*/
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* \brief Insertion sort
|
|
143
|
+
*
|
|
144
|
+
* Sorts by insertion the \a n first elements of array \a x according
|
|
145
|
+
* to the order \a lt as instance of class \a LessThan. The class
|
|
146
|
+
* \a LessThan must implement the single member function
|
|
147
|
+
* \code bool operator()(const Type&, const Type&) \endcode
|
|
148
|
+
* for comparing elements.
|
|
149
|
+
*
|
|
150
|
+
* The algorithm is largely based on the following book:
|
|
151
|
+
* Robert Sedgewick, Algorithms in C++, 3rd edition, 1998, Addison Wesley.
|
|
152
|
+
*
|
|
153
|
+
* Requires \code #include "gecode/support/sort.hh" \endcode
|
|
154
|
+
* \ingroup FuncSupport
|
|
155
|
+
*/
|
|
156
|
+
template <class Type, class LessThan>
|
|
157
|
+
forceinline void
|
|
158
|
+
insertion(Type* x, int n, LessThan <) {
|
|
159
|
+
if (n < 2)
|
|
160
|
+
return;
|
|
161
|
+
insertion(x,x+n-1,lt);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* \brief Quicksort
|
|
166
|
+
*
|
|
167
|
+
* Sorts with quicksort the \a n first elements of array \a x according
|
|
168
|
+
* to the order \a lt as instance of class \a LessThan. The class
|
|
169
|
+
* \a LessThan must implement the single member function
|
|
170
|
+
* \code bool operator()(const Type&, const Type&) \endcode
|
|
171
|
+
* for comparing elements.
|
|
172
|
+
*
|
|
173
|
+
* The algorithm is largely based on the following book:
|
|
174
|
+
* Robert Sedgewick, Algorithms in C++, 3rd edition, 1998, Addison Wesley.
|
|
175
|
+
*
|
|
176
|
+
* Requires \code #include "gecode/support/sort.hh" \endcode
|
|
177
|
+
* \ingroup FuncSupport
|
|
178
|
+
*/
|
|
179
|
+
template <class Type, class LessThan>
|
|
180
|
+
forceinline void
|
|
181
|
+
quicksort(Type* x, int n, LessThan <) {
|
|
182
|
+
if (n < 2)
|
|
183
|
+
return;
|
|
184
|
+
if (n > QuickSortCutoff)
|
|
185
|
+
quicksort(x,x+n-1,lt);
|
|
186
|
+
insertion(x,x+n-1,lt);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
}}
|
|
190
|
+
|
|
191
|
+
#endif
|
|
192
|
+
|
|
193
|
+
// STATISTICS: support-any
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
* Guido Tack <tack@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Christian Schulte, 2002
|
|
8
|
+
* Guido Tack, 2004
|
|
9
|
+
*
|
|
10
|
+
* Last modified:
|
|
11
|
+
* $Date: 2006-08-04 16:05:34 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
12
|
+
* $Revision: 3514 $
|
|
13
|
+
*
|
|
14
|
+
* This file is part of Gecode, the generic constraint
|
|
15
|
+
* development environment:
|
|
16
|
+
* http://www.gecode.org
|
|
17
|
+
*
|
|
18
|
+
* See the file "LICENSE" for information on usage and
|
|
19
|
+
* redistribution of this file, and for a
|
|
20
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#ifndef __GECODE_SUPPORT_PQUEUE_HH__
|
|
25
|
+
#define __GECODE_SUPPORT_PQUEUE_HH__
|
|
26
|
+
|
|
27
|
+
#include "gecode/kernel.hh"
|
|
28
|
+
|
|
29
|
+
#include <cassert>
|
|
30
|
+
#include <algorithm>
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
* The shared queue
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
namespace Gecode { namespace Support {
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* \brief Simple fixed-size priority queue
|
|
41
|
+
*
|
|
42
|
+
* The order is implemented by an instance of the class \a Less which
|
|
43
|
+
* must provide the single member function
|
|
44
|
+
* \code bool operator()(const T&, const T&) \endcode
|
|
45
|
+
* for comparing elements.
|
|
46
|
+
*
|
|
47
|
+
* Requires \code #include "gecode/support/static-pqueue.hh" \endcode
|
|
48
|
+
* \ingroup FuncSupport
|
|
49
|
+
*/
|
|
50
|
+
template <class T, class Less>
|
|
51
|
+
class PQueue {
|
|
52
|
+
private:
|
|
53
|
+
/// The class holding the shared queue (organized as heap)
|
|
54
|
+
class SharedPQueue {
|
|
55
|
+
public:
|
|
56
|
+
/// Number of elements currently in queue
|
|
57
|
+
int n;
|
|
58
|
+
/// Maximal size
|
|
59
|
+
int size;
|
|
60
|
+
/// How many references to shared queue exist
|
|
61
|
+
unsigned int ref;
|
|
62
|
+
/// Order used for elements
|
|
63
|
+
Less l;
|
|
64
|
+
/// Elements (will be most likely more than one)
|
|
65
|
+
T pq[1];
|
|
66
|
+
|
|
67
|
+
/// Allocate queue with \a n elements
|
|
68
|
+
static SharedPQueue* allocate(int n, const Less& l);
|
|
69
|
+
/// Reorganize after smallest element has changed
|
|
70
|
+
void fixdown(void);
|
|
71
|
+
/// Reorganize after element at position \a n has changed
|
|
72
|
+
void fixup(int n);
|
|
73
|
+
};
|
|
74
|
+
/// Handle to shared queue
|
|
75
|
+
SharedPQueue* spq;
|
|
76
|
+
|
|
77
|
+
public:
|
|
78
|
+
/// Default constructor (creates empty queue)
|
|
79
|
+
PQueue(void);
|
|
80
|
+
/// Create for \a n elements and order \a l
|
|
81
|
+
PQueue(int n, const Less& l);
|
|
82
|
+
/// Initialize for \a n elements and order \a l
|
|
83
|
+
void init(int, const Less&);
|
|
84
|
+
/// Assign queue from queue \a p (elements are shared)
|
|
85
|
+
PQueue(const PQueue& p);
|
|
86
|
+
/// Assign queue from queue \a p (elements are shared)
|
|
87
|
+
const PQueue& operator=(const PQueue&);
|
|
88
|
+
/// Release queue
|
|
89
|
+
~PQueue(void);
|
|
90
|
+
|
|
91
|
+
/// Test whether queue is empty
|
|
92
|
+
bool empty(void) const;
|
|
93
|
+
/// Insert element \a x according to order
|
|
94
|
+
void insert(const T& x);
|
|
95
|
+
/// Remove smallest element
|
|
96
|
+
void remove(void);
|
|
97
|
+
/// Provide access to smallest element
|
|
98
|
+
T& top(void);
|
|
99
|
+
/// Reorder queue after smallest element has changed (might not be smallest any longer)
|
|
100
|
+
void fix(void);
|
|
101
|
+
|
|
102
|
+
/// Update this queue from queue \a p (share elements if \a share is true)
|
|
103
|
+
void update(const PQueue<T,Less>& p, bool share);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
template <class T, class Less>
|
|
107
|
+
forceinline typename PQueue<T,Less>::SharedPQueue*
|
|
108
|
+
PQueue<T,Less>::SharedPQueue::allocate(int n, const Less& l) {
|
|
109
|
+
SharedPQueue* spq
|
|
110
|
+
= reinterpret_cast<SharedPQueue*>
|
|
111
|
+
(Memory::malloc(sizeof(SharedPQueue) + (n-1)*sizeof(T)));
|
|
112
|
+
spq->size = n;
|
|
113
|
+
spq->n = 0;
|
|
114
|
+
spq->ref = 1;
|
|
115
|
+
spq->l = l;
|
|
116
|
+
return spq;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
template <class T, class Less>
|
|
120
|
+
forceinline void
|
|
121
|
+
PQueue<T,Less>::SharedPQueue::fixdown(void) {
|
|
122
|
+
int k = 0;
|
|
123
|
+
while ((k << 1) < n) {
|
|
124
|
+
int j = k << 1;
|
|
125
|
+
if (j < n-1 && l(pq[j],pq[j+1]))
|
|
126
|
+
j++;
|
|
127
|
+
if (!l(pq[k],pq[j]))
|
|
128
|
+
break;
|
|
129
|
+
std::swap(pq[k], pq[j]);
|
|
130
|
+
k = j;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
template <class T, class Less>
|
|
135
|
+
forceinline void
|
|
136
|
+
PQueue<T,Less>::SharedPQueue::fixup(int k) {
|
|
137
|
+
while (k > 0 && l(pq[k >> 1],pq[k])) {
|
|
138
|
+
std::swap(pq[k],pq[k >> 1]);
|
|
139
|
+
k >>= 1;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
template <class T, class Less>
|
|
144
|
+
forceinline
|
|
145
|
+
PQueue<T,Less>::PQueue(void)
|
|
146
|
+
: spq(NULL) {}
|
|
147
|
+
|
|
148
|
+
template <class T, class Less>
|
|
149
|
+
forceinline
|
|
150
|
+
PQueue<T,Less>::PQueue(int n, const Less& l)
|
|
151
|
+
: spq(SharedPQueue::allocate(n,l)) {}
|
|
152
|
+
|
|
153
|
+
template <class T, class Less>
|
|
154
|
+
forceinline void
|
|
155
|
+
PQueue<T,Less>::init(int n, const Less& l) {
|
|
156
|
+
spq = SharedPQueue::allocate(n,l);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
template <class T, class Less>
|
|
160
|
+
forceinline
|
|
161
|
+
PQueue<T,Less>::PQueue(const PQueue<T,Less>& p)
|
|
162
|
+
: spq(p.spq) {
|
|
163
|
+
if (spq != NULL)
|
|
164
|
+
spq->ref++;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
template <class T, class Less>
|
|
168
|
+
forceinline const PQueue<T,Less>&
|
|
169
|
+
PQueue<T,Less>::operator =(const PQueue<T,Less>& p) {
|
|
170
|
+
if (this != &p) {
|
|
171
|
+
if ((spq != NULL) && (--spq->ref == 0))
|
|
172
|
+
Memory::free(spq);
|
|
173
|
+
spq = p.spq;
|
|
174
|
+
if (spq != NULL)
|
|
175
|
+
spq->ref++;
|
|
176
|
+
}
|
|
177
|
+
return *this;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
template <class T, class Less>
|
|
181
|
+
forceinline void
|
|
182
|
+
PQueue<T,Less>::update(const PQueue<T,Less>& p, bool share) {
|
|
183
|
+
if (share) {
|
|
184
|
+
spq = p.spq;
|
|
185
|
+
if (spq != NULL)
|
|
186
|
+
spq->ref++;
|
|
187
|
+
} else {
|
|
188
|
+
if (p.spq != NULL) {
|
|
189
|
+
spq = allocate(p.spq->n,p.spq->l);
|
|
190
|
+
} else {
|
|
191
|
+
spq = NULL;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
template <class T, class Less>
|
|
197
|
+
forceinline
|
|
198
|
+
PQueue<T,Less>::~PQueue(void) {
|
|
199
|
+
if ((spq != NULL) && (--spq->ref == 0))
|
|
200
|
+
Memory::free(spq);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
template <class T, class Less>
|
|
204
|
+
forceinline bool
|
|
205
|
+
PQueue<T,Less>::empty(void) const {
|
|
206
|
+
return (spq == NULL) || (spq->n == 0);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
template <class T, class Less>
|
|
211
|
+
forceinline void
|
|
212
|
+
PQueue<T,Less>::insert(const T& x) {
|
|
213
|
+
spq->pq[spq->n++] = x;
|
|
214
|
+
spq->fixup(spq->n-1);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
template <class T, class Less>
|
|
218
|
+
forceinline void
|
|
219
|
+
PQueue<T,Less>::remove(void) {
|
|
220
|
+
spq->pq[0] = spq->pq[--spq->n];
|
|
221
|
+
spq->fixdown();
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
template <class T, class Less>
|
|
225
|
+
forceinline T&
|
|
226
|
+
PQueue<T,Less>::top(void) {
|
|
227
|
+
return spq->pq[0];
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
template <class T, class Less>
|
|
231
|
+
forceinline void
|
|
232
|
+
PQueue<T,Less>::fix(void) {
|
|
233
|
+
spq->fixdown();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
}}
|
|
237
|
+
|
|
238
|
+
#endif
|
|
239
|
+
|
|
240
|
+
// STATISTICS: support-any
|