Package not found. Please check the package name and try again.
gecoder-with-gecode 0.7.1 → 0.8.0
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 +7 -0
- data/README +10 -1
- data/ext/extconf.rb +24 -7
- data/ext/gecode-2.1.1/LICENSE +25 -0
- data/ext/gecode-2.1.1/Makefile.contribs +86 -0
- data/ext/gecode-2.1.1/Makefile.dep +7622 -0
- data/ext/gecode-2.1.1/Makefile.in +1568 -0
- data/ext/gecode-2.1.1/changelog.in +2459 -0
- data/ext/gecode-2.1.1/configure +11631 -0
- data/ext/gecode-2.1.1/configure.ac +249 -0
- data/ext/gecode-2.1.1/configure.ac.in +245 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/contribs/README +0 -0
- data/ext/gecode-2.1.1/contribs/qecode/Doxyfile +263 -0
- data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.cc +82 -0
- data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.hh +37 -0
- data/ext/gecode-2.1.1/contribs/qecode/Makefile.in.in +162 -0
- data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.cc +172 -0
- data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.hh +63 -0
- data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +37 -0
- data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +35 -0
- data/ext/gecode-2.1.1/contribs/qecode/configure +2264 -0
- data/ext/gecode-2.1.1/contribs/qecode/configure.ac +23 -0
- data/ext/gecode-2.1.1/contribs/qecode/examples/COMPILING +13 -0
- data/ext/gecode-2.1.1/contribs/qecode/examples/MatrixGame.cpp +144 -0
- data/ext/gecode-2.1.1/contribs/qecode/examples/NimFibo.cpp +73 -0
- data/ext/gecode-2.1.1/contribs/qecode/examples/stress_test.cpp +179 -0
- data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +34 -0
- data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +46 -0
- data/ext/gecode-2.1.1/contribs/qecode/heap.cc +151 -0
- data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +595 -0
- data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +184 -0
- data/ext/gecode-2.1.1/contribs/qecode/myDom.cc +39 -0
- data/ext/gecode-2.1.1/contribs/qecode/myspace.cc +69 -0
- data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +69 -0
- data/ext/gecode-2.1.1/contribs/qecode/qecode.hh +56 -0
- data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +145 -0
- data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +247 -0
- data/ext/gecode-2.1.1/contribs/qecode/qsolver.cc +168 -0
- data/ext/gecode-2.1.1/contribs/qecode/qsolver.hh +73 -0
- data/ext/gecode-2.1.1/contribs/qecode/shortdesc.ac +1 -0
- data/ext/gecode-2.1.1/contribs/qecode/valueHeuristic.hh +91 -0
- data/ext/gecode-2.1.1/contribs/qecode/vartype.hh +31 -0
- data/ext/gecode-2.1.1/contribs/qecode/warner.cc +101 -0
- data/ext/gecode-2.1.1/contribs/qecode/warner.hh +83 -0
- data/ext/gecode-2.1.1/doxygen/doxygen.conf.in +1270 -0
- data/ext/gecode-2.1.1/doxygen/doxygen.hh.in +1111 -0
- data/ext/gecode-2.1.1/doxygen/reflection.hh +417 -0
- data/ext/gecode-2.1.1/gecode.m4 +956 -0
- data/ext/gecode-2.1.1/gecode/cpltset.hh +797 -0
- data/ext/gecode-2.1.1/gecode/cpltset/array.cc +121 -0
- data/ext/gecode-2.1.1/gecode/cpltset/array.icc +81 -0
- data/ext/gecode-2.1.1/gecode/cpltset/bddmanager.cc +59 -0
- data/ext/gecode-2.1.1/gecode/cpltset/bddmanager.icc +448 -0
- data/ext/gecode-2.1.1/gecode/cpltset/branch.cc +68 -0
- data/ext/gecode-2.1.1/gecode/cpltset/branch.hh +208 -0
- data/ext/gecode-2.1.1/gecode/cpltset/branch/select-val.icc +167 -0
- data/ext/gecode-2.1.1/gecode/cpltset/branch/select-view.icc +143 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/atmost.cc +472 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/cardinality.cc +69 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/distinct.cc +83 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/dom.cc +147 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/partition.cc +383 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/rangeroots.cc +466 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/rel.cc +530 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/select.cc +126 -0
- data/ext/gecode-2.1.1/gecode/cpltset/constraints/singleton.cc +55 -0
- data/ext/gecode-2.1.1/gecode/cpltset/exception.icc +172 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators.hh +335 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators/binary.icc +260 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators/nary.icc +210 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators/naryone.icc +165 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators/narytwo.icc +191 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators/singleton.icc +130 -0
- data/ext/gecode-2.1.1/gecode/cpltset/propagators/unary.icc +132 -0
- data/ext/gecode-2.1.1/gecode/cpltset/support.cc +673 -0
- data/ext/gecode-2.1.1/gecode/cpltset/support.icc +696 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var-imp.icc +487 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.cc +926 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.icc +687 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var-imp/cpltset.vis +86 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var/cpltset.cc +101 -0
- data/ext/gecode-2.1.1/gecode/cpltset/var/cpltset.icc +219 -0
- data/ext/gecode-2.1.1/gecode/cpltset/view.icc +231 -0
- data/ext/gecode-2.1.1/gecode/cpltset/view/cpltset.icc +420 -0
- data/ext/gecode-2.1.1/gecode/cpltset/view/print.cc +166 -0
- data/ext/gecode-2.1.1/gecode/gist.hh +162 -0
- data/ext/gecode-2.1.1/gecode/gist/addchild.cc +191 -0
- data/ext/gecode-2.1.1/gecode/gist/addchild.hh +76 -0
- data/ext/gecode-2.1.1/gecode/gist/addvisualisationdialog.cc +139 -0
- data/ext/gecode-2.1.1/gecode/gist/addvisualisationdialog.hh +78 -0
- data/ext/gecode-2.1.1/gecode/gist/analysiscursor.cc +115 -0
- data/ext/gecode-2.1.1/gecode/gist/analysiscursor.hh +77 -0
- data/ext/gecode-2.1.1/gecode/gist/better.hh +59 -0
- data/ext/gecode-2.1.1/gecode/gist/config.cc +61 -0
- data/ext/gecode-2.1.1/gecode/gist/config.hh +62 -0
- data/ext/gecode-2.1.1/gecode/gist/drawingcursor.cc +245 -0
- data/ext/gecode-2.1.1/gecode/gist/drawingcursor.hh +101 -0
- data/ext/gecode-2.1.1/gecode/gist/gecodelogo.icc +522 -0
- data/ext/gecode-2.1.1/gecode/gist/gist.cc +129 -0
- data/ext/gecode-2.1.1/gecode/gist/gist.icc +76 -0
- data/ext/gecode-2.1.1/gecode/gist/mainwindow.cc +254 -0
- data/ext/gecode-2.1.1/gecode/gist/mainwindow.hh +86 -0
- data/ext/gecode-2.1.1/gecode/gist/node.cc +100 -0
- data/ext/gecode-2.1.1/gecode/gist/node.hh +89 -0
- data/ext/gecode-2.1.1/gecode/gist/nodecursor.cc +124 -0
- data/ext/gecode-2.1.1/gecode/gist/nodecursor.hh +122 -0
- data/ext/gecode-2.1.1/gecode/gist/nodecursor.icc +79 -0
- data/ext/gecode-2.1.1/gecode/gist/nodevisitor.hh +91 -0
- data/ext/gecode-2.1.1/gecode/gist/nodevisitor.icc +112 -0
- data/ext/gecode-2.1.1/gecode/gist/postscript.cc +543 -0
- data/ext/gecode-2.1.1/gecode/gist/postscript.hh +56 -0
- data/ext/gecode-2.1.1/gecode/gist/preferences.cc +110 -0
- data/ext/gecode-2.1.1/gecode/gist/preferences.hh +76 -0
- data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.cc +55 -0
- data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.hh +58 -0
- data/ext/gecode-2.1.1/gecode/gist/shapelist.cc +331 -0
- data/ext/gecode-2.1.1/gecode/gist/shapelist.hh +140 -0
- data/ext/gecode-2.1.1/gecode/gist/spacenode.cc +531 -0
- data/ext/gecode-2.1.1/gecode/gist/spacenode.hh +224 -0
- data/ext/gecode-2.1.1/gecode/gist/test.cc +78 -0
- data/ext/gecode-2.1.1/gecode/gist/textoutput.cc +114 -0
- data/ext/gecode-2.1.1/gecode/gist/textoutput.hh +67 -0
- data/ext/gecode-2.1.1/gecode/gist/treecanvas.cc +1140 -0
- data/ext/gecode-2.1.1/gecode/gist/treecanvas.hh +324 -0
- data/ext/gecode-2.1.1/gecode/gist/ui_addchild.hh +163 -0
- data/ext/gecode-2.1.1/gecode/gist/ui_addvisualisationdialog.hh +163 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.cc +175 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.hh +71 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.cc +219 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.hh +73 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayitem.hh +123 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayview.cc +146 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayview.hh +96 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayviewt.hh +105 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/varitem.cc +68 -0
- data/ext/gecode-2.1.1/gecode/gist/visualisation/varitem.hh +67 -0
- data/ext/gecode-2.1.1/gecode/gist/visualnode.cc +303 -0
- data/ext/gecode-2.1.1/gecode/gist/visualnode.hh +166 -0
- data/ext/gecode-2.1.1/gecode/int.hh +2035 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic.cc +136 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic.hh +440 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +279 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +253 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +522 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +218 -0
- data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +138 -0
- data/ext/gecode-2.1.1/gecode/int/array.cc +74 -0
- data/ext/gecode-2.1.1/gecode/int/array.icc +115 -0
- data/ext/gecode-2.1.1/gecode/int/bool.cc +642 -0
- data/ext/gecode-2.1.1/gecode/int/bool.hh +487 -0
- data/ext/gecode-2.1.1/gecode/int/bool/base.icc +156 -0
- data/ext/gecode-2.1.1/gecode/int/bool/eq.icc +239 -0
- data/ext/gecode-2.1.1/gecode/int/bool/eqv.icc +179 -0
- data/ext/gecode-2.1.1/gecode/int/bool/lq.icc +147 -0
- data/ext/gecode-2.1.1/gecode/int/bool/or.icc +1000 -0
- data/ext/gecode-2.1.1/gecode/int/branch.cc +301 -0
- data/ext/gecode-2.1.1/gecode/int/branch.hh +576 -0
- data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +338 -0
- data/ext/gecode-2.1.1/gecode/int/branch/select-view.icc +421 -0
- data/ext/gecode-2.1.1/gecode/int/channel.cc +114 -0
- data/ext/gecode-2.1.1/gecode/int/channel.hh +259 -0
- data/ext/gecode-2.1.1/gecode/int/channel/base.icc +86 -0
- data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +347 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-multi.cc +231 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-multi.icc +70 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-single.cc +97 -0
- data/ext/gecode-2.1.1/gecode/int/channel/link-single.icc +71 -0
- data/ext/gecode-2.1.1/gecode/int/channel/val.icc +276 -0
- data/ext/gecode-2.1.1/gecode/int/circuit.cc +63 -0
- data/ext/gecode-2.1.1/gecode/int/circuit.hh +175 -0
- data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +271 -0
- data/ext/gecode-2.1.1/gecode/int/circuit/dom.icc +146 -0
- data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +122 -0
- data/ext/gecode-2.1.1/gecode/int/count.cc +310 -0
- data/ext/gecode-2.1.1/gecode/int/count.hh +487 -0
- data/ext/gecode-2.1.1/gecode/int/count/int.icc +619 -0
- data/ext/gecode-2.1.1/gecode/int/count/rel.icc +144 -0
- data/ext/gecode-2.1.1/gecode/int/count/view.icc +449 -0
- data/ext/gecode-2.1.1/gecode/int/cumulatives.cc +226 -0
- data/ext/gecode-2.1.1/gecode/int/cumulatives.hh +141 -0
- data/ext/gecode-2.1.1/gecode/int/cumulatives/val.icc +429 -0
- data/ext/gecode-2.1.1/gecode/int/distinct.cc +108 -0
- data/ext/gecode-2.1.1/gecode/int/distinct.hh +341 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/bilink.icc +89 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/bnd.icc +378 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/combptr.icc +78 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +750 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/edge.icc +118 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/node.icc +147 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +136 -0
- data/ext/gecode-2.1.1/gecode/int/distinct/val.icc +209 -0
- data/ext/gecode-2.1.1/gecode/int/dom.cc +116 -0
- data/ext/gecode-2.1.1/gecode/int/dom.hh +134 -0
- data/ext/gecode-2.1.1/gecode/int/dom/range.icc +129 -0
- data/ext/gecode-2.1.1/gecode/int/dom/spec.icc +151 -0
- data/ext/gecode-2.1.1/gecode/int/element.cc +156 -0
- data/ext/gecode-2.1.1/gecode/int/element.hh +239 -0
- data/ext/gecode-2.1.1/gecode/int/element/int.icc +441 -0
- data/ext/gecode-2.1.1/gecode/int/element/view.icc +584 -0
- data/ext/gecode-2.1.1/gecode/int/exception.icc +163 -0
- data/ext/gecode-2.1.1/gecode/int/extensional.cc +138 -0
- data/ext/gecode-2.1.1/gecode/int/extensional.hh +415 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/base.icc +160 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/basic.icc +166 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/bitset.icc +113 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +565 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/dfa.icc +241 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/incremental.icc +393 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/layered-graph.icc +604 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.cc +311 -0
- data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.icc +207 -0
- data/ext/gecode-2.1.1/gecode/int/gcc.cc +374 -0
- data/ext/gecode-2.1.1/gecode/int/gcc.hh +329 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/bnd.icc +660 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +531 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/gccbndsup.icc +780 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/graphsup.icc +2422 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/lbc.icc +391 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/occur.icc +829 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/ubc.icc +255 -0
- data/ext/gecode-2.1.1/gecode/int/gcc/val.icc +400 -0
- data/ext/gecode-2.1.1/gecode/int/int-set.cc +153 -0
- data/ext/gecode-2.1.1/gecode/int/int-set.icc +191 -0
- data/ext/gecode-2.1.1/gecode/int/limits.icc +54 -0
- data/ext/gecode-2.1.1/gecode/int/linear-bool.cc +220 -0
- data/ext/gecode-2.1.1/gecode/int/linear-int.cc +240 -0
- data/ext/gecode-2.1.1/gecode/int/linear.hh +1849 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-int.icc +791 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +433 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-scale.icc +854 -0
- data/ext/gecode-2.1.1/gecode/int/linear/bool-view.icc +399 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +605 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +539 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-nary.icc +1004 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-noview.icc +385 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +493 -0
- data/ext/gecode-2.1.1/gecode/int/linear/int-ter.icc +357 -0
- data/ext/gecode-2.1.1/gecode/int/linear/post.icc +146 -0
- data/ext/gecode-2.1.1/gecode/int/propagator.icc +240 -0
- data/ext/gecode-2.1.1/gecode/int/rel.cc +431 -0
- data/ext/gecode-2.1.1/gecode/int/rel.hh +657 -0
- data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +848 -0
- data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +248 -0
- data/ext/gecode-2.1.1/gecode/int/rel/lq-le.icc +352 -0
- data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +269 -0
- data/ext/gecode-2.1.1/gecode/int/sorted.cc +91 -0
- data/ext/gecode-2.1.1/gecode/int/sorted.hh +117 -0
- data/ext/gecode-2.1.1/gecode/int/sorted/matching.icc +182 -0
- data/ext/gecode-2.1.1/gecode/int/sorted/narrowing.icc +257 -0
- data/ext/gecode-2.1.1/gecode/int/sorted/order.icc +208 -0
- data/ext/gecode-2.1.1/gecode/int/sorted/propagate.icc +669 -0
- data/ext/gecode-2.1.1/gecode/int/sorted/sortsup.icc +596 -0
- data/ext/gecode-2.1.1/gecode/int/unshare.cc +148 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp.icc +745 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +104 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/bool.icc +423 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/bool.vis +69 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/delta.icc +64 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/int.cc +407 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/int.icc +1004 -0
- data/ext/gecode-2.1.1/gecode/int/var-imp/int.vis +195 -0
- data/ext/gecode-2.1.1/gecode/int/var/bool.cc +72 -0
- data/ext/gecode-2.1.1/gecode/int/var/bool.icc +126 -0
- data/ext/gecode-2.1.1/gecode/int/var/int.cc +79 -0
- data/ext/gecode-2.1.1/gecode/int/var/int.icc +151 -0
- data/ext/gecode-2.1.1/gecode/int/view.icc +1894 -0
- data/ext/gecode-2.1.1/gecode/int/view/bool.icc +598 -0
- data/ext/gecode-2.1.1/gecode/int/view/constint.icc +392 -0
- data/ext/gecode-2.1.1/gecode/int/view/int.icc +301 -0
- data/ext/gecode-2.1.1/gecode/int/view/iter.icc +65 -0
- data/ext/gecode-2.1.1/gecode/int/view/minus.icc +372 -0
- data/ext/gecode-2.1.1/gecode/int/view/offset.icc +362 -0
- data/ext/gecode-2.1.1/gecode/int/view/print.cc +133 -0
- data/ext/gecode-2.1.1/gecode/int/view/rtest.icc +231 -0
- data/ext/gecode-2.1.1/gecode/int/view/scale.icc +456 -0
- data/ext/gecode-2.1.1/gecode/int/view/zero.icc +384 -0
- data/ext/gecode-2.1.1/gecode/iter.hh +90 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-add.icc +144 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-append.icc +222 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-array.icc +138 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-cache.icc +337 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-compl.icc +220 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-diff.icc +142 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-empty.icc +111 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-inter.icc +216 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-minmax.icc +118 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-minus.icc +150 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-offset.icc +127 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-operations.icc +157 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-scale.icc +238 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-singleton-append.icc +111 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-singleton.icc +86 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-size.icc +146 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-union.icc +224 -0
- data/ext/gecode-2.1.1/gecode/iter/ranges-values.icc +140 -0
- data/ext/gecode-2.1.1/gecode/iter/values-array.icc +119 -0
- data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +130 -0
- data/ext/gecode-2.1.1/gecode/iter/values-offset.icc +113 -0
- data/ext/gecode-2.1.1/gecode/iter/values-ranges.icc +106 -0
- data/ext/gecode-2.1.1/gecode/iter/values-singleton.icc +109 -0
- data/ext/gecode-2.1.1/gecode/iter/values-unique.icc +118 -0
- data/ext/gecode-2.1.1/gecode/iter/virtual-ranges-compl.icc +261 -0
- data/ext/gecode-2.1.1/gecode/iter/virtual-ranges-inter.icc +241 -0
- data/ext/gecode-2.1.1/gecode/iter/virtual-ranges-union.icc +249 -0
- data/ext/gecode-2.1.1/gecode/iter/virtual-ranges.icc +140 -0
- data/ext/gecode-2.1.1/gecode/kernel.hh +182 -0
- data/ext/gecode-2.1.1/gecode/kernel/advisor.icc +104 -0
- data/ext/gecode-2.1.1/gecode/kernel/array.icc +1232 -0
- data/ext/gecode-2.1.1/gecode/kernel/branching.icc +447 -0
- data/ext/gecode-2.1.1/gecode/kernel/core.cc +473 -0
- data/ext/gecode-2.1.1/gecode/kernel/core.icc +2295 -0
- data/ext/gecode-2.1.1/gecode/kernel/exception.icc +101 -0
- data/ext/gecode-2.1.1/gecode/kernel/macros.icc +117 -0
- data/ext/gecode-2.1.1/gecode/kernel/memory-manager.cc +57 -0
- data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +458 -0
- data/ext/gecode-2.1.1/gecode/kernel/modevent.icc +69 -0
- data/ext/gecode-2.1.1/gecode/kernel/propagator.icc +845 -0
- data/ext/gecode-2.1.1/gecode/kernel/reflection.cc +921 -0
- data/ext/gecode-2.1.1/gecode/kernel/reflection.icc +1012 -0
- data/ext/gecode-2.1.1/gecode/kernel/shared-array.icc +286 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-imp.icc +433 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-map.cc +269 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-map.icc +227 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +72 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-type.cc +68 -0
- data/ext/gecode-2.1.1/gecode/kernel/var-type.icc +915 -0
- data/ext/gecode-2.1.1/gecode/kernel/var.icc +120 -0
- data/ext/gecode-2.1.1/gecode/kernel/view.icc +611 -0
- data/ext/gecode-2.1.1/gecode/minimodel.hh +1165 -0
- data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +179 -0
- data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.cc +327 -0
- data/ext/gecode-2.1.1/gecode/minimodel/bool-expr.icc +131 -0
- data/ext/gecode-2.1.1/gecode/minimodel/bool-rel.icc +83 -0
- data/ext/gecode-2.1.1/gecode/minimodel/exception.icc +84 -0
- data/ext/gecode-2.1.1/gecode/minimodel/lin-expr.icc +374 -0
- data/ext/gecode-2.1.1/gecode/minimodel/lin-rel.icc +324 -0
- data/ext/gecode-2.1.1/gecode/minimodel/matrix.icc +144 -0
- data/ext/gecode-2.1.1/gecode/minimodel/reg.cc +823 -0
- data/ext/gecode-2.1.1/gecode/search.hh +752 -0
- data/ext/gecode-2.1.1/gecode/search/bab.cc +169 -0
- data/ext/gecode-2.1.1/gecode/search/bab.icc +117 -0
- data/ext/gecode-2.1.1/gecode/search/dfs.cc +79 -0
- data/ext/gecode-2.1.1/gecode/search/dfs.icc +169 -0
- data/ext/gecode-2.1.1/gecode/search/engine-ctrl.icc +131 -0
- data/ext/gecode-2.1.1/gecode/search/lds.cc +265 -0
- data/ext/gecode-2.1.1/gecode/search/lds.icc +73 -0
- data/ext/gecode-2.1.1/gecode/search/options.cc +46 -0
- data/ext/gecode-2.1.1/gecode/search/options.icc +46 -0
- data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +237 -0
- data/ext/gecode-2.1.1/gecode/search/restart.icc +99 -0
- data/ext/gecode-2.1.1/gecode/search/statistics.icc +46 -0
- data/ext/gecode-2.1.1/gecode/search/stop.cc +74 -0
- data/ext/gecode-2.1.1/gecode/search/stop.icc +116 -0
- data/ext/gecode-2.1.1/gecode/serialization.hh +149 -0
- data/ext/gecode-2.1.1/gecode/serialization/boost.cc +78 -0
- data/ext/gecode-2.1.1/gecode/serialization/boost.icc +381 -0
- data/ext/gecode-2.1.1/gecode/serialization/flatzinc.cc +372 -0
- data/ext/gecode-2.1.1/gecode/serialization/javascript.cc +340 -0
- data/ext/gecode-2.1.1/gecode/serialization/javascript.hh +69 -0
- data/ext/gecode-2.1.1/gecode/serialization/register.cc +8142 -0
- data/ext/gecode-2.1.1/gecode/set.hh +970 -0
- data/ext/gecode-2.1.1/gecode/set/array.cc +114 -0
- data/ext/gecode-2.1.1/gecode/set/array.icc +77 -0
- data/ext/gecode-2.1.1/gecode/set/branch.cc +78 -0
- data/ext/gecode-2.1.1/gecode/set/branch.hh +213 -0
- data/ext/gecode-2.1.1/gecode/set/branch/select-val.icc +132 -0
- data/ext/gecode-2.1.1/gecode/set/branch/select-view.icc +148 -0
- data/ext/gecode-2.1.1/gecode/set/cardinality.cc +65 -0
- data/ext/gecode-2.1.1/gecode/set/convex.cc +59 -0
- data/ext/gecode-2.1.1/gecode/set/convex.hh +126 -0
- data/ext/gecode-2.1.1/gecode/set/convex/conv.cc +118 -0
- data/ext/gecode-2.1.1/gecode/set/convex/conv.icc +67 -0
- data/ext/gecode-2.1.1/gecode/set/convex/hull.cc +140 -0
- data/ext/gecode-2.1.1/gecode/set/convex/hull.icc +68 -0
- data/ext/gecode-2.1.1/gecode/set/distinct.cc +56 -0
- data/ext/gecode-2.1.1/gecode/set/distinct.hh +90 -0
- data/ext/gecode-2.1.1/gecode/set/distinct/atmostOne.cc +192 -0
- data/ext/gecode-2.1.1/gecode/set/distinct/atmostOne.icc +66 -0
- data/ext/gecode-2.1.1/gecode/set/dom.cc +232 -0
- data/ext/gecode-2.1.1/gecode/set/exception.icc +135 -0
- data/ext/gecode-2.1.1/gecode/set/int.cc +177 -0
- data/ext/gecode-2.1.1/gecode/set/int.hh +391 -0
- data/ext/gecode-2.1.1/gecode/set/int/card.icc +116 -0
- data/ext/gecode-2.1.1/gecode/set/int/channel-bool.icc +303 -0
- data/ext/gecode-2.1.1/gecode/set/int/channel-int.icc +174 -0
- data/ext/gecode-2.1.1/gecode/set/int/match.icc +224 -0
- data/ext/gecode-2.1.1/gecode/set/int/minmax.icc +228 -0
- data/ext/gecode-2.1.1/gecode/set/int/weights.icc +370 -0
- data/ext/gecode-2.1.1/gecode/set/limits.icc +62 -0
- data/ext/gecode-2.1.1/gecode/set/projectors-compiler.hh +164 -0
- data/ext/gecode-2.1.1/gecode/set/projectors.cc +143 -0
- data/ext/gecode-2.1.1/gecode/set/projectors.hh +438 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/compiler.cc +859 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/formula.cc +312 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/formula.icc +66 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/projector-set.cc +91 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/projector-set.icc +85 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/projector.cc +147 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/projector.icc +98 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/propagator.hh +168 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/propagator/card.icc +128 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/propagator/nary.icc +144 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/propagator/re-nary.cc +100 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/propagator/re-nary.icc +71 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/set-expr.cc +339 -0
- data/ext/gecode-2.1.1/gecode/set/projectors/set-expr.icc +237 -0
- data/ext/gecode-2.1.1/gecode/set/propagator.icc +125 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op-const.cc +332 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op.cc +197 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op.hh +353 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/common.icc +557 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/inter.icc +409 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/partition.icc +202 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/post.icc +223 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/subofunion.icc +192 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/superofinter.icc +193 -0
- data/ext/gecode-2.1.1/gecode/set/rel-op/union.icc +383 -0
- data/ext/gecode-2.1.1/gecode/set/rel.cc +258 -0
- data/ext/gecode-2.1.1/gecode/set/rel.hh +321 -0
- data/ext/gecode-2.1.1/gecode/set/rel/common.icc +125 -0
- data/ext/gecode-2.1.1/gecode/set/rel/eq.icc +139 -0
- data/ext/gecode-2.1.1/gecode/set/rel/nosubset.icc +128 -0
- data/ext/gecode-2.1.1/gecode/set/rel/nq.icc +208 -0
- data/ext/gecode-2.1.1/gecode/set/rel/re-eq.icc +179 -0
- data/ext/gecode-2.1.1/gecode/set/rel/re-subset.icc +172 -0
- data/ext/gecode-2.1.1/gecode/set/rel/subset.icc +119 -0
- data/ext/gecode-2.1.1/gecode/set/select.cc +135 -0
- data/ext/gecode-2.1.1/gecode/set/select.hh +233 -0
- data/ext/gecode-2.1.1/gecode/set/select/disjoint.cc +308 -0
- data/ext/gecode-2.1.1/gecode/set/select/disjoint.icc +75 -0
- data/ext/gecode-2.1.1/gecode/set/select/idxarray.hh +113 -0
- data/ext/gecode-2.1.1/gecode/set/select/idxarray.icc +155 -0
- data/ext/gecode-2.1.1/gecode/set/select/inter.icc +349 -0
- data/ext/gecode-2.1.1/gecode/set/select/union.icc +371 -0
- data/ext/gecode-2.1.1/gecode/set/select/unionConst.icc +334 -0
- data/ext/gecode-2.1.1/gecode/set/sequence.cc +69 -0
- data/ext/gecode-2.1.1/gecode/set/sequence.hh +134 -0
- data/ext/gecode-2.1.1/gecode/set/sequence/common.icc +99 -0
- data/ext/gecode-2.1.1/gecode/set/sequence/seq-u.cc +176 -0
- data/ext/gecode-2.1.1/gecode/set/sequence/seq-u.icc +79 -0
- data/ext/gecode-2.1.1/gecode/set/sequence/seq.cc +94 -0
- data/ext/gecode-2.1.1/gecode/set/sequence/seq.icc +69 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp.icc +737 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/delta.icc +78 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/integerset.cc +349 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/integerset.icc +484 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/iter.icc +63 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/set.cc +214 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/set.icc +532 -0
- data/ext/gecode-2.1.1/gecode/set/var-imp/set.vis +190 -0
- data/ext/gecode-2.1.1/gecode/set/var/set.cc +105 -0
- data/ext/gecode-2.1.1/gecode/set/var/set.icc +303 -0
- data/ext/gecode-2.1.1/gecode/set/view.icc +1503 -0
- data/ext/gecode-2.1.1/gecode/set/view/complement.icc +629 -0
- data/ext/gecode-2.1.1/gecode/set/view/const.icc +907 -0
- data/ext/gecode-2.1.1/gecode/set/view/offset.icc +497 -0
- data/ext/gecode-2.1.1/gecode/set/view/print.cc +141 -0
- data/ext/gecode-2.1.1/gecode/set/view/set.icc +275 -0
- data/ext/gecode-2.1.1/gecode/set/view/singleton.icc +438 -0
- data/ext/gecode-2.1.1/gecode/support.hh +110 -0
- data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +158 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/AUTHORS +11 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/ChangeLog +218 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/NEWS +200 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/README +128 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/bdd.h +939 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/bddio.c +596 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/bddop.c +2848 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/bddtree.h +62 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/bvec.c +1354 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/bvec.h +298 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/cache.c +104 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/cache.h +72 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/config.h +20 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/cppext.cc +626 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/fdd.c +1079 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/fdd.h +175 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/imatrix.c +151 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/imatrix.h +61 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/kernel.c +1555 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/kernel.h +244 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/pairs.c +336 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/prime.c +322 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/prime.h +50 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/reorder.c +2345 -0
- data/ext/gecode-2.1.1/gecode/support/buddy/tree.c +224 -0
- data/ext/gecode-2.1.1/gecode/support/cast.icc +52 -0
- data/ext/gecode-2.1.1/gecode/support/config.icc.in +80 -0
- data/ext/gecode-2.1.1/gecode/support/dynamic-array.icc +138 -0
- data/ext/gecode-2.1.1/gecode/support/dynamic-stack.icc +167 -0
- data/ext/gecode-2.1.1/gecode/support/exception.cc +65 -0
- data/ext/gecode-2.1.1/gecode/support/exception.icc +82 -0
- data/ext/gecode-2.1.1/gecode/support/macros.icc +103 -0
- data/ext/gecode-2.1.1/gecode/support/map.icc +207 -0
- data/ext/gecode-2.1.1/gecode/support/marked-pointer.icc +66 -0
- data/ext/gecode-2.1.1/gecode/support/memory.icc +220 -0
- data/ext/gecode-2.1.1/gecode/support/random.icc +121 -0
- data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +122 -0
- data/ext/gecode-2.1.1/gecode/support/sort.icc +210 -0
- data/ext/gecode-2.1.1/gecode/support/static-pqueue.icc +242 -0
- data/ext/gecode-2.1.1/gecode/support/static-stack.icc +125 -0
- data/ext/gecode-2.1.1/gecode/support/symbol.cc +226 -0
- data/ext/gecode-2.1.1/gecode/support/symbol.icc +130 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/install-sh +0 -0
- data/ext/gecode-2.1.1/misc/AppleHelpbookInfo.plist +26 -0
- data/ext/gecode-2.1.1/misc/allexamples.perl +60 -0
- data/ext/gecode-2.1.1/misc/debian/Makefile.am +44 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/changelog +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/control +0 -0
- data/ext/gecode-2.1.1/misc/debian/copyright +30 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/gecode.info +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/gecode.install +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/gecode.spec +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/debian/rules +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/back.png +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/footer.html +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/gecode-logo-100.png +0 -0
- data/ext/{gecode-1.3.1 → gecode-2.1.1}/misc/doxygen/header.html +0 -0
- data/ext/gecode-2.1.1/misc/doxygen/stylesheet.css +464 -0
- data/ext/gecode-2.1.1/misc/fixproperties.sh +77 -0
- data/ext/gecode-2.1.1/misc/gecode-gist.pc.in +45 -0
- data/ext/gecode-2.1.1/misc/gecode-minimodel.pc.in +45 -0
- data/ext/gecode-2.1.1/misc/gecode-search.pc.in +45 -0
- data/ext/gecode-2.1.1/misc/gecode-serialization.pc.in +45 -0
- data/ext/gecode-2.1.1/misc/gecode.pc.in +45 -0
- data/ext/gecode-2.1.1/misc/genchangelog.perl +208 -0
- data/ext/gecode-2.1.1/misc/genlcovmakefile.perl +148 -0
- data/ext/gecode-2.1.1/misc/genlicense.perl +121 -0
- data/ext/gecode-2.1.1/misc/genregistry.perl +468 -0
- data/ext/gecode-2.1.1/misc/genstatistics.perl +178 -0
- data/ext/gecode-2.1.1/misc/gentxtchangelog.perl +192 -0
- data/ext/gecode-2.1.1/misc/genvariables.perl +905 -0
- data/ext/gecode-2.1.1/misc/getrevision.perl +47 -0
- data/ext/gecode-2.1.1/misc/makedepend.perl +85 -0
- data/ext/gecode-2.1.1/misc/svn-ignore.txt +15 -0
- data/ext/gecode-2.1.1/variables.vsl +50 -0
- data/ext/missing.cpp +1 -1
- data/ext/missing.h +1 -1
- data/ext/vararray.h +4 -4
- data/lib/gecoder/bindings.rb +21 -1
- data/lib/gecoder/bindings/bindings.rb +408 -731
- data/lib/gecoder/interface/binding_changes.rb +1 -1
- data/lib/gecoder/interface/branch.rb +25 -25
- data/lib/gecoder/interface/constraints.rb +47 -4
- data/lib/gecoder/interface/constraints/bool/boolean.rb +18 -16
- data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +13 -11
- data/lib/gecoder/interface/constraints/int/arithmetic.rb +5 -4
- data/lib/gecoder/interface/constraints/int/domain.rb +8 -9
- data/lib/gecoder/interface/constraints/int/linear.rb +10 -8
- data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +4 -4
- data/lib/gecoder/interface/constraints/int_enum/channel.rb +2 -2
- data/lib/gecoder/interface/constraints/int_enum/count.rb +4 -5
- data/lib/gecoder/interface/constraints/int_enum/distinct.rb +7 -2
- data/lib/gecoder/interface/constraints/int_enum/element.rb +2 -2
- data/lib/gecoder/interface/constraints/int_enum/equality.rb +6 -3
- data/lib/gecoder/interface/constraints/int_enum/sort.rb +17 -5
- data/lib/gecoder/interface/constraints/set_enum/distinct.rb +0 -36
- data/lib/gecoder/interface/constraints/set_var_constraints.rb +5 -0
- data/lib/gecoder/interface/model.rb +3 -3
- data/lib/gecoder/interface/search.rb +5 -4
- data/lib/gecoder/version.rb +1 -1
- data/specs/branch.rb +27 -27
- data/specs/constraints/arithmetic.rb +48 -30
- data/specs/constraints/bool_enum.rb +39 -19
- data/specs/constraints/boolean.rb +10 -10
- data/specs/constraints/cardinality.rb +12 -9
- data/specs/constraints/channel.rb +6 -6
- data/specs/constraints/connection.rb +22 -26
- data/specs/constraints/constraint_helper.rb +125 -41
- data/specs/constraints/count.rb +22 -15
- data/specs/constraints/distinct.rb +10 -64
- data/specs/constraints/element.rb +14 -12
- data/specs/constraints/equality.rb +4 -4
- data/specs/constraints/int_domain.rb +8 -7
- data/specs/constraints/int_relation.rb +12 -8
- data/specs/constraints/linear.rb +4 -4
- data/specs/constraints/reification_sugar.rb +22 -4
- data/specs/constraints/selection.rb +2 -2
- data/specs/constraints/set_domain.rb +7 -3
- data/specs/constraints/set_operation.rb +2 -2
- data/specs/constraints/set_relation.rb +2 -6
- data/specs/constraints/sort.rb +20 -16
- data/specs/distribution.rb +14 -0
- data/specs/model.rb +4 -4
- data/tasks/dependencies.txt +21 -0
- data/tasks/distribution.rake +49 -14
- data/vendor/rust/include/rust_checks.hh +2 -1
- data/vendor/rust/include/rust_conversions.hh +2 -2
- data/vendor/rust/rust/attribute.rb +2 -2
- data/vendor/rust/rust/class.rb +2 -2
- data/vendor/rust/rust/cxxclass.rb +0 -2
- data/vendor/rust/rust/function.rb +2 -2
- data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +1 -1
- data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +1 -1
- data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +1 -1
- data/vendor/rust/rust/type.rb +1 -1
- metadata +599 -542
- data/ext/gecode-1.3.1/LICENSE +0 -34
- data/ext/gecode-1.3.1/Makefile.contribs +0 -71
- data/ext/gecode-1.3.1/Makefile.dep +0 -3928
- data/ext/gecode-1.3.1/Makefile.in +0 -966
- data/ext/gecode-1.3.1/changelog.in +0 -1065
- data/ext/gecode-1.3.1/configure +0 -8590
- data/ext/gecode-1.3.1/configure.ac +0 -179
- data/ext/gecode-1.3.1/configure.ac.in +0 -175
- data/ext/gecode-1.3.1/contribs/graph/INSTALL +0 -53
- data/ext/gecode-1.3.1/contribs/graph/LICENSE +0 -11
- data/ext/gecode-1.3.1/contribs/graph/Makefile +0 -167
- data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +0 -169
- data/ext/gecode-1.3.1/contribs/graph/TODO +0 -28
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +0 -82
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +0 -186
- data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +0 -257
- data/ext/gecode-1.3.1/contribs/graph/configure +0 -2160
- data/ext/gecode-1.3.1/contribs/graph/configure.ac +0 -33
- data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +0 -1226
- data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +0 -132
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +0 -94
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +0 -104
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +0 -105
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +0 -92
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +0 -273
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +0 -311
- data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +0 -1
- data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +0 -1
- data/ext/gecode-1.3.1/contribs/graph/graph.hh +0 -51
- data/ext/gecode-1.3.1/contribs/graph/graphutils.h +0 -46
- data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +0 -140
- data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +0 -1
- data/ext/gecode-1.3.1/contribs/graph/path.hh +0 -116
- data/ext/gecode-1.3.1/contribs/graph/path.icc +0 -64
- data/ext/gecode-1.3.1/contribs/graph/path/path.icc +0 -139
- data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +0 -133
- data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +0 -341
- data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +0 -1
- data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +0 -105
- data/ext/gecode-1.3.1/contribs/graph/var.icc +0 -106
- data/ext/gecode-1.3.1/contribs/graph/view.icc +0 -373
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +0 -162
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +0 -78
- data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +0 -349
- data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +0 -148
- data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +0 -337
- data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +0 -493
- data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +0 -60
- data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +0 -600
- data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +0 -135
- data/ext/gecode-1.3.1/contribs/map/COMPILING +0 -68
- data/ext/gecode-1.3.1/contribs/map/LICENSE +0 -11
- data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +0 -173
- data/ext/gecode-1.3.1/contribs/map/configure +0 -2285
- data/ext/gecode-1.3.1/contribs/map/configure.ac +0 -32
- data/ext/gecode-1.3.1/contribs/map/constraints.hh +0 -46
- data/ext/gecode-1.3.1/contribs/map/constraints.icc +0 -84
- data/ext/gecode-1.3.1/contribs/map/doxygen.conf +0 -1229
- data/ext/gecode-1.3.1/contribs/map/doxygen.hh +0 -33
- data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +0 -199
- data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +0 -1
- data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +0 -1
- 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 +0 -148
- data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map.cc +0 -80
- data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +0 -155
- data/ext/gecode-1.3.1/contribs/map/map.hh +0 -65
- data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +0 -235
- data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +0 -771
- data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +0 -2
- data/ext/gecode-1.3.1/contribs/map/var.icc +0 -346
- data/ext/gecode-1.3.1/contribs/map/var/imp.cc +0 -42
- data/ext/gecode-1.3.1/contribs/map/var/imp.icc +0 -436
- data/ext/gecode-1.3.1/doxygen.conf.in +0 -1225
- data/ext/gecode-1.3.1/doxygen.hh.in +0 -877
- data/ext/gecode-1.3.1/examples/all-interval-sort.cc +0 -201
- data/ext/gecode-1.3.1/examples/all-interval.cc +0 -114
- data/ext/gecode-1.3.1/examples/alpha.cc +0 -112
- data/ext/gecode-1.3.1/examples/baseline.cc +0 -71
- data/ext/gecode-1.3.1/examples/bibd.cc +0 -173
- data/ext/gecode-1.3.1/examples/black-hole.cc +0 -281
- data/ext/gecode-1.3.1/examples/cars.cc +0 -165
- data/ext/gecode-1.3.1/examples/crew.cc +0 -220
- data/ext/gecode-1.3.1/examples/crowded-chess.cc +0 -312
- data/ext/gecode-1.3.1/examples/donald.cc +0 -93
- data/ext/gecode-1.3.1/examples/eq20.cc +0 -111
- data/ext/gecode-1.3.1/examples/golf.cc +0 -242
- data/ext/gecode-1.3.1/examples/golomb.cc +0 -141
- data/ext/gecode-1.3.1/examples/graph-color.cc +0 -371
- data/ext/gecode-1.3.1/examples/grocery.cc +0 -107
- data/ext/gecode-1.3.1/examples/hamming.cc +0 -107
- data/ext/gecode-1.3.1/examples/ind-set.cc +0 -130
- data/ext/gecode-1.3.1/examples/knights.cc +0 -146
- data/ext/gecode-1.3.1/examples/langfordnum.cc +0 -244
- data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +0 -93
- data/ext/gecode-1.3.1/examples/magic-sequence.cc +0 -108
- data/ext/gecode-1.3.1/examples/magic-square.cc +0 -120
- data/ext/gecode-1.3.1/examples/money.cc +0 -92
- data/ext/gecode-1.3.1/examples/ortho-latin.cc +0 -156
- data/ext/gecode-1.3.1/examples/packing.cc +0 -211
- data/ext/gecode-1.3.1/examples/partition.cc +0 -126
- data/ext/gecode-1.3.1/examples/photo.cc +0 -155
- data/ext/gecode-1.3.1/examples/picture-puzzle.cc +0 -481
- data/ext/gecode-1.3.1/examples/queen-armies.cc +0 -240
- data/ext/gecode-1.3.1/examples/queens.cc +0 -99
- data/ext/gecode-1.3.1/examples/sports-league.cc +0 -454
- data/ext/gecode-1.3.1/examples/steiner.cc +0 -148
- data/ext/gecode-1.3.1/examples/stress-domain.cc +0 -86
- data/ext/gecode-1.3.1/examples/stress-element.cc +0 -95
- data/ext/gecode-1.3.1/examples/stress-exec.cc +0 -74
- data/ext/gecode-1.3.1/examples/stress-min.cc +0 -84
- data/ext/gecode-1.3.1/examples/stress-search.cc +0 -72
- data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +0 -282
- data/ext/gecode-1.3.1/examples/sudoku-set.cc +0 -162
- data/ext/gecode-1.3.1/examples/sudoku.cc +0 -188
- data/ext/gecode-1.3.1/examples/sudoku.icc +0 -703
- data/ext/gecode-1.3.1/examples/support.cc +0 -160
- data/ext/gecode-1.3.1/examples/support.hh +0 -98
- data/ext/gecode-1.3.1/examples/support.icc +0 -187
- data/ext/gecode-1.3.1/examples/timer.cc +0 -47
- data/ext/gecode-1.3.1/examples/timer.hh +0 -72
- data/ext/gecode-1.3.1/examples/warehouses.cc +0 -176
- data/ext/gecode-1.3.1/extconf.rb +0 -8
- data/ext/gecode-1.3.1/gecode.m4 +0 -736
- data/ext/gecode-1.3.1/gecode/config.icc.in +0 -50
- data/ext/gecode-1.3.1/gecode/int.hh +0 -1426
- data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +0 -87
- data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +0 -292
- data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +0 -213
- data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +0 -196
- data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +0 -478
- data/ext/gecode-1.3.1/gecode/int/array.cc +0 -61
- data/ext/gecode-1.3.1/gecode/int/array.icc +0 -264
- data/ext/gecode-1.3.1/gecode/int/bool.cc +0 -187
- data/ext/gecode-1.3.1/gecode/int/bool.hh +0 -255
- data/ext/gecode-1.3.1/gecode/int/bool/base.icc +0 -123
- data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +0 -89
- data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +0 -132
- data/ext/gecode-1.3.1/gecode/int/bool/or.icc +0 -380
- data/ext/gecode-1.3.1/gecode/int/branch.cc +0 -81
- data/ext/gecode-1.3.1/gecode/int/branch.hh +0 -444
- data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +0 -83
- data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +0 -76
- data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +0 -104
- data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +0 -219
- data/ext/gecode-1.3.1/gecode/int/channel.cc +0 -62
- data/ext/gecode-1.3.1/gecode/int/channel.hh +0 -144
- data/ext/gecode-1.3.1/gecode/int/channel/base.icc +0 -60
- data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +0 -313
- data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +0 -59
- data/ext/gecode-1.3.1/gecode/int/channel/val.icc +0 -239
- data/ext/gecode-1.3.1/gecode/int/count.cc +0 -174
- data/ext/gecode-1.3.1/gecode/int/count.hh +0 -401
- data/ext/gecode-1.3.1/gecode/int/count/int.icc +0 -495
- data/ext/gecode-1.3.1/gecode/int/count/rel.icc +0 -100
- data/ext/gecode-1.3.1/gecode/int/count/view.icc +0 -332
- data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +0 -210
- data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +0 -118
- data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +0 -377
- data/ext/gecode-1.3.1/gecode/int/distinct.cc +0 -77
- data/ext/gecode-1.3.1/gecode/int/distinct.hh +0 -272
- data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +0 -73
- data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +0 -335
- data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +0 -62
- data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +0 -740
- data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +0 -96
- data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +0 -107
- data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +0 -97
- data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +0 -171
- data/ext/gecode-1.3.1/gecode/int/dom.cc +0 -81
- data/ext/gecode-1.3.1/gecode/int/dom.hh +0 -101
- data/ext/gecode-1.3.1/gecode/int/dom/range.icc +0 -85
- data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +0 -85
- data/ext/gecode-1.3.1/gecode/int/element.cc +0 -58
- data/ext/gecode-1.3.1/gecode/int/element.hh +0 -203
- data/ext/gecode-1.3.1/gecode/int/element/int.icc +0 -396
- data/ext/gecode-1.3.1/gecode/int/element/view.icc +0 -443
- data/ext/gecode-1.3.1/gecode/int/exception.icc +0 -137
- data/ext/gecode-1.3.1/gecode/int/gcc.cc +0 -708
- data/ext/gecode-1.3.1/gecode/int/gcc.hh +0 -338
- data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +0 -629
- data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +0 -504
- data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +0 -760
- data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +0 -2375
- data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +0 -375
- data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +0 -687
- data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +0 -236
- data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +0 -373
- data/ext/gecode-1.3.1/gecode/int/int-set.cc +0 -115
- data/ext/gecode-1.3.1/gecode/int/int-set.icc +0 -151
- data/ext/gecode-1.3.1/gecode/int/linear.cc +0 -247
- data/ext/gecode-1.3.1/gecode/int/linear.hh +0 -1056
- data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +0 -439
- data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +0 -422
- data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +0 -311
- data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +0 -503
- data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +0 -857
- data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +0 -264
- data/ext/gecode-1.3.1/gecode/int/linear/post.cc +0 -542
- data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +0 -255
- data/ext/gecode-1.3.1/gecode/int/propagator.icc +0 -194
- data/ext/gecode-1.3.1/gecode/int/regular.cc +0 -40
- data/ext/gecode-1.3.1/gecode/int/regular.hh +0 -83
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +0 -466
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +0 -172
- data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +0 -480
- data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +0 -738
- data/ext/gecode-1.3.1/gecode/int/rel.cc +0 -293
- data/ext/gecode-1.3.1/gecode/int/rel.hh +0 -526
- data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +0 -640
- data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +0 -212
- data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +0 -246
- data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +0 -188
- data/ext/gecode-1.3.1/gecode/int/sortedness.cc +0 -124
- data/ext/gecode-1.3.1/gecode/int/sortedness.hh +0 -108
- data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +0 -177
- data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +0 -243
- data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +0 -232
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +0 -727
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +0 -666
- data/ext/gecode-1.3.1/gecode/int/var-imp.vis +0 -198
- data/ext/gecode-1.3.1/gecode/int/var.icc +0 -590
- data/ext/gecode-1.3.1/gecode/int/var/bool.icc +0 -52
- data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +0 -65
- data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +0 -191
- data/ext/gecode-1.3.1/gecode/int/var/imp.cc +0 -361
- data/ext/gecode-1.3.1/gecode/int/var/imp.icc +0 -579
- data/ext/gecode-1.3.1/gecode/int/var/int.cc +0 -63
- data/ext/gecode-1.3.1/gecode/int/var/int.icc +0 -135
- data/ext/gecode-1.3.1/gecode/int/view.icc +0 -1219
- data/ext/gecode-1.3.1/gecode/int/view/bool.icc +0 -270
- data/ext/gecode-1.3.1/gecode/int/view/constint.icc +0 -306
- data/ext/gecode-1.3.1/gecode/int/view/int.icc +0 -221
- data/ext/gecode-1.3.1/gecode/int/view/iter.icc +0 -49
- data/ext/gecode-1.3.1/gecode/int/view/minus.icc +0 -285
- data/ext/gecode-1.3.1/gecode/int/view/offset.icc +0 -274
- data/ext/gecode-1.3.1/gecode/int/view/print.cc +0 -109
- data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +0 -215
- data/ext/gecode-1.3.1/gecode/int/view/scale.icc +0 -373
- data/ext/gecode-1.3.1/gecode/iter.hh +0 -65
- data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +0 -130
- data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +0 -208
- data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +0 -123
- data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +0 -143
- data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +0 -206
- data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +0 -127
- data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +0 -96
- data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +0 -202
- data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +0 -103
- data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +0 -138
- data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +0 -112
- data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +0 -142
- data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +0 -224
- data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +0 -71
- data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +0 -131
- data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +0 -211
- data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +0 -125
- data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +0 -91
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +0 -247
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +0 -227
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +0 -236
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +0 -126
- data/ext/gecode-1.3.1/gecode/kernel.hh +0 -141
- data/ext/gecode-1.3.1/gecode/kernel/array.icc +0 -954
- data/ext/gecode-1.3.1/gecode/kernel/branching.icc +0 -233
- data/ext/gecode-1.3.1/gecode/kernel/core.cc +0 -417
- data/ext/gecode-1.3.1/gecode/kernel/core.icc +0 -1681
- data/ext/gecode-1.3.1/gecode/kernel/exception.cc +0 -49
- data/ext/gecode-1.3.1/gecode/kernel/exception.icc +0 -104
- data/ext/gecode-1.3.1/gecode/kernel/macros.icc +0 -98
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +0 -41
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +0 -438
- data/ext/gecode-1.3.1/gecode/kernel/memory.icc +0 -205
- data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +0 -53
- data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +0 -680
- data/ext/gecode-1.3.1/gecode/kernel/view.icc +0 -583
- data/ext/gecode-1.3.1/gecode/limits.hh +0 -87
- data/ext/gecode-1.3.1/gecode/minimodel.hh +0 -942
- data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +0 -137
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +0 -207
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +0 -191
- data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +0 -66
- data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +0 -59
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +0 -103
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +0 -192
- data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +0 -200
- data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +0 -118
- data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +0 -241
- data/ext/gecode-1.3.1/gecode/search.hh +0 -745
- data/ext/gecode-1.3.1/gecode/search/bab.cc +0 -153
- data/ext/gecode-1.3.1/gecode/search/bab.icc +0 -101
- data/ext/gecode-1.3.1/gecode/search/dfs.cc +0 -63
- data/ext/gecode-1.3.1/gecode/search/dfs.icc +0 -144
- data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +0 -109
- data/ext/gecode-1.3.1/gecode/search/lds.cc +0 -237
- data/ext/gecode-1.3.1/gecode/search/lds.icc +0 -57
- data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +0 -219
- data/ext/gecode-1.3.1/gecode/search/restart.icc +0 -76
- data/ext/gecode-1.3.1/gecode/search/statistics.icc +0 -30
- data/ext/gecode-1.3.1/gecode/search/stop.cc +0 -58
- data/ext/gecode-1.3.1/gecode/search/stop.icc +0 -100
- data/ext/gecode-1.3.1/gecode/set.hh +0 -419
- data/ext/gecode-1.3.1/gecode/set/array.cc +0 -114
- data/ext/gecode-1.3.1/gecode/set/array.icc +0 -134
- data/ext/gecode-1.3.1/gecode/set/branch.cc +0 -57
- data/ext/gecode-1.3.1/gecode/set/branch.hh +0 -176
- data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +0 -72
- data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +0 -112
- data/ext/gecode-1.3.1/gecode/set/cardinality.cc +0 -49
- data/ext/gecode-1.3.1/gecode/set/convex.cc +0 -43
- data/ext/gecode-1.3.1/gecode/set/convex.hh +0 -92
- data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +0 -81
- data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +0 -51
- data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +0 -100
- data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +0 -52
- data/ext/gecode-1.3.1/gecode/set/distinct.cc +0 -48
- data/ext/gecode-1.3.1/gecode/set/distinct.hh +0 -97
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +0 -151
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +0 -50
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +0 -46
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +0 -157
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +0 -124
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +0 -58
- data/ext/gecode-1.3.1/gecode/set/dom.cc +0 -224
- data/ext/gecode-1.3.1/gecode/set/exception.icc +0 -132
- data/ext/gecode-1.3.1/gecode/set/int.cc +0 -139
- data/ext/gecode-1.3.1/gecode/set/int.hh +0 -226
- data/ext/gecode-1.3.1/gecode/set/int/card.cc +0 -61
- data/ext/gecode-1.3.1/gecode/set/int/card.icc +0 -54
- data/ext/gecode-1.3.1/gecode/set/int/channel.cc +0 -100
- data/ext/gecode-1.3.1/gecode/set/int/channel.icc +0 -75
- data/ext/gecode-1.3.1/gecode/set/int/match.cc +0 -148
- data/ext/gecode-1.3.1/gecode/set/int/match.icc +0 -67
- data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +0 -109
- data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +0 -63
- data/ext/gecode-1.3.1/gecode/set/int/weights.cc +0 -182
- data/ext/gecode-1.3.1/gecode/set/int/weights.icc +0 -174
- data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +0 -148
- data/ext/gecode-1.3.1/gecode/set/projectors.cc +0 -109
- data/ext/gecode-1.3.1/gecode/set/projectors.hh +0 -319
- data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +0 -841
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +0 -69
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +0 -66
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +0 -125
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +0 -79
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +0 -127
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +0 -96
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +0 -106
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +0 -76
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +0 -53
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +0 -306
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +0 -192
- data/ext/gecode-1.3.1/gecode/set/propagator.icc +0 -96
- data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +0 -233
- data/ext/gecode-1.3.1/gecode/set/rel-op.cc +0 -96
- data/ext/gecode-1.3.1/gecode/set/rel-op.hh +0 -267
- data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +0 -528
- data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +0 -312
- data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +0 -131
- data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +0 -198
- data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +0 -150
- data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +0 -151
- data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +0 -292
- data/ext/gecode-1.3.1/gecode/set/rel.cc +0 -201
- data/ext/gecode-1.3.1/gecode/set/rel.hh +0 -250
- data/ext/gecode-1.3.1/gecode/set/rel/common.icc +0 -109
- data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +0 -101
- data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +0 -88
- data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +0 -132
- data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +0 -142
- data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +0 -121
- data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +0 -80
- data/ext/gecode-1.3.1/gecode/set/select.cc +0 -88
- data/ext/gecode-1.3.1/gecode/set/select.hh +0 -113
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +0 -267
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +0 -59
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +0 -91
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +0 -112
- data/ext/gecode-1.3.1/gecode/set/select/inter.icc +0 -300
- data/ext/gecode-1.3.1/gecode/set/sequence.cc +0 -48
- data/ext/gecode-1.3.1/gecode/set/sequence.hh +0 -97
- data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +0 -79
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +0 -83
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +0 -63
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +0 -61
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +0 -53
- data/ext/gecode-1.3.1/gecode/set/var-imp.vis +0 -205
- data/ext/gecode-1.3.1/gecode/set/var.icc +0 -1090
- data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +0 -192
- data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +0 -235
- data/ext/gecode-1.3.1/gecode/set/var/imp.cc +0 -127
- data/ext/gecode-1.3.1/gecode/set/var/imp.icc +0 -356
- data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +0 -256
- data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +0 -512
- data/ext/gecode-1.3.1/gecode/set/var/iter.icc +0 -47
- data/ext/gecode-1.3.1/gecode/set/var/set.cc +0 -99
- data/ext/gecode-1.3.1/gecode/set/var/set.icc +0 -282
- data/ext/gecode-1.3.1/gecode/set/view.icc +0 -1075
- data/ext/gecode-1.3.1/gecode/set/view/complement.icc +0 -525
- data/ext/gecode-1.3.1/gecode/set/view/const.icc +0 -651
- data/ext/gecode-1.3.1/gecode/set/view/print.cc +0 -120
- data/ext/gecode-1.3.1/gecode/set/view/set.icc +0 -217
- data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +0 -348
- data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +0 -152
- data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +0 -131
- data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +0 -157
- data/ext/gecode-1.3.1/gecode/support/random.hh +0 -100
- data/ext/gecode-1.3.1/gecode/support/shared-array.hh +0 -255
- data/ext/gecode-1.3.1/gecode/support/sort.hh +0 -193
- data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +0 -240
- data/ext/gecode-1.3.1/gecode/support/static-stack.hh +0 -117
- data/ext/gecode-1.3.1/misc/debian/Makefile.am +0 -8
- data/ext/gecode-1.3.1/misc/debian/copyright +0 -44
- data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +0 -460
- data/ext/gecode-1.3.1/misc/fixproperties.sh +0 -32
- data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +0 -12
- data/ext/gecode-1.3.1/misc/gecode-search.pc.in +0 -12
- data/ext/gecode-1.3.1/misc/gecode.pc.in +0 -12
- data/ext/gecode-1.3.1/misc/genchangelog.perl +0 -190
- data/ext/gecode-1.3.1/misc/genlicense.perl +0 -113
- data/ext/gecode-1.3.1/misc/genstatistics.perl +0 -155
- data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +0 -170
- data/ext/gecode-1.3.1/misc/genvarimp.perl +0 -666
- data/ext/gecode-1.3.1/misc/getrevision.perl +0 -32
- data/ext/gecode-1.3.1/misc/makedepend.perl +0 -66
- data/ext/gecode-1.3.1/test/int.cc +0 -497
- data/ext/gecode-1.3.1/test/int.hh +0 -119
- data/ext/gecode-1.3.1/test/int/arithmetic.cc +0 -262
- data/ext/gecode-1.3.1/test/int/basic.cc +0 -42
- data/ext/gecode-1.3.1/test/int/bool.cc +0 -189
- data/ext/gecode-1.3.1/test/int/channel.cc +0 -79
- data/ext/gecode-1.3.1/test/int/count.cc +0 -264
- data/ext/gecode-1.3.1/test/int/distinct.cc +0 -121
- data/ext/gecode-1.3.1/test/int/dom.cc +0 -69
- data/ext/gecode-1.3.1/test/int/element.cc +0 -132
- data/ext/gecode-1.3.1/test/int/gcc.cc +0 -592
- data/ext/gecode-1.3.1/test/int/linear.cc +0 -315
- data/ext/gecode-1.3.1/test/int/minimodel.cc +0 -451
- data/ext/gecode-1.3.1/test/int/regular.cc +0 -105
- data/ext/gecode-1.3.1/test/int/rel.cc +0 -283
- data/ext/gecode-1.3.1/test/int/scheduling.cc +0 -259
- data/ext/gecode-1.3.1/test/int/sortedness.cc +0 -272
- data/ext/gecode-1.3.1/test/intset.cc +0 -40
- data/ext/gecode-1.3.1/test/log.cc +0 -515
- data/ext/gecode-1.3.1/test/log.hh +0 -68
- data/ext/gecode-1.3.1/test/set.cc +0 -542
- data/ext/gecode-1.3.1/test/set.hh +0 -152
- data/ext/gecode-1.3.1/test/set/convex.cc +0 -94
- data/ext/gecode-1.3.1/test/set/distinct.cc +0 -148
- data/ext/gecode-1.3.1/test/set/dom.cc +0 -67
- data/ext/gecode-1.3.1/test/set/int.cc +0 -249
- data/ext/gecode-1.3.1/test/set/projection.cc +0 -333
- data/ext/gecode-1.3.1/test/set/rel-op.cc +0 -662
- data/ext/gecode-1.3.1/test/set/rel.cc +0 -198
- data/ext/gecode-1.3.1/test/set/select.cc +0 -108
- data/ext/gecode-1.3.1/test/set/sequence.cc +0 -83
- data/ext/gecode-1.3.1/test/stress.cc +0 -93
- data/ext/gecode-1.3.1/test/stress.hh +0 -74
- data/ext/gecode-1.3.1/test/stress/distinct.cc +0 -70
- data/ext/gecode-1.3.1/test/stress/domain.cc +0 -69
- data/ext/gecode-1.3.1/test/stress/exec.cc +0 -60
- data/ext/gecode-1.3.1/test/stress/minsort.cc +0 -63
- data/ext/gecode-1.3.1/test/stress/regular.cc +0 -112
- data/ext/gecode-1.3.1/test/test.cc +0 -215
- data/ext/gecode-1.3.1/test/test.hh +0 -107
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Main authors:
|
|
4
|
+
* Mikael Lagerkvist <lagerkvist@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Mikael Lagerkvist, 2007
|
|
8
|
+
*
|
|
9
|
+
* Last modified:
|
|
10
|
+
* $Date: 2008-01-13 15:02:42 +0100 (Sun, 13 Jan 2008) $ by $Author: schulte $
|
|
11
|
+
* $Revision: 5862 $
|
|
12
|
+
*
|
|
13
|
+
* This file is part of Gecode, the generic constraint
|
|
14
|
+
* development environment:
|
|
15
|
+
* http://www.gecode.org
|
|
16
|
+
*
|
|
17
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
18
|
+
* a copy of this software and associated documentation files (the
|
|
19
|
+
* "Software"), to deal in the Software without restriction, including
|
|
20
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
21
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
22
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
23
|
+
* the following conditions:
|
|
24
|
+
*
|
|
25
|
+
* The above copyright notice and this permission notice shall be
|
|
26
|
+
* included in all copies or substantial portions of the Software.
|
|
27
|
+
*
|
|
28
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
29
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
30
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
31
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
32
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
33
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
34
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
namespace Gecode { namespace Int { namespace Extensional {
|
|
38
|
+
/*
|
|
39
|
+
* The propagator proper
|
|
40
|
+
*
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
template <class View, bool subscribe>
|
|
44
|
+
forceinline
|
|
45
|
+
Base<View,subscribe>::Base(Space* home, ViewArray<View>& x0, const TupleSet& t)
|
|
46
|
+
: Propagator(home), x(x0), tupleSet(t), last_data(NULL) {
|
|
47
|
+
if (subscribe)
|
|
48
|
+
x.subscribe(home, this, PC_INT_DOM);
|
|
49
|
+
|
|
50
|
+
if (!ts()->finalized()) ts()->finalize();
|
|
51
|
+
init_last(home, ts()->last);
|
|
52
|
+
|
|
53
|
+
this->force(home);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
template <class View, bool subscribe>
|
|
57
|
+
forceinline
|
|
58
|
+
Base<View,subscribe>::Base(Space* home, bool share, Base<View,subscribe>& p)
|
|
59
|
+
: Propagator(home,share,p), last_data(NULL) {
|
|
60
|
+
x.update(home, share, p.x);
|
|
61
|
+
tupleSet.update(home, share, p.tupleSet);
|
|
62
|
+
|
|
63
|
+
init_last(home, p.last_data);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
template <class View, bool subscribe>
|
|
67
|
+
forceinline void
|
|
68
|
+
Base<View,subscribe>::init_last(Space* home, Tuple** source) {
|
|
69
|
+
if (last_data == NULL) {
|
|
70
|
+
int literals = ts()->domsize*x.size();
|
|
71
|
+
last_data = static_cast<Tuple**>(home->alloc(literals*sizeof(Tuple*)));
|
|
72
|
+
for (int i = literals; i--; ) {
|
|
73
|
+
last_data[i] = source[i];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
template <class View, bool subscribe>
|
|
79
|
+
forceinline TupleSet::TupleSetI*
|
|
80
|
+
Base<View,subscribe>::ts(void) {
|
|
81
|
+
return tupleSet.implementation();
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
template <class View, bool subscribe>
|
|
85
|
+
PropCost
|
|
86
|
+
Base<View,subscribe>::cost(ModEventDelta) const {
|
|
87
|
+
return PC_QUADRATIC_HI;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#define GECODE_LAST_TUPLE(l) (*(l))
|
|
91
|
+
|
|
92
|
+
template <class View, bool subscribe>
|
|
93
|
+
forceinline Tuple
|
|
94
|
+
Base<View,subscribe>::last(int var, int val) {
|
|
95
|
+
return GECODE_LAST_TUPLE(last_data[(var*ts()->domsize) + val]);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
template <class View, bool subscribe>
|
|
99
|
+
forceinline Tuple
|
|
100
|
+
Base<View,subscribe>::last_next(int var, int val) {
|
|
101
|
+
assert(last(var, val) != NULL);
|
|
102
|
+
assert(last(var, val)[var] == val+ts()->min);
|
|
103
|
+
int pos = (var*ts()->domsize) + val;
|
|
104
|
+
++(last_data[pos]);
|
|
105
|
+
if (last(var,val)[var] != (val+ts()->min))
|
|
106
|
+
last_data[pos] = ts()->nullptr;
|
|
107
|
+
return last(var, val);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
template <class View, bool subscribe>
|
|
112
|
+
forceinline void
|
|
113
|
+
Base<View,subscribe>::init_dom(Space* home, Domain dom) {
|
|
114
|
+
int domsize = ts()->domsize;
|
|
115
|
+
for (int i = x.size(); i--; ) {
|
|
116
|
+
dom[i].init(home, domsize);
|
|
117
|
+
for (ViewValues<View> vv(x[i]); vv(); ++vv)
|
|
118
|
+
dom[i].set(vv.val()-ts()->min);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
template <class View, bool subscribe>
|
|
123
|
+
forceinline bool
|
|
124
|
+
Base<View,subscribe>::valid(Tuple t, Domain dom) {
|
|
125
|
+
for (int i = x.size(); i--; )
|
|
126
|
+
if (!dom[i].get(t[i]-ts()->min))
|
|
127
|
+
return false;
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
#undef GECODE_LAST_TUPLE
|
|
131
|
+
template <class View, bool subscribe>
|
|
132
|
+
forceinline Tuple
|
|
133
|
+
Base<View,subscribe>::find_support(Domain dom, int var, int val) {
|
|
134
|
+
Tuple l = last(var, val);
|
|
135
|
+
while (l != NULL && !valid(l, dom)) {
|
|
136
|
+
l = last_next(var, val);
|
|
137
|
+
}
|
|
138
|
+
return l;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
template <class View, bool subscribe>
|
|
143
|
+
size_t
|
|
144
|
+
Base<View,subscribe>::dispose(Space* home) {
|
|
145
|
+
this->unforce(home);
|
|
146
|
+
(void) Propagator::dispose(home);
|
|
147
|
+
if (!home->failed()) {
|
|
148
|
+
if (subscribe)
|
|
149
|
+
x.cancel(home,this,PC_INT_DOM);
|
|
150
|
+
// take care of last_data
|
|
151
|
+
int literals = ts()->domsize*x.size();
|
|
152
|
+
home->reuse(last_data, sizeof(Tuple*)*literals);
|
|
153
|
+
}
|
|
154
|
+
(void) tupleSet.~TupleSet();
|
|
155
|
+
return sizeof(*this);
|
|
156
|
+
}
|
|
157
|
+
}}}
|
|
158
|
+
|
|
159
|
+
// STATISTICS: int-prop
|
|
160
|
+
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Main authors:
|
|
4
|
+
* Mikael Lagerkvist <lagerkvist@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Mikael Lagerkvist, 2007
|
|
8
|
+
*
|
|
9
|
+
* Last modified:
|
|
10
|
+
* $Date: 2008-01-31 18:29:16 +0100 (Thu, 31 Jan 2008) $ by $Author: tack $
|
|
11
|
+
* $Revision: 6017 $
|
|
12
|
+
*
|
|
13
|
+
* This file is part of Gecode, the generic constraint
|
|
14
|
+
* development environment:
|
|
15
|
+
* http://www.gecode.org
|
|
16
|
+
*
|
|
17
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
18
|
+
* a copy of this software and associated documentation files (the
|
|
19
|
+
* "Software"), to deal in the Software without restriction, including
|
|
20
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
21
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
22
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
23
|
+
* the following conditions:
|
|
24
|
+
*
|
|
25
|
+
* The above copyright notice and this permission notice shall be
|
|
26
|
+
* included in all copies or substantial portions of the Software.
|
|
27
|
+
*
|
|
28
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
29
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
30
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
31
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
32
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
33
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
34
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
namespace Gecode { namespace Int { namespace Extensional {
|
|
39
|
+
/*
|
|
40
|
+
* The propagator proper
|
|
41
|
+
*
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
template <class View>
|
|
45
|
+
forceinline
|
|
46
|
+
Basic<View>::Basic(Space* home, ViewArray<View>& x, const TupleSet& t)
|
|
47
|
+
: Base<View>(home,x,t) {
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
template <class View>
|
|
51
|
+
ExecStatus
|
|
52
|
+
Basic<View>::post(Space* home, ViewArray<View>& x, const TupleSet& t) {
|
|
53
|
+
(void) new (home) Basic<View>(home,x,t);
|
|
54
|
+
return ES_OK;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
template <class View>
|
|
58
|
+
forceinline
|
|
59
|
+
Basic<View>::Basic(Space* home, bool share, Basic<View>& p)
|
|
60
|
+
: Base<View>(home,share,p) {
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
template <class View>
|
|
64
|
+
PropCost
|
|
65
|
+
Basic<View>::cost(ModEventDelta med) const {
|
|
66
|
+
return (View::me(med) == ME_INT_VAL)
|
|
67
|
+
? PC_QUADRATIC_HI : PC_CUBIC_HI;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
template <class View>
|
|
71
|
+
Actor*
|
|
72
|
+
Basic<View>::copy(Space* home, bool share) {
|
|
73
|
+
return new (home) Basic<View>(home,share,*this);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
template <class View>
|
|
77
|
+
Gecode::Support::Symbol
|
|
78
|
+
Basic<View>::ati(void) {
|
|
79
|
+
return Reflection::mangle<View>("Gecode::Int::Extensional::Basic");
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
template <class View>
|
|
83
|
+
Reflection::ActorSpec
|
|
84
|
+
Basic<View>::spec(const Space* home, Reflection::VarMap& m) const {
|
|
85
|
+
Reflection::ActorSpec s(ati());
|
|
86
|
+
return s << x.spec(home, m)
|
|
87
|
+
<< tupleSet.spec(m);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
template <class View>
|
|
91
|
+
void
|
|
92
|
+
Basic<View>::post(Space* home, Reflection::VarMap& vars,
|
|
93
|
+
const Reflection::ActorSpec& spec) {
|
|
94
|
+
spec.checkArity(2);
|
|
95
|
+
ViewArray<View> x(home, vars, spec[0]);
|
|
96
|
+
TupleSet tupleSet(vars, spec[1]);
|
|
97
|
+
(void) new (home) Basic<View>(home,x,tupleSet);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
template <class View>
|
|
102
|
+
ExecStatus
|
|
103
|
+
Basic<View>::propagate(Space* home, ModEventDelta) {
|
|
104
|
+
///// Domain consistent propagation
|
|
105
|
+
//// Set up datastructures
|
|
106
|
+
/// Bit-sets for amortized O(1) access to domains
|
|
107
|
+
GECODE_AUTOARRAY(BitSet, dom, x.size());
|
|
108
|
+
init_dom(home, dom);
|
|
109
|
+
|
|
110
|
+
/// Bit-sets for processed values.
|
|
111
|
+
GECODE_AUTOARRAY(BitSet, has_support, x.size());
|
|
112
|
+
for (int i = x.size(); i--; )
|
|
113
|
+
has_support[i].init(home, ts()->domsize);
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
/// Values to prune
|
|
117
|
+
GECODE_AUTOARRAY(int,nq, ts()->domsize*x.size());
|
|
118
|
+
int n_nq = 0;
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
ExecStatus es = ES_FIX;
|
|
122
|
+
|
|
123
|
+
//// Run algorithm
|
|
124
|
+
/// Check consistency for each variable-value pair
|
|
125
|
+
for (int var = x.size(); var--; ) {
|
|
126
|
+
for (ViewValues<View> vv(x[var]); vv(); ++vv) {
|
|
127
|
+
// Value offset for indexing
|
|
128
|
+
int val = vv.val() - ts()->min;
|
|
129
|
+
if (!has_support[var].get(val)) {
|
|
130
|
+
// Find support for value vv.val() in variable var
|
|
131
|
+
Tuple l = find_support(dom, var, val);
|
|
132
|
+
if (l == NULL) {
|
|
133
|
+
// No possible supports left
|
|
134
|
+
nq[n_nq] = vv.val();
|
|
135
|
+
n_nq++;
|
|
136
|
+
} else {
|
|
137
|
+
// Mark values as supported
|
|
138
|
+
// Only forward direction marking is needed since all
|
|
139
|
+
// previous values have been checked
|
|
140
|
+
for (int i = var; i--; ) {
|
|
141
|
+
has_support[i].set(l[i]- ts()->min);
|
|
142
|
+
assert(has_support[i].get(l[i]- ts()->min));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// Prune values for var which do not have support anymore
|
|
149
|
+
while (n_nq-- > 0) {
|
|
150
|
+
ModEvent me = x[var].nq(home,nq[n_nq]);
|
|
151
|
+
if (me_failed(me))
|
|
152
|
+
return ES_FAILED;
|
|
153
|
+
if (me_modified(me))
|
|
154
|
+
es = ES_NOFIX;
|
|
155
|
+
}
|
|
156
|
+
n_nq = 0;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
for (int i = x.size(); i--; )
|
|
160
|
+
if (!x[i].assigned())
|
|
161
|
+
return es;
|
|
162
|
+
return ES_SUBSUMED(this, home);
|
|
163
|
+
}
|
|
164
|
+
}}}
|
|
165
|
+
// STATISTICS: int-prop
|
|
166
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Main authors:
|
|
4
|
+
* Mikael Lagerkvist <lagerkvist@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Contributing authors:
|
|
7
|
+
* Christian Schulte <schulte@gecode.org>
|
|
8
|
+
*
|
|
9
|
+
* Copyright:
|
|
10
|
+
* Mikael Lagerkvist, 2007
|
|
11
|
+
* Christian Schulte, 2007
|
|
12
|
+
*
|
|
13
|
+
* Last modified:
|
|
14
|
+
* $Date: 2007-12-10 08:54:45 +0100 (Mon, 10 Dec 2007) $ by $Author: schulte $
|
|
15
|
+
* $Revision: 5650 $
|
|
16
|
+
*
|
|
17
|
+
* This file is part of Gecode, the generic constraint
|
|
18
|
+
* development environment:
|
|
19
|
+
* http://www.gecode.org
|
|
20
|
+
*
|
|
21
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
22
|
+
* a copy of this software and associated documentation files (the
|
|
23
|
+
* "Software"), to deal in the Software without restriction, including
|
|
24
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
25
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
26
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
27
|
+
* the following conditions:
|
|
28
|
+
*
|
|
29
|
+
* The above copyright notice and this permission notice shall be
|
|
30
|
+
* included in all copies or substantial portions of the Software.
|
|
31
|
+
*
|
|
32
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
33
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
34
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
35
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
36
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
37
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
38
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
#include <climits>
|
|
43
|
+
|
|
44
|
+
namespace Gecode { namespace Int { namespace Extensional {
|
|
45
|
+
|
|
46
|
+
/// Simple bitsets
|
|
47
|
+
class BitSet {
|
|
48
|
+
/// Basetype for bits
|
|
49
|
+
typedef unsigned int Base;
|
|
50
|
+
/// Stored bits
|
|
51
|
+
Base* data;
|
|
52
|
+
/// Size of bitset
|
|
53
|
+
unsigned int size;
|
|
54
|
+
public:
|
|
55
|
+
/// Default (empty) initialization of BitSet
|
|
56
|
+
BitSet(void);
|
|
57
|
+
/// BitSet with space for \a s bits. The bits are set to \a value.
|
|
58
|
+
BitSet(Space* home, int s, bool value = false);
|
|
59
|
+
/// Copy BitSet \a bs
|
|
60
|
+
BitSet(Space* home, const BitSet& bs);
|
|
61
|
+
/// Initialize BitSet for \a s bits. The bits are set to \a value.
|
|
62
|
+
void init(Space *home, int s, bool value=false);
|
|
63
|
+
/// Access value at bit \a i
|
|
64
|
+
bool get(unsigned int i);
|
|
65
|
+
/// Set value at bit \a i to \a value
|
|
66
|
+
void set(unsigned int i, bool value=true);
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
forceinline void
|
|
70
|
+
BitSet::init(Space* home, int s, bool value) {
|
|
71
|
+
size = static_cast<int>(std::ceil(static_cast<double>(s)
|
|
72
|
+
/(CHAR_BIT*sizeof(Base))));
|
|
73
|
+
data = static_cast<Base*>(home->alloc(size*sizeof(Base)));
|
|
74
|
+
Base ival = value ? ~0 : 0;
|
|
75
|
+
for (int i = size; i--; ) data[i] = ival;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
forceinline
|
|
79
|
+
BitSet::BitSet(void) : data(NULL), size(0) {}
|
|
80
|
+
|
|
81
|
+
forceinline
|
|
82
|
+
BitSet::BitSet(Space *home, int s, bool value)
|
|
83
|
+
: data(NULL), size(0) {
|
|
84
|
+
init(home, s, value);
|
|
85
|
+
}
|
|
86
|
+
forceinline
|
|
87
|
+
BitSet::BitSet(Space *home, const BitSet& bs)
|
|
88
|
+
: data(static_cast<Base*>(home->alloc(bs.size*sizeof(Base)))),
|
|
89
|
+
size(bs.size) {
|
|
90
|
+
for (int i = size; i--; ) data[i] = bs.data[i];
|
|
91
|
+
}
|
|
92
|
+
forceinline bool
|
|
93
|
+
BitSet::get(unsigned int i) {
|
|
94
|
+
unsigned int pos = i / (sizeof(Base)*CHAR_BIT);
|
|
95
|
+
unsigned int bit = i % (sizeof(Base)*CHAR_BIT);
|
|
96
|
+
assert(pos < size);
|
|
97
|
+
return data[pos] & ((Base)1 << bit);
|
|
98
|
+
}
|
|
99
|
+
forceinline void
|
|
100
|
+
BitSet::set(unsigned int i, bool value) {
|
|
101
|
+
unsigned int pos = i / (sizeof(Base)*CHAR_BIT);
|
|
102
|
+
unsigned int bit = i % (sizeof(Base)*CHAR_BIT);
|
|
103
|
+
assert(pos < size);
|
|
104
|
+
if (value)
|
|
105
|
+
data[pos] |= 1 << bit;
|
|
106
|
+
else
|
|
107
|
+
data[pos] &= ~(1 << bit);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
}}}
|
|
111
|
+
|
|
112
|
+
// STATISTICS: int-other
|
|
113
|
+
|
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Main authors:
|
|
4
|
+
* Christian Schulte <schulte@gecode.org>
|
|
5
|
+
*
|
|
6
|
+
* Copyright:
|
|
7
|
+
* Christian Schulte, 2004
|
|
8
|
+
*
|
|
9
|
+
* Last modified:
|
|
10
|
+
* $Date: 2008-03-05 19:42:31 +0100 (Wed, 05 Mar 2008) $ by $Author: tack $
|
|
11
|
+
* $Revision: 6431 $
|
|
12
|
+
*
|
|
13
|
+
* This file is part of Gecode, the generic constraint
|
|
14
|
+
* development environment:
|
|
15
|
+
* http://www.gecode.org
|
|
16
|
+
*
|
|
17
|
+
* Permission is hereby granted, free of charge, to any person obtaining
|
|
18
|
+
* a copy of this software and associated documentation files (the
|
|
19
|
+
* "Software"), to deal in the Software without restriction, including
|
|
20
|
+
* without limitation the rights to use, copy, modify, merge, publish,
|
|
21
|
+
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
22
|
+
* permit persons to whom the Software is furnished to do so, subject to
|
|
23
|
+
* the following conditions:
|
|
24
|
+
*
|
|
25
|
+
* The above copyright notice and this permission notice shall be
|
|
26
|
+
* included in all copies or substantial portions of the Software.
|
|
27
|
+
*
|
|
28
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
29
|
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
30
|
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
31
|
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
32
|
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
33
|
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
34
|
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
#include "gecode/int.hh"
|
|
39
|
+
|
|
40
|
+
namespace Gecode { namespace Int { namespace Extensional {
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* \brief Sort transition array by input state
|
|
44
|
+
*/
|
|
45
|
+
class TransByI_State {
|
|
46
|
+
public:
|
|
47
|
+
forceinline bool
|
|
48
|
+
operator()(const DFA::Transition& x, const DFA::Transition& y) {
|
|
49
|
+
return x.i_state < y.i_state;
|
|
50
|
+
}
|
|
51
|
+
forceinline static void
|
|
52
|
+
sort(DFA::Transition t[], int n) {
|
|
53
|
+
TransByI_State tbis;
|
|
54
|
+
Support::quicksort<DFA::Transition,TransByI_State>(t,n,tbis);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* \brief Sort transition array by symbol (value)
|
|
60
|
+
*/
|
|
61
|
+
class TransBySymbol {
|
|
62
|
+
public:
|
|
63
|
+
forceinline bool
|
|
64
|
+
operator()(const DFA::Transition& x, const DFA::Transition& y) {
|
|
65
|
+
return x.symbol < y.symbol;
|
|
66
|
+
}
|
|
67
|
+
forceinline static void
|
|
68
|
+
sort(DFA::Transition t[], int n) {
|
|
69
|
+
TransBySymbol tbs;
|
|
70
|
+
Support::quicksort<DFA::Transition,TransBySymbol>(t,n,tbs);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* \brief Sort transition array by symbol and then input states
|
|
76
|
+
*/
|
|
77
|
+
class TransBySymbolI_State {
|
|
78
|
+
public:
|
|
79
|
+
forceinline bool
|
|
80
|
+
operator()(const DFA::Transition& x, const DFA::Transition& y) {
|
|
81
|
+
return ((x.symbol < y.symbol) ||
|
|
82
|
+
(x.symbol == y.symbol) && (x.i_state < y.i_state));
|
|
83
|
+
}
|
|
84
|
+
forceinline static void
|
|
85
|
+
sort(DFA::Transition t[], int n) {
|
|
86
|
+
TransBySymbolI_State tbsi;
|
|
87
|
+
Support::quicksort<DFA::Transition,TransBySymbolI_State>(t,n,tbsi);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* \brief Sort transition array by output state
|
|
93
|
+
*/
|
|
94
|
+
class TransByO_State {
|
|
95
|
+
public:
|
|
96
|
+
forceinline bool
|
|
97
|
+
operator()(const DFA::Transition& x, const DFA::Transition& y) {
|
|
98
|
+
return x.o_state < y.o_state;
|
|
99
|
+
}
|
|
100
|
+
forceinline static void
|
|
101
|
+
sort(DFA::Transition t[], int n) {
|
|
102
|
+
TransByO_State tbos;
|
|
103
|
+
Support::quicksort<DFA::Transition,TransByO_State>(t,n,tbos);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* \brief Stategroup is used to compute a partition of states
|
|
110
|
+
*/
|
|
111
|
+
class StateGroup {
|
|
112
|
+
public:
|
|
113
|
+
int state;
|
|
114
|
+
int group;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* \brief Sort groups stated by group and then state
|
|
119
|
+
*/
|
|
120
|
+
class StateGroupByGroup {
|
|
121
|
+
public:
|
|
122
|
+
forceinline bool
|
|
123
|
+
operator()(const StateGroup& x, const StateGroup& y) {
|
|
124
|
+
return ((x.group < y.group) ||
|
|
125
|
+
(x.group == y.group) && (x.state < y.state));
|
|
126
|
+
}
|
|
127
|
+
static void
|
|
128
|
+
sort(StateGroup sg[], int n) {
|
|
129
|
+
StateGroupByGroup o;
|
|
130
|
+
Support::quicksort<StateGroup,StateGroupByGroup>(sg,n,o);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* \brief %GroupStates is used to index %StateGroup by group
|
|
136
|
+
*/
|
|
137
|
+
class GroupStates {
|
|
138
|
+
public:
|
|
139
|
+
StateGroup* fst;
|
|
140
|
+
StateGroup* lst;
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
/// Information about states
|
|
144
|
+
enum StateInfo {
|
|
145
|
+
SI_NONE = 0, ///< State is not reachable
|
|
146
|
+
SI_FROM_START = 1, ///< State is reachable from start state
|
|
147
|
+
SI_TO_FINAL = 2, ///< Final state is reachable from state
|
|
148
|
+
SI_FINAL = 4, ///< State is final
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
}}}
|
|
152
|
+
|
|
153
|
+
namespace Gecode {
|
|
154
|
+
|
|
155
|
+
DFA::DFA(int start, Transition t_spec[], int f_spec[], bool minimize) {
|
|
156
|
+
using namespace Int;
|
|
157
|
+
using namespace Extensional;
|
|
158
|
+
// Compute number of states and transitions
|
|
159
|
+
int n_states = start;
|
|
160
|
+
int n_trans = 0;
|
|
161
|
+
for (Transition* t = &t_spec[0]; t->i_state >= 0; t++) {
|
|
162
|
+
n_states = std::max(n_states,t->i_state);
|
|
163
|
+
n_states = std::max(n_states,t->o_state);
|
|
164
|
+
n_trans++;
|
|
165
|
+
}
|
|
166
|
+
for (int* f = &f_spec[0]; *f >= 0; f++)
|
|
167
|
+
n_states = std::max(n_states,*f);
|
|
168
|
+
n_states++;
|
|
169
|
+
|
|
170
|
+
// Temporary structure for transitions
|
|
171
|
+
GECODE_AUTOARRAY(Transition, trans, n_trans);
|
|
172
|
+
for (int i = n_trans; i--; )
|
|
173
|
+
trans[i] = t_spec[i];
|
|
174
|
+
// Temporary structures for finals
|
|
175
|
+
GECODE_AUTOARRAY(int, final, n_states+1);
|
|
176
|
+
GECODE_AUTOARRAY(bool, is_final, n_states+1);
|
|
177
|
+
int n_finals = 0;
|
|
178
|
+
for (int i = n_states+1; i--; )
|
|
179
|
+
is_final[i] = false;
|
|
180
|
+
for (int* f = &f_spec[0]; *f != -1; f++) {
|
|
181
|
+
is_final[*f] = true;
|
|
182
|
+
final[n_finals++] = *f;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (minimize) {
|
|
186
|
+
// Sort transitions by symbol and i_state
|
|
187
|
+
TransBySymbolI_State::sort(trans, n_trans);
|
|
188
|
+
GECODE_AUTOARRAY(Transition*, idx, n_trans+1);
|
|
189
|
+
// idx[i]...idx[i+1]-1 gives where transitions for symbol i start
|
|
190
|
+
int n_symbols = 0;
|
|
191
|
+
{
|
|
192
|
+
int j = 0;
|
|
193
|
+
while (j < n_trans) {
|
|
194
|
+
idx[n_symbols++] = &trans[j];
|
|
195
|
+
int s = trans[j].symbol;
|
|
196
|
+
while ((j < n_trans) && (s == trans[j].symbol))
|
|
197
|
+
j++;
|
|
198
|
+
}
|
|
199
|
+
idx[n_symbols] = &trans[j];
|
|
200
|
+
assert(j == n_trans);
|
|
201
|
+
}
|
|
202
|
+
// Map states to groups
|
|
203
|
+
GECODE_AUTOARRAY(int, s2g, n_states+1);
|
|
204
|
+
GECODE_AUTOARRAY(StateGroup, part, n_states+1);
|
|
205
|
+
GECODE_AUTOARRAY(GroupStates, g2s, n_states+1);
|
|
206
|
+
// Initialize: final states is group one, all other group zero
|
|
207
|
+
for (int i = n_states+1; i--; ) {
|
|
208
|
+
part[i].state = i;
|
|
209
|
+
part[i].group = is_final[i] ? 1 : 0;
|
|
210
|
+
s2g[i] = part[i].group;
|
|
211
|
+
}
|
|
212
|
+
// Important: the state n_state is the dead state, conceptually
|
|
213
|
+
// if there is no transition for a symbol and input state, it is
|
|
214
|
+
// assumed that there is an implicit transition to n_state
|
|
215
|
+
|
|
216
|
+
// Set up the indexing data structure, sort by group
|
|
217
|
+
StateGroupByGroup::sort(part,n_states+1);
|
|
218
|
+
int n_groups;
|
|
219
|
+
if (part[0].group == part[n_states].group) {
|
|
220
|
+
// No final states, just one group
|
|
221
|
+
g2s[0].fst = &part[0]; g2s[0].lst = &part[n_states+1];
|
|
222
|
+
n_groups = 1;
|
|
223
|
+
} else {
|
|
224
|
+
int i = 0;
|
|
225
|
+
assert(part[0].group == 0);
|
|
226
|
+
do i++; while (part[i].group == 0);
|
|
227
|
+
g2s[0].fst = &part[0]; g2s[0].lst = &part[i];
|
|
228
|
+
g2s[1].fst = &part[i]; g2s[1].lst = &part[n_states+1];
|
|
229
|
+
n_groups = 2;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Do the refinement
|
|
233
|
+
{
|
|
234
|
+
int m_groups;
|
|
235
|
+
do {
|
|
236
|
+
m_groups = n_groups;
|
|
237
|
+
// Iterate over symbols
|
|
238
|
+
for (int sidx = n_symbols; sidx--; ) {
|
|
239
|
+
// Iterate over groups
|
|
240
|
+
for (int g = n_groups; g--; ) {
|
|
241
|
+
// Ignore singleton groups
|
|
242
|
+
if (g2s[g].lst-g2s[g].fst > 1) {
|
|
243
|
+
// Apply transitions to group states
|
|
244
|
+
// This exploits that both transitions as well as
|
|
245
|
+
// stategroups are sorted by (input) state
|
|
246
|
+
Transition* t = idx[sidx];
|
|
247
|
+
Transition* t_lst = idx[sidx+1];
|
|
248
|
+
for (StateGroup* sg = g2s[g].fst; sg<g2s[g].lst; sg++) {
|
|
249
|
+
while ((t < t_lst) && (t->i_state < sg->state))
|
|
250
|
+
t++;
|
|
251
|
+
// Compute group resulting from transition
|
|
252
|
+
if ((t < t_lst) && (t->i_state == sg->state))
|
|
253
|
+
sg->group = s2g[t->o_state];
|
|
254
|
+
else
|
|
255
|
+
sg->group = s2g[n_states]; // Go to dead state
|
|
256
|
+
}
|
|
257
|
+
// Sort group by groups from transitions
|
|
258
|
+
StateGroupByGroup::sort(g2s[g].fst,
|
|
259
|
+
static_cast<int>(g2s[g].lst-g2s[g].fst));
|
|
260
|
+
// Group must be split?
|
|
261
|
+
if (g2s[g].fst->group != (g2s[g].lst-1)->group) {
|
|
262
|
+
// Skip first group
|
|
263
|
+
StateGroup* sg = g2s[g].fst+1;
|
|
264
|
+
while ((sg-1)->group == sg->group)
|
|
265
|
+
sg++;
|
|
266
|
+
// Start splitting
|
|
267
|
+
StateGroup* lst = g2s[g].lst;
|
|
268
|
+
g2s[g].lst = sg;
|
|
269
|
+
while (sg < lst) {
|
|
270
|
+
s2g[sg->state] = n_groups;
|
|
271
|
+
g2s[n_groups].fst = sg++;
|
|
272
|
+
while ((sg < lst) && ((sg-1)->group == sg->group)) {
|
|
273
|
+
s2g[sg->state] = n_groups; sg++;
|
|
274
|
+
}
|
|
275
|
+
g2s[n_groups++].lst = sg;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
} while (n_groups != m_groups);
|
|
282
|
+
// New start state
|
|
283
|
+
start = s2g[start];
|
|
284
|
+
// Compute new final states
|
|
285
|
+
n_finals = 0;
|
|
286
|
+
for (int g = n_groups; g--; )
|
|
287
|
+
for (StateGroup* sg = g2s[g].fst; sg < g2s[g].lst; sg++)
|
|
288
|
+
if (is_final[sg->state]) {
|
|
289
|
+
final[n_finals++] = g;
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
// Compute representatives
|
|
293
|
+
GECODE_AUTOARRAY(int, s2r, n_states+1);
|
|
294
|
+
for (int i = n_states+1; i--; )
|
|
295
|
+
s2r[i] = -1;
|
|
296
|
+
for (int g = n_groups; g--; )
|
|
297
|
+
s2r[g2s[g].fst->state] = g;
|
|
298
|
+
// Clean transitions
|
|
299
|
+
int j = 0;
|
|
300
|
+
for (int i = 0; i<n_trans; i++)
|
|
301
|
+
if (s2r[trans[i].i_state] != -1) {
|
|
302
|
+
trans[j].i_state = s2g[trans[i].i_state];
|
|
303
|
+
trans[j].symbol = trans[i].symbol;
|
|
304
|
+
trans[j].o_state = s2g[trans[i].o_state];
|
|
305
|
+
j++;
|
|
306
|
+
}
|
|
307
|
+
n_trans = j;
|
|
308
|
+
n_states = n_groups;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Do a reachability analysis for all states starting from start state
|
|
313
|
+
GECODE_AUTOSTACK(int, -1, visit, n_states);
|
|
314
|
+
GECODE_AUTOARRAY(int, state, n_states);
|
|
315
|
+
for (int i=n_states; i--; )
|
|
316
|
+
state[i] = SI_NONE;
|
|
317
|
+
|
|
318
|
+
{
|
|
319
|
+
// Sort all transitions according to i_state and create index structure
|
|
320
|
+
// idx[i]...idx[i+1]-1 gives where transitions for state i start
|
|
321
|
+
TransByI_State::sort(trans, n_trans);
|
|
322
|
+
GECODE_AUTOARRAY(Transition*, idx, n_states+1);
|
|
323
|
+
{
|
|
324
|
+
int j = 0;
|
|
325
|
+
for (int i=0; i<n_states; i++) {
|
|
326
|
+
idx[i] = &trans[j];
|
|
327
|
+
while ((j < n_trans) && (i == trans[j].i_state))
|
|
328
|
+
j++;
|
|
329
|
+
}
|
|
330
|
+
idx[n_states] = &trans[j];
|
|
331
|
+
assert(j == n_trans);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
state[start] = SI_FROM_START;
|
|
335
|
+
visit.push(start);
|
|
336
|
+
while (!visit.empty()) {
|
|
337
|
+
int s = visit.pop();
|
|
338
|
+
for (Transition* t = idx[s]; t < idx[s+1]; t++)
|
|
339
|
+
if (!(state[t->o_state] & SI_FROM_START)) {
|
|
340
|
+
state[t->o_state] |= SI_FROM_START;
|
|
341
|
+
visit.push(t->o_state);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
// Do a reachability analysis for all states to a final state
|
|
347
|
+
{
|
|
348
|
+
// Sort all transitions according to o_state and create index structure
|
|
349
|
+
// idx[i]...idx[i+1]-1 gives where transitions for state i start
|
|
350
|
+
TransByO_State::sort(trans, n_trans);
|
|
351
|
+
GECODE_AUTOARRAY(Transition*, idx, n_states+1);
|
|
352
|
+
{
|
|
353
|
+
int j = 0;
|
|
354
|
+
for (int i=0; i<n_states; i++) {
|
|
355
|
+
idx[i] = &trans[j];
|
|
356
|
+
while ((j < n_trans) && (i == trans[j].o_state))
|
|
357
|
+
j++;
|
|
358
|
+
}
|
|
359
|
+
idx[n_states] = &trans[j];
|
|
360
|
+
assert(j == n_trans);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
for (int i = n_finals; i--; ) {
|
|
364
|
+
state[final[i]] |= (SI_TO_FINAL | SI_FINAL);
|
|
365
|
+
visit.push(final[i]);
|
|
366
|
+
}
|
|
367
|
+
while (!visit.empty()) {
|
|
368
|
+
int s = visit.pop();
|
|
369
|
+
for (Transition* t = idx[s]; t < idx[s+1]; t++)
|
|
370
|
+
if (!(state[t->i_state] & SI_TO_FINAL)) {
|
|
371
|
+
state[t->i_state] |= SI_TO_FINAL;
|
|
372
|
+
visit.push(t->i_state);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// Now all reachable states are known (also the final ones)
|
|
378
|
+
GECODE_AUTOARRAY(int, re, n_states);
|
|
379
|
+
for (int i = n_states; i--; )
|
|
380
|
+
re[i] = -1;
|
|
381
|
+
|
|
382
|
+
// Renumber states
|
|
383
|
+
int m_states = 0;
|
|
384
|
+
// Start state gets zero
|
|
385
|
+
re[start] = m_states++;
|
|
386
|
+
|
|
387
|
+
// Renumber final states
|
|
388
|
+
for (int i = n_states; i--; )
|
|
389
|
+
if ((state[i] == (SI_FINAL | SI_FROM_START | SI_TO_FINAL)) && (re[i] < 0))
|
|
390
|
+
re[i] = m_states++;
|
|
391
|
+
// If start state is final, final states start from zero, otherwise from one
|
|
392
|
+
int final_fst = (state[start] & SI_FINAL) ? 0 : 1;
|
|
393
|
+
int final_lst = m_states;
|
|
394
|
+
// final_fst...final_lst-1 are the final states
|
|
395
|
+
|
|
396
|
+
// Renumber remaining states
|
|
397
|
+
for (int i = n_states; i--; )
|
|
398
|
+
if ((state[i] == (SI_FROM_START | SI_TO_FINAL)) && (re[i] < 0))
|
|
399
|
+
re[i] = m_states++;
|
|
400
|
+
|
|
401
|
+
// Count number of remaining transitions
|
|
402
|
+
int m_trans = 0;
|
|
403
|
+
for (int i = n_trans; i--; )
|
|
404
|
+
if ((re[trans[i].i_state] >= 0) && (re[trans[i].o_state] >= 0))
|
|
405
|
+
m_trans++;
|
|
406
|
+
|
|
407
|
+
// All done... Construct the automaton
|
|
408
|
+
DFAI* d = new DFAI(m_trans);
|
|
409
|
+
d->n_states = m_states;
|
|
410
|
+
d->n_trans = m_trans;
|
|
411
|
+
d->final_fst = final_fst;
|
|
412
|
+
d->final_lst = final_lst;
|
|
413
|
+
{
|
|
414
|
+
int j = 0;
|
|
415
|
+
Transition* r = &d->trans[0];
|
|
416
|
+
for (int i = 0; i<n_trans; i++)
|
|
417
|
+
if ((re[trans[i].i_state] >= 0) && (re[trans[i].o_state] >= 0)) {
|
|
418
|
+
r[j].symbol = trans[i].symbol;
|
|
419
|
+
r[j].i_state = re[trans[i].i_state];
|
|
420
|
+
r[j].o_state = re[trans[i].o_state];
|
|
421
|
+
j++;
|
|
422
|
+
}
|
|
423
|
+
TransBySymbol::sort(r,m_trans);
|
|
424
|
+
}
|
|
425
|
+
{
|
|
426
|
+
// Count number of symbols
|
|
427
|
+
unsigned int n_symbols = 0;
|
|
428
|
+
for (int i = 0; i<m_trans; ) {
|
|
429
|
+
int s = d->trans[i++].symbol;
|
|
430
|
+
n_symbols++;
|
|
431
|
+
while ((i<m_trans) && (d->trans[i].symbol == s))
|
|
432
|
+
i++;
|
|
433
|
+
}
|
|
434
|
+
d->n_symbols = n_symbols;
|
|
435
|
+
}
|
|
436
|
+
d->fill();
|
|
437
|
+
object(d);
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
DFA::DFA(Reflection::VarMap& vm, Reflection::Arg* arg) {
|
|
441
|
+
if (arg->isSharedReference()) {
|
|
442
|
+
DFAI* d =
|
|
443
|
+
static_cast<DFAI*>(vm.getSharedObject(arg->toSharedReference()));
|
|
444
|
+
object(d);
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
Reflection::IntArrayArg* a = arg->toSharedObject()->toIntArray();
|
|
449
|
+
|
|
450
|
+
// All done... Construct the automaton
|
|
451
|
+
|
|
452
|
+
int n_trans = (a->size() - 4) / 3;
|
|
453
|
+
DFAI* d = new DFAI(n_trans);
|
|
454
|
+
d->n_states = (*a)[0];
|
|
455
|
+
d->n_symbols = (*a)[1];
|
|
456
|
+
d->final_fst = (*a)[2];
|
|
457
|
+
d->final_lst = (*a)[3];
|
|
458
|
+
d->n_trans = n_trans;
|
|
459
|
+
for (int i=0; i<n_trans; i++) {
|
|
460
|
+
d->trans[i].i_state = (*a)[4+3*i+0];
|
|
461
|
+
d->trans[i].symbol = (*a)[4+3*i+1];
|
|
462
|
+
d->trans[i].o_state = (*a)[4+3*i+2];
|
|
463
|
+
}
|
|
464
|
+
d->fill();
|
|
465
|
+
object(d);
|
|
466
|
+
vm.putMasterObject(object());
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
Reflection::Arg*
|
|
470
|
+
DFA::spec(Reflection::VarMap& vm) const {
|
|
471
|
+
int sharedIndex = vm.getSharedIndex(object());
|
|
472
|
+
if (sharedIndex >= 0)
|
|
473
|
+
return Reflection::Arg::newSharedReference(sharedIndex);
|
|
474
|
+
Reflection::IntArrayArg* a =
|
|
475
|
+
Reflection::Arg::newIntArray(static_cast<int>(4+3*n_transitions()));
|
|
476
|
+
(*a)[0] = n_states();
|
|
477
|
+
(*a)[1] = n_symbols();
|
|
478
|
+
(*a)[2] = final_fst();
|
|
479
|
+
(*a)[3] = final_lst();
|
|
480
|
+
const DFAI* o = static_cast<DFAI*>(object());
|
|
481
|
+
for (unsigned int i=0; i<n_transitions(); i++ ) {
|
|
482
|
+
(*a)[4+3*i+0] = o->trans[i].i_state;
|
|
483
|
+
(*a)[4+3*i+1] = o->trans[i].symbol;
|
|
484
|
+
(*a)[4+3*i+2] = o->trans[i].o_state;
|
|
485
|
+
}
|
|
486
|
+
vm.putMasterObject(object());
|
|
487
|
+
return Reflection::Arg::newSharedObject(a);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
SharedHandle::Object*
|
|
491
|
+
DFA::DFAI::copy(void) const {
|
|
492
|
+
DFAI* d = new DFAI(n_trans);
|
|
493
|
+
d->n_states = n_states;
|
|
494
|
+
d->n_symbols = n_symbols;
|
|
495
|
+
d->n_trans = n_trans;
|
|
496
|
+
d->final_fst = final_fst;
|
|
497
|
+
d->final_lst = final_lst;
|
|
498
|
+
memcpy(&d->trans[0], &trans[0], sizeof(Transition)*n_trans);
|
|
499
|
+
d->fill();
|
|
500
|
+
return d;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
void
|
|
504
|
+
DFA::DFAI::fill(void) {
|
|
505
|
+
// Compute smallest logarithm larger than n_symbols
|
|
506
|
+
n_log = 1;
|
|
507
|
+
while (n_symbols >= static_cast<unsigned int>(1<<n_log))
|
|
508
|
+
n_log++;
|
|
509
|
+
// Allocate memory
|
|
510
|
+
table = static_cast<HashEntry*>
|
|
511
|
+
(Memory::malloc(sizeof(HashEntry)*(1<<n_log)));
|
|
512
|
+
// Initialize table
|
|
513
|
+
for (int i=(1<<n_log); i--; )
|
|
514
|
+
table[i].fst = table[i].lst = NULL;
|
|
515
|
+
int mask = (1 << n_log) - 1;
|
|
516
|
+
// Enter transitions to table
|
|
517
|
+
for (unsigned int i = 0; i<n_trans; ) {
|
|
518
|
+
int s = trans[i].symbol;
|
|
519
|
+
Transition* fst = &trans[i];
|
|
520
|
+
i++;
|
|
521
|
+
while ((i<n_trans) && (trans[i].symbol == s))
|
|
522
|
+
i++;
|
|
523
|
+
Transition* lst = &trans[i];
|
|
524
|
+
// Enter with linear collision resolution
|
|
525
|
+
int p = s & mask;
|
|
526
|
+
while (table[p].fst != NULL)
|
|
527
|
+
p = (p+1) & mask;
|
|
528
|
+
table[p].symbol = s;
|
|
529
|
+
table[p].fst = fst;
|
|
530
|
+
table[p].lst = lst;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
std::ostream&
|
|
537
|
+
operator<<(std::ostream& os, const Gecode::DFA& dfa) {
|
|
538
|
+
os << "Start state: 0" << std::endl
|
|
539
|
+
<< "States: 0..." << dfa.n_states()-1 << std::endl
|
|
540
|
+
<< "Transitions:";
|
|
541
|
+
for (int s = 0; s < static_cast<int>(dfa.n_states()); s++) {
|
|
542
|
+
Gecode::DFA::Transitions t(dfa);
|
|
543
|
+
int n = 0;
|
|
544
|
+
while (t()) {
|
|
545
|
+
if (t.i_state() == s) {
|
|
546
|
+
if ((n % 4) == 0)
|
|
547
|
+
os << std::endl << "\t";
|
|
548
|
+
os << "[" << t.i_state() << "]"
|
|
549
|
+
<< "- " << t.symbol() << " >"
|
|
550
|
+
<< "[" << t.o_state() << "] ";
|
|
551
|
+
++n;
|
|
552
|
+
}
|
|
553
|
+
++t;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
os << std::endl << "Final states: "
|
|
557
|
+
<< std::endl
|
|
558
|
+
<< "\t[" << dfa.final_fst() << "] ... ["
|
|
559
|
+
<< dfa.final_lst()-1 << "]"
|
|
560
|
+
<< std::endl;
|
|
561
|
+
return os;
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
// STATISTICS: int-prop
|
|
565
|
+
|