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,205 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Main authors:
|
|
3
|
+
* Christian Schulte <schulte@gecode.org>
|
|
4
|
+
*
|
|
5
|
+
* Copyright:
|
|
6
|
+
* Christian Schulte, 2004
|
|
7
|
+
*
|
|
8
|
+
* Last modified:
|
|
9
|
+
* $Date: 2006-08-04 16:03:05 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3510 $
|
|
11
|
+
*
|
|
12
|
+
* This file is part of Gecode, the generic constraint
|
|
13
|
+
* development environment:
|
|
14
|
+
* http://www.gecode.org
|
|
15
|
+
*
|
|
16
|
+
* See the file "LICENSE" for information on usage and
|
|
17
|
+
* redistribution of this file, and for a
|
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
namespace Gecode {
|
|
23
|
+
|
|
24
|
+
/// Heap and automatic memory management
|
|
25
|
+
namespace Memory {
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* \defgroup FuncMemHeap Heap-memory management
|
|
29
|
+
*
|
|
30
|
+
* All routines throw an exception of MemoryExhausted, if request
|
|
31
|
+
* cannot be fulfilled.
|
|
32
|
+
* \ingroup FuncMem
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
//@{
|
|
36
|
+
/// Allocate \a s bytes from heap.
|
|
37
|
+
void* malloc(size_t s);
|
|
38
|
+
/// Try to change memory-block starting at \a p to size \a s
|
|
39
|
+
void* realloc(void* p, size_t s);
|
|
40
|
+
/// Free memory block starting at \a p
|
|
41
|
+
void free(void* p);
|
|
42
|
+
|
|
43
|
+
/// Allocate block of \a n objects of type \a T from heap
|
|
44
|
+
template <class T>
|
|
45
|
+
T* bmalloc(size_t n);
|
|
46
|
+
/// Reallocate block of \a n object starting at \a b to \a m objects of type \a T from heap
|
|
47
|
+
template <class T>
|
|
48
|
+
T* brealloc(T* b, size_t n);
|
|
49
|
+
/// Copy \a n objects starting at \a s to \a d
|
|
50
|
+
template <class T>
|
|
51
|
+
T* bcopy(T* d, const T* s, size_t n);
|
|
52
|
+
|
|
53
|
+
//@}
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
/*
|
|
57
|
+
* Implementations
|
|
58
|
+
*
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
forceinline void*
|
|
62
|
+
malloc(size_t s) {
|
|
63
|
+
void* p = ::malloc(s);
|
|
64
|
+
if (p != NULL)
|
|
65
|
+
return p;
|
|
66
|
+
throw MemoryExhausted();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
forceinline void*
|
|
70
|
+
realloc(void *p, size_t s) {
|
|
71
|
+
p = ::realloc(p,s);
|
|
72
|
+
if (p != NULL)
|
|
73
|
+
return p;
|
|
74
|
+
throw MemoryExhausted();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
forceinline void
|
|
78
|
+
free(void* p) {
|
|
79
|
+
::free(p);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
template <class T>
|
|
84
|
+
forceinline T*
|
|
85
|
+
bmalloc(size_t n) {
|
|
86
|
+
return reinterpret_cast<T*>(Memory::malloc(sizeof(T)*n));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
template <class T>
|
|
90
|
+
forceinline T*
|
|
91
|
+
brealloc(T* b, size_t, size_t m) {
|
|
92
|
+
return reinterpret_cast<T*>(Memory::realloc(b,m*sizeof(T)));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
template <class T>
|
|
96
|
+
forceinline T*
|
|
97
|
+
bcopy(T* d, const T* s, size_t n) {
|
|
98
|
+
return reinterpret_cast<T*>(memcpy(d,s,n*sizeof(T)));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* \defgroup FuncMemAuto Automatic memory management
|
|
107
|
+
* \ingroup FuncMem
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
//@{
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* \def GECODE_AUTOARRAY(T,X,N)
|
|
114
|
+
* \brief Automatic (stack allocation) of memory
|
|
115
|
+
*
|
|
116
|
+
* Allocates automatic memory for \a N objects of type \a T and
|
|
117
|
+
* declares and initializes the pointer \a X to \a T to that
|
|
118
|
+
* block.
|
|
119
|
+
*
|
|
120
|
+
* As soon as the current scope is left, the memory is freed.
|
|
121
|
+
*
|
|
122
|
+
* Tries to allocate small blocks on the stack, bigger ones are
|
|
123
|
+
* allocated from the heap (however, management is still automatic).
|
|
124
|
+
*/
|
|
125
|
+
|
|
126
|
+
//@}
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* Automatic stack memory management
|
|
130
|
+
*
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
#if defined(__GNUC__) && (! defined(_WIN32) )
|
|
134
|
+
|
|
135
|
+
#define GECODE_AUTOARRAY(T,X,N) \
|
|
136
|
+
char __GECODE__ ## X ## __LINE__ [(N)*sizeof(T)]; \
|
|
137
|
+
T* X = reinterpret_cast<T*>(__GECODE__ ## X ## __LINE__);
|
|
138
|
+
|
|
139
|
+
#elif defined(_MSC_VER) || (defined(__GNUC__) && defined(_WIN32))
|
|
140
|
+
|
|
141
|
+
#include <cstdlib>
|
|
142
|
+
#include <malloc.h>
|
|
143
|
+
|
|
144
|
+
namespace Gecode { namespace Memory {
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* \brief Helper class for large memory chunks obtained from heap
|
|
148
|
+
*/
|
|
149
|
+
class ManageMemory {
|
|
150
|
+
private:
|
|
151
|
+
void* _x;
|
|
152
|
+
public:
|
|
153
|
+
ManageMemory(void) {}
|
|
154
|
+
void init(void* p) { _x = p; }
|
|
155
|
+
~ManageMemory(void) {
|
|
156
|
+
if (_x != NULL)
|
|
157
|
+
::free(_x);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
}}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
#define GECODE_AUTOARRAY(T,X,N) \
|
|
165
|
+
T* X; \
|
|
166
|
+
::Gecode::Memory::ManageMemory __GECODE__ ## X ## __LINE__; \
|
|
167
|
+
if ((sizeof(T)*(N)) <= 2048) { \
|
|
168
|
+
X = reinterpret_cast<T*>(_alloca(sizeof(T)*(N))); \
|
|
169
|
+
__GECODE__ ## X ## __LINE__ .init(NULL); \
|
|
170
|
+
} else { \
|
|
171
|
+
X = reinterpret_cast<T*>(::malloc(sizeof(T)*(N))); \
|
|
172
|
+
__GECODE__ ## X ## __LINE__ .init(X); \
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
#else
|
|
176
|
+
|
|
177
|
+
#include <cstdlib>
|
|
178
|
+
|
|
179
|
+
namespace Gecode { namespace Memory {
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* \brief Helper class for large automatic memory chunks
|
|
183
|
+
*/
|
|
184
|
+
template <class T>
|
|
185
|
+
class AutoArray {
|
|
186
|
+
private:
|
|
187
|
+
T* _x;
|
|
188
|
+
public:
|
|
189
|
+
AutoArray(const int n) {
|
|
190
|
+
_x = reinterpret_cast<T*>(::malloc(sizeof(T)*n));
|
|
191
|
+
}
|
|
192
|
+
~AutoArray(void) {
|
|
193
|
+
::free(_x);
|
|
194
|
+
}
|
|
195
|
+
T &operator [](const int i){ return _x[i]; }
|
|
196
|
+
operator T*(void) { return _x; }
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
}}
|
|
200
|
+
|
|
201
|
+
#define GECODE_AUTOARRAY(T,X,N) ::Gecode::Memory::AutoArray< T > X(N)
|
|
202
|
+
|
|
203
|
+
#endif
|
|
204
|
+
|
|
205
|
+
// STATISTICS: kernel-core
|
|
@@ -0,0 +1,53 @@
|
|
|
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:03:05 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
10
|
+
* $Revision: 3510 $
|
|
11
|
+
*
|
|
12
|
+
* This file is part of Gecode, the generic constraint
|
|
13
|
+
* development environment:
|
|
14
|
+
* http://www.gecode.org
|
|
15
|
+
*
|
|
16
|
+
* See the file "LICENSE" for information on usage and
|
|
17
|
+
* redistribution of this file, and for a
|
|
18
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
namespace Gecode {
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* \brief Check whether modification event \a me is failed.
|
|
26
|
+
* \ingroup TaskActor
|
|
27
|
+
*/
|
|
28
|
+
bool me_failed(ModEvent me);
|
|
29
|
+
/**
|
|
30
|
+
* \brief Check whether modification event \a me describes variable modification.
|
|
31
|
+
* \ingroup TaskActor
|
|
32
|
+
*/
|
|
33
|
+
bool me_modified(ModEvent me);
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
/*
|
|
37
|
+
* Modification events
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
forceinline bool
|
|
42
|
+
me_failed(ModEvent me) {
|
|
43
|
+
return me < ME_GEN_NONE;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
forceinline bool
|
|
47
|
+
me_modified(ModEvent me) {
|
|
48
|
+
return me > ME_GEN_NONE;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// STATISTICS: kernel-other
|
|
@@ -0,0 +1,680 @@
|
|
|
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:03:05 +0200 (Fri, 04 Aug 2006) $ by $Author: schulte $
|
|
12
|
+
* $Revision: 3510 $
|
|
13
|
+
*
|
|
14
|
+
* This file is part of Gecode, the generic constraint
|
|
15
|
+
* development environment:
|
|
16
|
+
* http://www.gecode.org
|
|
17
|
+
*
|
|
18
|
+
* See the file "LICENSE" for information on usage and
|
|
19
|
+
* redistribution of this file, and for a
|
|
20
|
+
* DISCLAIMER OF ALL WARRANTIES.
|
|
21
|
+
*
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
namespace Gecode {
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* \brief Dynamic low-propagation cost computation
|
|
28
|
+
*
|
|
29
|
+
* If \a n is less than 4, use constant low-costs, otherwise use \a pc.
|
|
30
|
+
* \ingroup TaskActor
|
|
31
|
+
*/
|
|
32
|
+
PropCost cost_lo(int n, PropCost pc);
|
|
33
|
+
/**
|
|
34
|
+
* \brief Dynamic high-propagation cost computation
|
|
35
|
+
*
|
|
36
|
+
* If \a n is less than 4, use constant hight-costs, otherwise use \a pc.
|
|
37
|
+
* \ingroup TaskActor
|
|
38
|
+
*/
|
|
39
|
+
PropCost cost_hi(int n, PropCost pc);
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* \defgroup TaskPropPat Propagator patterns
|
|
44
|
+
*
|
|
45
|
+
* The optional last Boolean argument (\a fd) to the constructor for creation
|
|
46
|
+
* defines whether disposal must be forced. That is, if \a fd is true
|
|
47
|
+
* the dispose member function of a propagator is called when the
|
|
48
|
+
* space containing the propagator is deleted.
|
|
49
|
+
* \ingroup TaskActor
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
//@{
|
|
53
|
+
/**
|
|
54
|
+
* \brief Unary propagator
|
|
55
|
+
*
|
|
56
|
+
* Stores single view of type \a View with propagation condition \a pc.
|
|
57
|
+
*/
|
|
58
|
+
template <class View, PropCond pc>
|
|
59
|
+
class UnaryPropagator : public Propagator {
|
|
60
|
+
protected:
|
|
61
|
+
/// Single view
|
|
62
|
+
View x0;
|
|
63
|
+
/// Constructor for cloning \a p
|
|
64
|
+
UnaryPropagator(Space* home, bool share, UnaryPropagator& p);
|
|
65
|
+
/// Constructor for rewriting \a p during cloning
|
|
66
|
+
UnaryPropagator(Space* home, bool share, Propagator& p,
|
|
67
|
+
View x0);
|
|
68
|
+
/// Constructor for creation
|
|
69
|
+
UnaryPropagator(Space* home, View x0, bool fd=false);
|
|
70
|
+
public:
|
|
71
|
+
/// Cost function (defined as PC_UNARY_LO)
|
|
72
|
+
virtual PropCost cost(void) const;
|
|
73
|
+
/// Delete propagator and return its size
|
|
74
|
+
virtual size_t dispose(Space* home);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* \brief Binary propagator
|
|
79
|
+
*
|
|
80
|
+
* Stores two views of type \a View with propagation condition \a pc.
|
|
81
|
+
*/
|
|
82
|
+
template <class View, PropCond pc>
|
|
83
|
+
class BinaryPropagator : public Propagator {
|
|
84
|
+
protected:
|
|
85
|
+
/// Two views
|
|
86
|
+
View x0, x1;
|
|
87
|
+
/// Constructor for cloning \a p
|
|
88
|
+
BinaryPropagator(Space* home, bool share, BinaryPropagator& p);
|
|
89
|
+
/// Constructor for creation
|
|
90
|
+
BinaryPropagator(Space* home, View x0, View x1, bool fd=false);
|
|
91
|
+
/// Constructor for rewriting \a p during cloning
|
|
92
|
+
BinaryPropagator(Space* home, bool share, Propagator& p,
|
|
93
|
+
View x0, View x1);
|
|
94
|
+
public:
|
|
95
|
+
/// Cost function (defined as PC_BINARY_LO)
|
|
96
|
+
virtual PropCost cost(void) const;
|
|
97
|
+
/// Delete propagator and return its size
|
|
98
|
+
virtual size_t dispose(Space* home);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* \brief Ternary propagator
|
|
103
|
+
*
|
|
104
|
+
* Stores three views of type \a View with propagation condition \a pc.
|
|
105
|
+
*/
|
|
106
|
+
template <class View, PropCond pc>
|
|
107
|
+
class TernaryPropagator : public Propagator {
|
|
108
|
+
protected:
|
|
109
|
+
/// Three views
|
|
110
|
+
View x0, x1, x2;
|
|
111
|
+
/// Constructor for cloning \a p
|
|
112
|
+
TernaryPropagator(Space* home, bool share, TernaryPropagator& p);
|
|
113
|
+
/// Constructor for creation
|
|
114
|
+
TernaryPropagator(Space* home, View x0, View x1, View x2, bool fd=false);
|
|
115
|
+
/// Constructor for rewriting \a p during cloning
|
|
116
|
+
TernaryPropagator(Space* home, bool share, Propagator& p,
|
|
117
|
+
View x0, View x1, View x2);
|
|
118
|
+
public:
|
|
119
|
+
/// Cost function (defined as PC_TERNARY_LO)
|
|
120
|
+
virtual PropCost cost(void) const;
|
|
121
|
+
/// Delete propagator and return its size
|
|
122
|
+
virtual size_t dispose(Space* home);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* \brief n-ary propagator
|
|
127
|
+
*
|
|
128
|
+
* Stores array of views of type \a View with propagation condition \a pc.
|
|
129
|
+
*/
|
|
130
|
+
template <class View, PropCond pc>
|
|
131
|
+
class NaryPropagator : public Propagator {
|
|
132
|
+
protected:
|
|
133
|
+
/// Array of views
|
|
134
|
+
ViewArray<View> x;
|
|
135
|
+
/// Constructor for cloning \a p
|
|
136
|
+
NaryPropagator(Space* home, bool share, NaryPropagator& p);
|
|
137
|
+
/// Constructor for rewriting \a p during cloning
|
|
138
|
+
NaryPropagator(Space* home, bool share, Propagator& p,
|
|
139
|
+
ViewArray<View>& x);
|
|
140
|
+
/// Constructor for creation
|
|
141
|
+
NaryPropagator(Space* home, ViewArray<View>& x, bool fd=false);
|
|
142
|
+
public:
|
|
143
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
|
144
|
+
virtual PropCost cost(void) const;
|
|
145
|
+
/// Delete propagator and return its size
|
|
146
|
+
virtual size_t dispose(Space* home);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* \brief (n+1)-ary propagator
|
|
151
|
+
*
|
|
152
|
+
* Stores array of views and single view of type \a View with propagation
|
|
153
|
+
* condition \a pc.
|
|
154
|
+
*/
|
|
155
|
+
template <class View, PropCond pc>
|
|
156
|
+
class NaryOnePropagator : public Propagator {
|
|
157
|
+
protected:
|
|
158
|
+
/// Array of views
|
|
159
|
+
ViewArray<View> x;
|
|
160
|
+
/// Single view
|
|
161
|
+
View y;
|
|
162
|
+
/// Constructor for cloning \a p
|
|
163
|
+
NaryOnePropagator(Space* home, bool share, NaryOnePropagator& p);
|
|
164
|
+
/// Constructor for rewriting \a p during cloning
|
|
165
|
+
NaryOnePropagator(Space* home, bool share, Propagator& p,
|
|
166
|
+
ViewArray<View>& x, View y);
|
|
167
|
+
/// Constructor for creation
|
|
168
|
+
NaryOnePropagator(Space* home, ViewArray<View>& x, View y, bool fd=false);
|
|
169
|
+
public:
|
|
170
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
|
171
|
+
virtual PropCost cost(void) const;
|
|
172
|
+
/// Delete propagator and return its size
|
|
173
|
+
virtual size_t dispose(Space* home);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* \brief Inhomogeneous binary propagator
|
|
178
|
+
*
|
|
179
|
+
* Stores two views of type \a View0 and \a View1 with propagation
|
|
180
|
+
* conditions \a pc0 and \a pc1.
|
|
181
|
+
*/
|
|
182
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
183
|
+
class InhomBinaryPropagator : public Propagator {
|
|
184
|
+
protected:
|
|
185
|
+
View0 x0;
|
|
186
|
+
View1 x1;
|
|
187
|
+
/// Constructor for cloning
|
|
188
|
+
InhomBinaryPropagator(Space* home,bool,InhomBinaryPropagator&);
|
|
189
|
+
/// Constructor for creation
|
|
190
|
+
InhomBinaryPropagator(Space* home,View0,View1,bool=false);
|
|
191
|
+
/// Constructor for rewriting \a p during cloning
|
|
192
|
+
InhomBinaryPropagator(Space* home, bool share, Propagator& p,
|
|
193
|
+
View0 x0, View1 x1);
|
|
194
|
+
public:
|
|
195
|
+
/// Cost function (defined as PC_BINARY_LO)
|
|
196
|
+
virtual PropCost cost(void) const;
|
|
197
|
+
/// Delete propagator and return its size
|
|
198
|
+
virtual size_t dispose(Space* home);
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* \brief Inhomogeneous ternary propagator
|
|
203
|
+
*
|
|
204
|
+
* Stores three views of type \a View0, \a View1, and \a View2
|
|
205
|
+
* with propagation conditions \a pc0, \a pc1, and \a pc2.
|
|
206
|
+
*/
|
|
207
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1,
|
|
208
|
+
class View2, PropCond pc2>
|
|
209
|
+
class InhomTernaryPropagator : public Propagator {
|
|
210
|
+
protected:
|
|
211
|
+
View0 x0;
|
|
212
|
+
View1 x1;
|
|
213
|
+
View2 x2;
|
|
214
|
+
/// Constructor for cloning
|
|
215
|
+
InhomTernaryPropagator(Space* home,bool,InhomTernaryPropagator&);
|
|
216
|
+
/// Constructor for creation
|
|
217
|
+
InhomTernaryPropagator(Space* home,View0,View1,View2,bool=false);
|
|
218
|
+
/// Constructor for rewriting \a p during cloning
|
|
219
|
+
InhomTernaryPropagator(Space* home, bool share, Propagator& p,
|
|
220
|
+
View0 x0, View1 x1, View2 x2);
|
|
221
|
+
public:
|
|
222
|
+
/// Cost function (defined as PC_TERNARY_LO)
|
|
223
|
+
virtual PropCost cost(void) const;
|
|
224
|
+
/// Delete propagator and return its size
|
|
225
|
+
virtual size_t dispose(Space* home);
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* \brief Inhomogeneous (n+1)-ary propagator
|
|
230
|
+
*
|
|
231
|
+
* Stores array of views of type \a View0 with propagation condition \a pc0
|
|
232
|
+
* and a single view of type \a View1 with propagation condition \a pc1.
|
|
233
|
+
*/
|
|
234
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
235
|
+
class InhomNaryOnePropagator : public Propagator {
|
|
236
|
+
protected:
|
|
237
|
+
/// Array of views
|
|
238
|
+
ViewArray<View0> x;
|
|
239
|
+
/// Single view
|
|
240
|
+
View1 y;
|
|
241
|
+
/// Constructor for cloning \a p
|
|
242
|
+
InhomNaryOnePropagator(Space* home, bool share, InhomNaryOnePropagator& p);
|
|
243
|
+
/// Constructor for creation
|
|
244
|
+
InhomNaryOnePropagator(Space* home, ViewArray<View0>& x, View1 y,
|
|
245
|
+
bool fd=false);
|
|
246
|
+
/// Constructor for rewriting \a p during cloning
|
|
247
|
+
InhomNaryOnePropagator(Space* home, bool share, Propagator& p,
|
|
248
|
+
ViewArray<View0>& x, View1 y);
|
|
249
|
+
public:
|
|
250
|
+
/// Cost function (defined as dynamic PC_LINEAR_LO)
|
|
251
|
+
virtual PropCost cost(void) const;
|
|
252
|
+
/// Delete propagator and return its size
|
|
253
|
+
virtual size_t dispose(Space* home);
|
|
254
|
+
};
|
|
255
|
+
//@}
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
/*
|
|
263
|
+
* Dynamic cost computation
|
|
264
|
+
*
|
|
265
|
+
*/
|
|
266
|
+
|
|
267
|
+
forceinline PropCost
|
|
268
|
+
cost_lo(int n, PropCost c) {
|
|
269
|
+
if (n > 3) return c;
|
|
270
|
+
if (n < 2) return PC_UNARY_LO;
|
|
271
|
+
return (n > 2) ? PC_TERNARY_LO : PC_BINARY_LO;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
forceinline PropCost
|
|
275
|
+
cost_hi(int n, PropCost c) {
|
|
276
|
+
if (n > 3) return c;
|
|
277
|
+
if (n < 2) return PC_UNARY_HI;
|
|
278
|
+
return (n > 2) ? PC_TERNARY_HI : PC_BINARY_HI;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
/*
|
|
282
|
+
* Unary propagators
|
|
283
|
+
*
|
|
284
|
+
*/
|
|
285
|
+
|
|
286
|
+
template <class View, PropCond pc>
|
|
287
|
+
UnaryPropagator<View,pc>::UnaryPropagator
|
|
288
|
+
(Space* home, View y0, bool fd)
|
|
289
|
+
: Propagator(home,fd), x0(y0) {
|
|
290
|
+
x0.subscribe(home,this,pc);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
template <class View, PropCond pc>
|
|
294
|
+
forceinline
|
|
295
|
+
UnaryPropagator<View,pc>::UnaryPropagator
|
|
296
|
+
(Space* home, bool share, UnaryPropagator<View,pc>& p)
|
|
297
|
+
: Propagator(home,share,p) {
|
|
298
|
+
x0.update(home,share,p.x0);
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
template <class View, PropCond pc>
|
|
302
|
+
forceinline
|
|
303
|
+
UnaryPropagator<View,pc>::UnaryPropagator
|
|
304
|
+
(Space* home, bool share, Propagator& p, View y0)
|
|
305
|
+
: Propagator(home,share,p) {
|
|
306
|
+
x0.update(home,share,y0);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
template <class View, PropCond pc>
|
|
310
|
+
PropCost
|
|
311
|
+
UnaryPropagator<View,pc>::cost(void) const {
|
|
312
|
+
return PC_UNARY_LO;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
template <class View, PropCond pc>
|
|
316
|
+
size_t
|
|
317
|
+
UnaryPropagator<View,pc>::dispose(Space* home) {
|
|
318
|
+
if (!home->failed())
|
|
319
|
+
x0.cancel(home,this,pc);
|
|
320
|
+
(void) Propagator::dispose(home);
|
|
321
|
+
return sizeof(*this);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
/*
|
|
326
|
+
* Binary propagators
|
|
327
|
+
*
|
|
328
|
+
*/
|
|
329
|
+
|
|
330
|
+
template <class View, PropCond pc>
|
|
331
|
+
BinaryPropagator<View,pc>::BinaryPropagator
|
|
332
|
+
(Space* home, View y0, View y1, bool fd)
|
|
333
|
+
: Propagator(home,fd), x0(y0), x1(y1) {
|
|
334
|
+
x0.subscribe(home,this,pc);
|
|
335
|
+
x1.subscribe(home,this,pc);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
template <class View, PropCond pc>
|
|
339
|
+
forceinline
|
|
340
|
+
BinaryPropagator<View,pc>::BinaryPropagator
|
|
341
|
+
(Space* home, bool share, BinaryPropagator<View,pc>& p)
|
|
342
|
+
: Propagator(home,share,p) {
|
|
343
|
+
x0.update(home,share,p.x0);
|
|
344
|
+
x1.update(home,share,p.x1);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
template <class View, PropCond pc>
|
|
348
|
+
forceinline
|
|
349
|
+
BinaryPropagator<View,pc>::BinaryPropagator
|
|
350
|
+
(Space* home, bool share, Propagator& p, View y0, View y1)
|
|
351
|
+
: Propagator(home,share,p) {
|
|
352
|
+
x0.update(home,share,y0);
|
|
353
|
+
x1.update(home,share,y1);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
template <class View, PropCond pc>
|
|
357
|
+
PropCost
|
|
358
|
+
BinaryPropagator<View,pc>::cost(void) const {
|
|
359
|
+
return PC_BINARY_LO;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
template <class View, PropCond pc>
|
|
363
|
+
size_t
|
|
364
|
+
BinaryPropagator<View,pc>::dispose(Space* home) {
|
|
365
|
+
if (!home->failed()) {
|
|
366
|
+
x0.cancel(home,this,pc);
|
|
367
|
+
x1.cancel(home,this,pc);
|
|
368
|
+
}
|
|
369
|
+
(void) Propagator::dispose(home);
|
|
370
|
+
return sizeof(*this);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
/*
|
|
375
|
+
* Ternary propagators
|
|
376
|
+
*
|
|
377
|
+
*/
|
|
378
|
+
|
|
379
|
+
template <class View, PropCond pc>
|
|
380
|
+
TernaryPropagator<View,pc>::TernaryPropagator
|
|
381
|
+
(Space* home, View y0, View y1, View y2, bool fd)
|
|
382
|
+
: Propagator(home,fd), x0(y0), x1(y1), x2(y2) {
|
|
383
|
+
x0.subscribe(home,this,pc);
|
|
384
|
+
x1.subscribe(home,this,pc);
|
|
385
|
+
x2.subscribe(home,this,pc);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
template <class View, PropCond pc>
|
|
389
|
+
forceinline
|
|
390
|
+
TernaryPropagator<View,pc>::TernaryPropagator
|
|
391
|
+
(Space* home, bool share, TernaryPropagator<View,pc>& p)
|
|
392
|
+
: Propagator(home,share,p) {
|
|
393
|
+
x0.update(home,share,p.x0);
|
|
394
|
+
x1.update(home,share,p.x1);
|
|
395
|
+
x2.update(home,share,p.x2);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
template <class View, PropCond pc>
|
|
399
|
+
forceinline
|
|
400
|
+
TernaryPropagator<View,pc>::TernaryPropagator
|
|
401
|
+
(Space* home, bool share, Propagator& p, View y0, View y1, View y2)
|
|
402
|
+
: Propagator(home,share,p) {
|
|
403
|
+
x0.update(home,share,y0);
|
|
404
|
+
x1.update(home,share,y1);
|
|
405
|
+
x2.update(home,share,y2);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
template <class View, PropCond pc>
|
|
409
|
+
PropCost
|
|
410
|
+
TernaryPropagator<View,pc>::cost(void) const {
|
|
411
|
+
return PC_TERNARY_LO;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
template <class View, PropCond pc>
|
|
415
|
+
size_t
|
|
416
|
+
TernaryPropagator<View,pc>::dispose(Space* home) {
|
|
417
|
+
if (!home->failed()) {
|
|
418
|
+
x0.cancel(home,this,pc);
|
|
419
|
+
x1.cancel(home,this,pc);
|
|
420
|
+
x2.cancel(home,this,pc);
|
|
421
|
+
}
|
|
422
|
+
(void) Propagator::dispose(home);
|
|
423
|
+
return sizeof(*this);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
/*
|
|
428
|
+
* Nary propagators
|
|
429
|
+
*
|
|
430
|
+
*/
|
|
431
|
+
|
|
432
|
+
template <class View, PropCond pc>
|
|
433
|
+
NaryPropagator<View,pc>::NaryPropagator
|
|
434
|
+
(Space* home, ViewArray<View>& y, bool fd)
|
|
435
|
+
: Propagator(home,fd), x(y) {
|
|
436
|
+
x.subscribe(home,this,pc);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
template <class View, PropCond pc>
|
|
440
|
+
forceinline
|
|
441
|
+
NaryPropagator<View,pc>::NaryPropagator
|
|
442
|
+
(Space* home, bool share, NaryPropagator<View,pc>& p)
|
|
443
|
+
: Propagator(home,share,p) {
|
|
444
|
+
x.update(home,share,p.x);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
template <class View, PropCond pc>
|
|
448
|
+
forceinline
|
|
449
|
+
NaryPropagator<View,pc>::NaryPropagator
|
|
450
|
+
(Space* home, bool share, Propagator& p, ViewArray<View>& x0)
|
|
451
|
+
: Propagator(home,share,p) {
|
|
452
|
+
x.update(home,share,x0);
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
template <class View, PropCond pc>
|
|
456
|
+
PropCost
|
|
457
|
+
NaryPropagator<View,pc>::cost(void) const {
|
|
458
|
+
return cost_lo(x.size(), PC_LINEAR_LO);
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
template <class View, PropCond pc>
|
|
462
|
+
size_t
|
|
463
|
+
NaryPropagator<View,pc>::dispose(Space* home) {
|
|
464
|
+
if (!home->failed())
|
|
465
|
+
x.cancel(home,this,pc);
|
|
466
|
+
(void) Propagator::dispose(home);
|
|
467
|
+
return sizeof(*this);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
|
|
471
|
+
/*
|
|
472
|
+
* NaryOne (one additional variable) propagators
|
|
473
|
+
*
|
|
474
|
+
*/
|
|
475
|
+
|
|
476
|
+
template <class View, PropCond pc>
|
|
477
|
+
NaryOnePropagator<View,pc>::NaryOnePropagator
|
|
478
|
+
(Space* home, ViewArray<View>& x0, View y0, bool fd)
|
|
479
|
+
: Propagator(home,fd), x(x0), y(y0) {
|
|
480
|
+
x.subscribe(home,this,pc);
|
|
481
|
+
y.subscribe(home,this,pc);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
template <class View, PropCond pc>
|
|
485
|
+
forceinline
|
|
486
|
+
NaryOnePropagator<View,pc>::NaryOnePropagator
|
|
487
|
+
(Space* home, bool share, NaryOnePropagator<View,pc>& p)
|
|
488
|
+
: Propagator(home,share,p) {
|
|
489
|
+
x.update(home,share,p.x);
|
|
490
|
+
y.update(home,share,p.y);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
template <class View, PropCond pc>
|
|
494
|
+
forceinline
|
|
495
|
+
NaryOnePropagator<View,pc>::NaryOnePropagator
|
|
496
|
+
(Space* home, bool share, Propagator& p, ViewArray<View>& x0, View y0)
|
|
497
|
+
: Propagator(home,share,p) {
|
|
498
|
+
x.update(home,share,x0);
|
|
499
|
+
y.update(home,share,y0);
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
template <class View, PropCond pc>
|
|
503
|
+
PropCost
|
|
504
|
+
NaryOnePropagator<View,pc>::cost(void) const {
|
|
505
|
+
return cost_lo(x.size()+1, PC_LINEAR_LO);
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
template <class View, PropCond pc>
|
|
509
|
+
size_t
|
|
510
|
+
NaryOnePropagator<View,pc>::dispose(Space* home) {
|
|
511
|
+
if (!home->failed()) {
|
|
512
|
+
x.cancel(home,this,pc);
|
|
513
|
+
y.cancel(home,this,pc);
|
|
514
|
+
}
|
|
515
|
+
(void) Propagator::dispose(home);
|
|
516
|
+
return sizeof(*this);
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
/*
|
|
521
|
+
* Inhomogeneous binary propagators
|
|
522
|
+
*
|
|
523
|
+
*/
|
|
524
|
+
|
|
525
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
526
|
+
InhomBinaryPropagator<View0,pc0,View1,pc1>::InhomBinaryPropagator
|
|
527
|
+
(Space* home, View0 y0, View1 y1, bool fd)
|
|
528
|
+
: Propagator(home,fd), x0(y0), x1(y1) {
|
|
529
|
+
x0.subscribe(home,this,pc0);
|
|
530
|
+
x1.subscribe(home,this,pc1);
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
534
|
+
forceinline
|
|
535
|
+
InhomBinaryPropagator<View0,pc0,View1,pc1>::InhomBinaryPropagator
|
|
536
|
+
(Space* home, bool share, InhomBinaryPropagator<View0,pc0,View1,pc1>& p)
|
|
537
|
+
: Propagator(home,share,p) {
|
|
538
|
+
x0.update(home,share,p.x0);
|
|
539
|
+
x1.update(home,share,p.x1);
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
543
|
+
forceinline
|
|
544
|
+
InhomBinaryPropagator<View0,pc0,View1,pc1>::InhomBinaryPropagator
|
|
545
|
+
(Space* home, bool share, Propagator& p, View0 y0, View1 y1)
|
|
546
|
+
: Propagator(home,share,p) {
|
|
547
|
+
x0.update(home,share,y0);
|
|
548
|
+
x1.update(home,share,y1);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
552
|
+
PropCost
|
|
553
|
+
InhomBinaryPropagator<View0,pc0,View1,pc1>::cost(void) const {
|
|
554
|
+
return PC_BINARY_LO;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
558
|
+
size_t
|
|
559
|
+
InhomBinaryPropagator<View0,pc0,View1,pc1>::dispose(Space* home) {
|
|
560
|
+
if (!home->failed()) {
|
|
561
|
+
x0.cancel(home,this,pc0);
|
|
562
|
+
x1.cancel(home,this,pc1);
|
|
563
|
+
}
|
|
564
|
+
(void) Propagator::dispose(home);
|
|
565
|
+
return sizeof(*this);
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
|
|
569
|
+
/*
|
|
570
|
+
* Inhomogeneous ternary propagators
|
|
571
|
+
*
|
|
572
|
+
*/
|
|
573
|
+
|
|
574
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1,
|
|
575
|
+
class View2, PropCond pc2>
|
|
576
|
+
InhomTernaryPropagator<View0,pc0,View1,pc1,View2,pc2>::
|
|
577
|
+
InhomTernaryPropagator(Space* home, View0 y0, View1 y1, View2 y2, bool fd)
|
|
578
|
+
: Propagator(home,fd), x0(y0), x1(y1), x2(y2) {
|
|
579
|
+
x0.subscribe(home,this,pc0);
|
|
580
|
+
x1.subscribe(home,this,pc1);
|
|
581
|
+
x2.subscribe(home,this,pc2);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1,
|
|
585
|
+
class View2, PropCond pc2>
|
|
586
|
+
forceinline
|
|
587
|
+
InhomTernaryPropagator<View0,pc0,View1,pc1,View2,pc2>::
|
|
588
|
+
InhomTernaryPropagator(Space* home, bool share,
|
|
589
|
+
InhomTernaryPropagator<View0,pc0,View1,pc1,
|
|
590
|
+
View2,pc2>& p)
|
|
591
|
+
: Propagator(home,share,p) {
|
|
592
|
+
x0.update(home,share,p.x0);
|
|
593
|
+
x1.update(home,share,p.x1);
|
|
594
|
+
x2.update(home,share,p.x2);
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1,
|
|
598
|
+
class View2, PropCond pc2>
|
|
599
|
+
forceinline
|
|
600
|
+
InhomTernaryPropagator<View0,pc0,View1,pc1,View2,pc2>::InhomTernaryPropagator
|
|
601
|
+
(Space* home, bool share, Propagator& p, View0 y0, View1 y1, View2 y2)
|
|
602
|
+
: Propagator(home,share,p) {
|
|
603
|
+
x0.update(home,share,y0);
|
|
604
|
+
x1.update(home,share,y1);
|
|
605
|
+
x2.update(home,share,y2);
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1,
|
|
609
|
+
class View2, PropCond pc2>
|
|
610
|
+
PropCost
|
|
611
|
+
InhomTernaryPropagator<View0,pc0,View1,pc1,View2,pc2>::cost(void) const {
|
|
612
|
+
return PC_BINARY_LO;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1,
|
|
616
|
+
class View2, PropCond pc2>
|
|
617
|
+
size_t
|
|
618
|
+
InhomTernaryPropagator<View0,pc0,View1,pc1,View2,pc2>::
|
|
619
|
+
dispose(Space* home) {
|
|
620
|
+
if (!home->failed()) {
|
|
621
|
+
x0.cancel(home,this,pc0);
|
|
622
|
+
x1.cancel(home,this,pc1);
|
|
623
|
+
x2.cancel(home,this,pc2);
|
|
624
|
+
}
|
|
625
|
+
(void) Propagator::dispose(home);
|
|
626
|
+
return sizeof(*this);
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
/*
|
|
631
|
+
* InhomNaryOne (one additional variable) propagators
|
|
632
|
+
*
|
|
633
|
+
*/
|
|
634
|
+
|
|
635
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
636
|
+
InhomNaryOnePropagator<View0,pc0,View1,pc1>::InhomNaryOnePropagator
|
|
637
|
+
(Space* home, ViewArray<View0>& x0, View1 y0, bool fd)
|
|
638
|
+
: Propagator(home,fd), x(x0), y(y0) {
|
|
639
|
+
x.subscribe(home,this,pc0);
|
|
640
|
+
y.subscribe(home,this,pc1);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
644
|
+
forceinline
|
|
645
|
+
InhomNaryOnePropagator<View0,pc0,View1,pc1>::InhomNaryOnePropagator
|
|
646
|
+
(Space* home, bool share, InhomNaryOnePropagator<View0,pc0,View1,pc1>& p)
|
|
647
|
+
: Propagator(home,share,p) {
|
|
648
|
+
x.update(home,share,p.x);
|
|
649
|
+
y.update(home,share,p.y);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
653
|
+
forceinline
|
|
654
|
+
InhomNaryOnePropagator<View0,pc0,View1,pc1>::InhomNaryOnePropagator
|
|
655
|
+
(Space* home, bool share, Propagator& p, ViewArray<View0>& x0, View1 y0)
|
|
656
|
+
: Propagator(home,share,p) {
|
|
657
|
+
x.update(home,share,x0);
|
|
658
|
+
y.update(home,share,y0);
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
662
|
+
PropCost
|
|
663
|
+
InhomNaryOnePropagator<View0,pc0,View1,pc1>::cost(void) const {
|
|
664
|
+
return cost_lo(x.size()+1, PC_LINEAR_LO);
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
template <class View0, PropCond pc0, class View1, PropCond pc1>
|
|
668
|
+
size_t
|
|
669
|
+
InhomNaryOnePropagator<View0,pc0,View1,pc1>::dispose(Space* home) {
|
|
670
|
+
if (!home->failed()) {
|
|
671
|
+
x.cancel(home,this,pc0);
|
|
672
|
+
y.cancel(home,this,pc1);
|
|
673
|
+
}
|
|
674
|
+
(void) Propagator::dispose(home);
|
|
675
|
+
return sizeof(*this);
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// STATISTICS: kernel-other
|