tesseract_bin 1.0.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/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/ext/tesseract_bin/extconf.rb +17 -0
- data/lib/tesseract_bin.rb +12 -0
- data/tesseract_bin.gemspec +660 -0
- data/test/helper.rb +18 -0
- data/test/test_tesseract_bin.rb +7 -0
- data/vendor/tesseract-2.04/AUTHORS +8 -0
- data/vendor/tesseract-2.04/COPYING +23 -0
- data/vendor/tesseract-2.04/ChangeLog +71 -0
- data/vendor/tesseract-2.04/INSTALL +229 -0
- data/vendor/tesseract-2.04/Makefile.am +20 -0
- data/vendor/tesseract-2.04/Makefile.in +641 -0
- data/vendor/tesseract-2.04/NEWS +1 -0
- data/vendor/tesseract-2.04/README +138 -0
- data/vendor/tesseract-2.04/ReleaseNotes +213 -0
- data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
- data/vendor/tesseract-2.04/StdAfx.h +24 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
- data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
- data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
- data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
- data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
- data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
- data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
- data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
- data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
- data/vendor/tesseract-2.04/ccmain/control.h +198 -0
- data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
- data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
- data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
- data/vendor/tesseract-2.04/ccmain/output.h +116 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
- data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
- data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
- data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
- data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
- data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
- data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
- data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
- data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
- data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
- data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
- data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
- data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
- data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
- data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
- data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
- data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
- data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
- data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
- data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
- data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
- data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
- data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
- data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
- data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
- data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
- data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
- data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
- data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
- data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
- data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
- data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
- data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
- data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
- data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
- data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
- data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
- data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
- data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
- data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
- data/vendor/tesseract-2.04/ccutil/host.h +180 -0
- data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
- data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
- data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
- data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
- data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
- data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
- data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
- data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
- data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
- data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
- data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
- data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
- data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
- data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
- data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
- data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
- data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
- data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
- data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
- data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
- data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
- data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
- data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
- data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
- data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
- data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
- data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
- data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
- data/vendor/tesseract-2.04/classify/baseline.h +91 -0
- data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
- data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
- data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
- data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
- data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
- data/vendor/tesseract-2.04/classify/cluster.h +158 -0
- data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
- data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
- data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
- data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
- data/vendor/tesseract-2.04/classify/extern.h +32 -0
- data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
- data/vendor/tesseract-2.04/classify/extract.h +36 -0
- data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
- data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
- data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
- data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
- data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
- data/vendor/tesseract-2.04/classify/float2int.h +65 -0
- data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
- data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
- data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
- data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
- data/vendor/tesseract-2.04/classify/fxid.h +69 -0
- data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
- data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
- data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
- data/vendor/tesseract-2.04/classify/intfx.h +63 -0
- data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
- data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
- data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
- data/vendor/tesseract-2.04/classify/intproto.h +320 -0
- data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
- data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
- data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
- data/vendor/tesseract-2.04/classify/mf.h +43 -0
- data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
- data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
- data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
- data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
- data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
- data/vendor/tesseract-2.04/classify/mfx.h +52 -0
- data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
- data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
- data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
- data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
- data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
- data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
- data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
- data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
- data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
- data/vendor/tesseract-2.04/classify/protos.h +258 -0
- data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
- data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
- data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
- data/vendor/tesseract-2.04/classify/speckle.h +69 -0
- data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
- data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
- data/vendor/tesseract-2.04/config/config.guess +1466 -0
- data/vendor/tesseract-2.04/config/config.h.in +188 -0
- data/vendor/tesseract-2.04/config/config.sub +1579 -0
- data/vendor/tesseract-2.04/config/depcomp +530 -0
- data/vendor/tesseract-2.04/config/install-sh +269 -0
- data/vendor/tesseract-2.04/config/missing +198 -0
- data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
- data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
- data/vendor/tesseract-2.04/configure +10424 -0
- data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
- data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
- data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
- data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
- data/vendor/tesseract-2.04/cutil/const.h +108 -0
- data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
- data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
- data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
- data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
- data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
- data/vendor/tesseract-2.04/cutil/debug.h +348 -0
- data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
- data/vendor/tesseract-2.04/cutil/efio.h +32 -0
- data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
- data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
- data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
- data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
- data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
- data/vendor/tesseract-2.04/cutil/general.h +33 -0
- data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
- data/vendor/tesseract-2.04/cutil/globals.h +70 -0
- data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
- data/vendor/tesseract-2.04/cutil/listio.h +43 -0
- data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
- data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
- data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
- data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
- data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
- data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
- data/vendor/tesseract-2.04/cutil/structures.h +112 -0
- data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
- data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
- data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
- data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
- data/vendor/tesseract-2.04/cutil/variables.h +170 -0
- data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
- data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
- data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
- data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
- data/vendor/tesseract-2.04/dict/choices.h +241 -0
- data/vendor/tesseract-2.04/dict/context.cpp +270 -0
- data/vendor/tesseract-2.04/dict/context.h +82 -0
- data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
- data/vendor/tesseract-2.04/dict/dawg.h +394 -0
- data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
- data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
- data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
- data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
- data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
- data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
- data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
- data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
- data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
- data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
- data/vendor/tesseract-2.04/dict/permngram.h +33 -0
- data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
- data/vendor/tesseract-2.04/dict/permnum.h +83 -0
- data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
- data/vendor/tesseract-2.04/dict/permute.h +93 -0
- data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
- data/vendor/tesseract-2.04/dict/reduce.h +112 -0
- data/vendor/tesseract-2.04/dict/states.cpp +382 -0
- data/vendor/tesseract-2.04/dict/states.h +111 -0
- data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
- data/vendor/tesseract-2.04/dict/stopper.h +103 -0
- data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
- data/vendor/tesseract-2.04/dict/trie.h +190 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
- data/vendor/tesseract-2.04/eurotext.tif +0 -0
- data/vendor/tesseract-2.04/image/Makefile.am +10 -0
- data/vendor/tesseract-2.04/image/Makefile.in +596 -0
- data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
- data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
- data/vendor/tesseract-2.04/image/img.h +336 -0
- data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
- data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
- data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
- data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
- data/vendor/tesseract-2.04/image/imgio.h +22 -0
- data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
- data/vendor/tesseract-2.04/image/imgs.h +102 -0
- data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
- data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
- data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
- data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
- data/vendor/tesseract-2.04/image/svshowim.h +25 -0
- data/vendor/tesseract-2.04/java/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
- data/vendor/tesseract-2.04/java/makefile +55 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
- data/vendor/tesseract-2.04/phototest.tif +0 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
- data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
- data/vendor/tesseract-2.04/tessdata/confsets +3 -0
- data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
- data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
- data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
- data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
- data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
- data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
- data/vendor/tesseract-2.04/tessdll.cpp +351 -0
- data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
- data/vendor/tesseract-2.04/tessdll.h +143 -0
- data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
- data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
- data/vendor/tesseract-2.04/tesseract.dsw +116 -0
- data/vendor/tesseract-2.04/tesseract.sln +59 -0
- data/vendor/tesseract-2.04/tesseract.spec +188 -0
- data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
- data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
- data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
- data/vendor/tesseract-2.04/testing/README +43 -0
- data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
- data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
- data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
- data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
- data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
- data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
- data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
- data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
- data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
- data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
- data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
- data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
- data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
- data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
- data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
- data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
- data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
- data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
- data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
- data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
- data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
- data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
- data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
- data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
- data/vendor/tesseract-2.04/textord/makerow.h +295 -0
- data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
- data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
- data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
- data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
- data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
- data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
- data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
- data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
- data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
- data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
- data/vendor/tesseract-2.04/textord/tessout.h +76 -0
- data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
- data/vendor/tesseract-2.04/textord/topitch.h +195 -0
- data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
- data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
- data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
- data/vendor/tesseract-2.04/textord/tospace.h +193 -0
- data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
- data/vendor/tesseract-2.04/textord/tovars.h +94 -0
- data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
- data/vendor/tesseract-2.04/textord/underlin.h +53 -0
- data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
- data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
- data/vendor/tesseract-2.04/training/Makefile.am +54 -0
- data/vendor/tesseract-2.04/training/Makefile.in +720 -0
- data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
- data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
- data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
- data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
- data/vendor/tesseract-2.04/training/mergenf.h +106 -0
- data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
- data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
- data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
- data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
- data/vendor/tesseract-2.04/training/name2char.h +38 -0
- data/vendor/tesseract-2.04/training/training.cpp +190 -0
- data/vendor/tesseract-2.04/training/training.h +130 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
- data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
- data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
- data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
- data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
- data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
- data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
- data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
- data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
- data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
- data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
- data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
- data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
- data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
- data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
- data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
- data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
- data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
- data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
- data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
- data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
- data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
- data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
- data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
- data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
- data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
- data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
- data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
- data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
- data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
- data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
- data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
- data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
- data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
- data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
- data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
- data/vendor/tesseract-2.04/wordrec/render.h +58 -0
- data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
- data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
- data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
- data/vendor/tesseract-2.04/wordrec/split.h +115 -0
- data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
- data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
- data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
- data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
- metadata +708 -0
|
@@ -0,0 +1,606 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: elst2.c (Formerly elist2.c)
|
|
3
|
+
* Description: Doubly linked embedded list code not in the include file.
|
|
4
|
+
* Author: Phil Cheatle
|
|
5
|
+
* Created: Wed Jan 23 11:04:47 GMT 1991
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1991, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#include "mfcpch.h" //precompiled headers
|
|
21
|
+
#include <stdlib.h>
|
|
22
|
+
#include "host.h"
|
|
23
|
+
#include "elst2.h"
|
|
24
|
+
|
|
25
|
+
/***********************************************************************
|
|
26
|
+
* MEMBER FUNCTIONS OF CLASS: ELIST2
|
|
27
|
+
* =================================
|
|
28
|
+
**********************************************************************/
|
|
29
|
+
|
|
30
|
+
/***********************************************************************
|
|
31
|
+
* ELIST2::internal_clear
|
|
32
|
+
*
|
|
33
|
+
* Used by the destructor and the "clear" member function of derived list
|
|
34
|
+
* classes to destroy all the elements on the list.
|
|
35
|
+
* The calling function passes a "zapper" function which can be called to
|
|
36
|
+
* delete each element of the list, regardless of its derived type. This
|
|
37
|
+
* technique permits a generic clear function to destroy elements of
|
|
38
|
+
* different derived types correctly, without requiring virtual functions and
|
|
39
|
+
* the consequential memory overhead.
|
|
40
|
+
**********************************************************************/
|
|
41
|
+
|
|
42
|
+
void
|
|
43
|
+
ELIST2::internal_clear ( //destroy all links
|
|
44
|
+
void (*zapper) (ELIST2_LINK *)) {
|
|
45
|
+
//ptr to zapper functn
|
|
46
|
+
ELIST2_LINK *ptr;
|
|
47
|
+
ELIST2_LINK *next;
|
|
48
|
+
|
|
49
|
+
#ifndef NDEBUG
|
|
50
|
+
if (!this)
|
|
51
|
+
NULL_OBJECT.error ("ELIST2::internal_clear", ABORT, NULL);
|
|
52
|
+
#endif
|
|
53
|
+
|
|
54
|
+
if (!empty ()) {
|
|
55
|
+
ptr = last->next; //set to first
|
|
56
|
+
last->next = NULL; //break circle
|
|
57
|
+
last = NULL; //set list empty
|
|
58
|
+
while (ptr) {
|
|
59
|
+
next = ptr->next;
|
|
60
|
+
zapper(ptr);
|
|
61
|
+
ptr = next;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/***********************************************************************
|
|
67
|
+
* ELIST2::assign_to_sublist
|
|
68
|
+
*
|
|
69
|
+
* The list is set to a sublist of another list. "This" list must be empty
|
|
70
|
+
* before this function is invoked. The two iterators passed must refer to
|
|
71
|
+
* the same list, different from "this" one. The sublist removed is the
|
|
72
|
+
* inclusive list from start_it's current position to end_it's current
|
|
73
|
+
* position. If this range passes over the end of the source list then the
|
|
74
|
+
* source list has its end set to the previous element of start_it. The
|
|
75
|
+
* extracted sublist is unaffected by the end point of the source list, its
|
|
76
|
+
* end point is always the end_it position.
|
|
77
|
+
**********************************************************************/
|
|
78
|
+
|
|
79
|
+
void ELIST2::assign_to_sublist( //to this list
|
|
80
|
+
ELIST2_ITERATOR *start_it, //from list start
|
|
81
|
+
ELIST2_ITERATOR *end_it) { //from list end
|
|
82
|
+
const ERRCODE LIST_NOT_EMPTY =
|
|
83
|
+
"Destination list must be empty before extracting a sublist";
|
|
84
|
+
|
|
85
|
+
#ifndef NDEBUG
|
|
86
|
+
if (!this)
|
|
87
|
+
NULL_OBJECT.error ("ELIST2::assign_to_sublist", ABORT, NULL);
|
|
88
|
+
#endif
|
|
89
|
+
|
|
90
|
+
if (!empty ())
|
|
91
|
+
LIST_NOT_EMPTY.error ("ELIST2.assign_to_sublist", ABORT, NULL);
|
|
92
|
+
|
|
93
|
+
last = start_it->extract_sublist (end_it);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
/***********************************************************************
|
|
98
|
+
* ELIST2::length
|
|
99
|
+
*
|
|
100
|
+
* Return count of elements on list
|
|
101
|
+
**********************************************************************/
|
|
102
|
+
|
|
103
|
+
inT32 ELIST2::length() { //count elements
|
|
104
|
+
ELIST2_ITERATOR it(this);
|
|
105
|
+
inT32 count = 0;
|
|
106
|
+
|
|
107
|
+
#ifndef NDEBUG
|
|
108
|
+
if (!this)
|
|
109
|
+
NULL_OBJECT.error ("ELIST2::length", ABORT, NULL);
|
|
110
|
+
#endif
|
|
111
|
+
|
|
112
|
+
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ())
|
|
113
|
+
count++;
|
|
114
|
+
return count;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
/***********************************************************************
|
|
119
|
+
* ELIST2::sort
|
|
120
|
+
*
|
|
121
|
+
* Sort elements on list
|
|
122
|
+
* NB If you dont like the const declarations in the comparator, coerce yours:
|
|
123
|
+
* ( int (*)(const void *, const void *)
|
|
124
|
+
**********************************************************************/
|
|
125
|
+
|
|
126
|
+
void
|
|
127
|
+
ELIST2::sort ( //sort elements
|
|
128
|
+
int comparator ( //comparison routine
|
|
129
|
+
const void *, const void *)) {
|
|
130
|
+
ELIST2_ITERATOR it(this);
|
|
131
|
+
inT32 count;
|
|
132
|
+
ELIST2_LINK **base; //ptr array to sort
|
|
133
|
+
ELIST2_LINK **current;
|
|
134
|
+
inT32 i;
|
|
135
|
+
|
|
136
|
+
#ifndef NDEBUG
|
|
137
|
+
if (!this)
|
|
138
|
+
NULL_OBJECT.error ("ELIST2::sort", ABORT, NULL);
|
|
139
|
+
#endif
|
|
140
|
+
|
|
141
|
+
/* Allocate an array of pointers, one per list element */
|
|
142
|
+
count = length ();
|
|
143
|
+
base = (ELIST2_LINK **) malloc (count * sizeof (ELIST2_LINK *));
|
|
144
|
+
|
|
145
|
+
/* Extract all elements, putting the pointers in the array */
|
|
146
|
+
current = base;
|
|
147
|
+
for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) {
|
|
148
|
+
*current = it.extract ();
|
|
149
|
+
current++;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* Sort the pointer array */
|
|
153
|
+
qsort ((char *) base, count, sizeof (*base), comparator);
|
|
154
|
+
|
|
155
|
+
/* Rebuild the list from the sorted pointers */
|
|
156
|
+
current = base;
|
|
157
|
+
for (i = 0; i < count; i++) {
|
|
158
|
+
it.add_to_end (*current);
|
|
159
|
+
current++;
|
|
160
|
+
}
|
|
161
|
+
free(base);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// Assuming list has been sorted already, insert new_link to
|
|
165
|
+
// keep the list sorted according to the same comparison function.
|
|
166
|
+
// Comparision function is the same as used by sort, i.e. uses double
|
|
167
|
+
// indirection. Time is O(1) to add to beginning or end.
|
|
168
|
+
// Time is linear to add pre-sorted items to an empty list.
|
|
169
|
+
void ELIST2::add_sorted(int comparator(const void*, const void*),
|
|
170
|
+
ELIST2_LINK* new_link) {
|
|
171
|
+
// Check for adding at the end.
|
|
172
|
+
if (last == NULL || comparator(&last, &new_link) < 0) {
|
|
173
|
+
if (last == NULL) {
|
|
174
|
+
new_link->next = new_link;
|
|
175
|
+
new_link->prev = new_link;
|
|
176
|
+
} else {
|
|
177
|
+
new_link->next = last->next;
|
|
178
|
+
new_link->prev = last;
|
|
179
|
+
last->next = new_link;
|
|
180
|
+
new_link->next->prev = new_link;
|
|
181
|
+
}
|
|
182
|
+
last = new_link;
|
|
183
|
+
} else {
|
|
184
|
+
// Need to use an iterator.
|
|
185
|
+
ELIST2_ITERATOR it(this);
|
|
186
|
+
for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) {
|
|
187
|
+
ELIST2_LINK* link = it.data();
|
|
188
|
+
if (comparator(&link, &new_link) > 0)
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
if (it.cycled_list())
|
|
192
|
+
it.add_to_end(new_link);
|
|
193
|
+
else
|
|
194
|
+
it.add_before_then_move(new_link);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/***********************************************************************
|
|
199
|
+
* ELIST2::prep_serialise
|
|
200
|
+
*
|
|
201
|
+
* Replace the last member with a count of elements for serialisation.
|
|
202
|
+
* This is used on list objects which are members of objects being
|
|
203
|
+
* serialised. The containing object has been shallow copied and this member
|
|
204
|
+
* function is invoked on the COPY.
|
|
205
|
+
**********************************************************************/
|
|
206
|
+
|
|
207
|
+
void ELIST2::prep_serialise() {
|
|
208
|
+
ELIST2_ITERATOR this_it(this);
|
|
209
|
+
inT32 count = 0;
|
|
210
|
+
|
|
211
|
+
#ifndef NDEBUG
|
|
212
|
+
if (!this)
|
|
213
|
+
NULL_OBJECT.error ("ELIST2::prep_serialise", ABORT, NULL);
|
|
214
|
+
#endif
|
|
215
|
+
|
|
216
|
+
count = 0;
|
|
217
|
+
if (!empty ())
|
|
218
|
+
for (this_it.mark_cycle_pt ();
|
|
219
|
+
!this_it.cycled_list (); this_it.forward ())
|
|
220
|
+
count++;
|
|
221
|
+
last = (ELIST2_LINK *) count;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
/***********************************************************************
|
|
226
|
+
* ELIST2::internal_dump
|
|
227
|
+
*
|
|
228
|
+
* Cause each element on the list to be serialised by walking the list and
|
|
229
|
+
* calling the element_serialiser function for each element. The
|
|
230
|
+
* element_serialiser simply does the appropriate coercion of the element to
|
|
231
|
+
* its real type and then invokes the elements serialise function
|
|
232
|
+
**********************************************************************/
|
|
233
|
+
|
|
234
|
+
void
|
|
235
|
+
ELIST2::internal_dump (FILE * f,
|
|
236
|
+
void element_serialiser (FILE *, ELIST2_LINK *)) {
|
|
237
|
+
ELIST2_ITERATOR this_it(this);
|
|
238
|
+
|
|
239
|
+
#ifndef NDEBUG
|
|
240
|
+
if (!this)
|
|
241
|
+
NULL_OBJECT.error ("ELIST2::internal_dump", ABORT, NULL);
|
|
242
|
+
#endif
|
|
243
|
+
|
|
244
|
+
if (!empty ())
|
|
245
|
+
for (this_it.mark_cycle_pt ();
|
|
246
|
+
!this_it.cycled_list (); this_it.forward ())
|
|
247
|
+
element_serialiser (f, this_it.data ());
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
/***********************************************************************
|
|
252
|
+
* ELIST2::internal_de_dump
|
|
253
|
+
*
|
|
254
|
+
* Cause each element on the list to be de_serialised by extracting the count
|
|
255
|
+
* of elements on the list, (held in the last member of the dumped version of
|
|
256
|
+
* the list object), and then de-serialising that number of list elements,
|
|
257
|
+
* adding each to the end of the reconstructed list.
|
|
258
|
+
**********************************************************************/
|
|
259
|
+
|
|
260
|
+
void
|
|
261
|
+
ELIST2::internal_de_dump (FILE * f,
|
|
262
|
+
ELIST2_LINK * element_de_serialiser (FILE *)) {
|
|
263
|
+
inT32 count = (ptrdiff_t) last;
|
|
264
|
+
ELIST2_ITERATOR this_it;
|
|
265
|
+
ELIST2_LINK *de_serialised_element;
|
|
266
|
+
|
|
267
|
+
#ifndef NDEBUG
|
|
268
|
+
if (!this)
|
|
269
|
+
NULL_OBJECT.error ("ELIST2::internal_de_dump", ABORT, NULL);
|
|
270
|
+
#endif
|
|
271
|
+
|
|
272
|
+
last = NULL;
|
|
273
|
+
this_it.set_to_list (this);
|
|
274
|
+
for (; count > 0; count--) {
|
|
275
|
+
de_serialised_element = element_de_serialiser (f);
|
|
276
|
+
//ignore old ptr
|
|
277
|
+
de_serialised_element->next = NULL;
|
|
278
|
+
//ignore old ptr
|
|
279
|
+
de_serialised_element->prev = NULL;
|
|
280
|
+
this_it.add_to_end (de_serialised_element);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
/***********************************************************************
|
|
286
|
+
* MEMBER FUNCTIONS OF CLASS: ELIST2_ITERATOR
|
|
287
|
+
* ==========================================
|
|
288
|
+
**********************************************************************/
|
|
289
|
+
|
|
290
|
+
/***********************************************************************
|
|
291
|
+
* ELIST2_ITERATOR::forward
|
|
292
|
+
*
|
|
293
|
+
* Move the iterator to the next element of the list.
|
|
294
|
+
* REMEMBER: ALL LISTS ARE CIRCULAR.
|
|
295
|
+
**********************************************************************/
|
|
296
|
+
|
|
297
|
+
ELIST2_LINK *ELIST2_ITERATOR::forward() {
|
|
298
|
+
#ifndef NDEBUG
|
|
299
|
+
if (!this)
|
|
300
|
+
NULL_OBJECT.error ("ELIST2_ITERATOR::forward", ABORT, NULL);
|
|
301
|
+
if (!list)
|
|
302
|
+
NO_LIST.error ("ELIST2_ITERATOR::forward", ABORT, NULL);
|
|
303
|
+
#endif
|
|
304
|
+
if (list->empty ())
|
|
305
|
+
return NULL;
|
|
306
|
+
|
|
307
|
+
if (current) { //not removed so
|
|
308
|
+
//set previous
|
|
309
|
+
prev = current;
|
|
310
|
+
started_cycling = TRUE;
|
|
311
|
+
// In case next is deleted by another iterator, get it from the current.
|
|
312
|
+
current = current->next;
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
if (ex_current_was_cycle_pt)
|
|
316
|
+
cycle_pt = next;
|
|
317
|
+
current = next;
|
|
318
|
+
}
|
|
319
|
+
next = current->next;
|
|
320
|
+
|
|
321
|
+
#ifndef NDEBUG
|
|
322
|
+
if (!current)
|
|
323
|
+
NULL_DATA.error ("ELIST2_ITERATOR::forward", ABORT, NULL);
|
|
324
|
+
if (!next)
|
|
325
|
+
NULL_NEXT.error ("ELIST2_ITERATOR::forward", ABORT,
|
|
326
|
+
"This is: %p Current is: %p", this, current);
|
|
327
|
+
#endif
|
|
328
|
+
return current;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
/***********************************************************************
|
|
333
|
+
* ELIST2_ITERATOR::backward
|
|
334
|
+
*
|
|
335
|
+
* Move the iterator to the previous element of the list.
|
|
336
|
+
* REMEMBER: ALL LISTS ARE CIRCULAR.
|
|
337
|
+
**********************************************************************/
|
|
338
|
+
|
|
339
|
+
ELIST2_LINK *ELIST2_ITERATOR::backward() {
|
|
340
|
+
#ifndef NDEBUG
|
|
341
|
+
if (!this)
|
|
342
|
+
NULL_OBJECT.error ("ELIST2_ITERATOR::backward", ABORT, NULL);
|
|
343
|
+
if (!list)
|
|
344
|
+
NO_LIST.error ("ELIST2_ITERATOR::backward", ABORT, NULL);
|
|
345
|
+
#endif
|
|
346
|
+
if (list->empty ())
|
|
347
|
+
return NULL;
|
|
348
|
+
|
|
349
|
+
if (current) { //not removed so
|
|
350
|
+
//set previous
|
|
351
|
+
next = current;
|
|
352
|
+
started_cycling = TRUE;
|
|
353
|
+
// In case prev is deleted by another iterator, get it from current.
|
|
354
|
+
current = current->prev;
|
|
355
|
+
} else {
|
|
356
|
+
if (ex_current_was_cycle_pt)
|
|
357
|
+
cycle_pt = prev;
|
|
358
|
+
current = prev;
|
|
359
|
+
}
|
|
360
|
+
prev = current->prev;
|
|
361
|
+
|
|
362
|
+
#ifndef NDEBUG
|
|
363
|
+
if (!current)
|
|
364
|
+
NULL_DATA.error ("ELIST2_ITERATOR::backward", ABORT, NULL);
|
|
365
|
+
if (!prev)
|
|
366
|
+
NULL_PREV.error ("ELIST2_ITERATOR::backward", ABORT,
|
|
367
|
+
"This is: %p Current is: %p", this, current);
|
|
368
|
+
#endif
|
|
369
|
+
return current;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
|
|
373
|
+
/***********************************************************************
|
|
374
|
+
* ELIST2_ITERATOR::data_relative
|
|
375
|
+
*
|
|
376
|
+
* Return the data pointer to the element "offset" elements from current.
|
|
377
|
+
* (This function can't be INLINEd because it contains a loop)
|
|
378
|
+
**********************************************************************/
|
|
379
|
+
|
|
380
|
+
ELIST2_LINK *ELIST2_ITERATOR::data_relative( //get data + or - ..
|
|
381
|
+
inT8 offset) { //offset from current
|
|
382
|
+
ELIST2_LINK *ptr;
|
|
383
|
+
|
|
384
|
+
#ifndef NDEBUG
|
|
385
|
+
if (!this)
|
|
386
|
+
NULL_OBJECT.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL);
|
|
387
|
+
if (!list)
|
|
388
|
+
NO_LIST.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL);
|
|
389
|
+
if (list->empty ())
|
|
390
|
+
EMPTY_LIST.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL);
|
|
391
|
+
#endif
|
|
392
|
+
|
|
393
|
+
if (offset < 0)
|
|
394
|
+
for (ptr = current ? current : next; offset++ < 0; ptr = ptr->prev);
|
|
395
|
+
else
|
|
396
|
+
for (ptr = current ? current : prev; offset-- > 0; ptr = ptr->next);
|
|
397
|
+
|
|
398
|
+
#ifndef NDEBUG
|
|
399
|
+
if (!ptr)
|
|
400
|
+
NULL_DATA.error ("ELIST2_ITERATOR::data_relative", ABORT, NULL);
|
|
401
|
+
#endif
|
|
402
|
+
|
|
403
|
+
return ptr;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
/***********************************************************************
|
|
408
|
+
* ELIST2_ITERATOR::exchange()
|
|
409
|
+
*
|
|
410
|
+
* Given another iterator, whose current element is a different element on
|
|
411
|
+
* the same list list OR an element of another list, exchange the two current
|
|
412
|
+
* elements. On return, each iterator points to the element which was the
|
|
413
|
+
* other iterators current on entry.
|
|
414
|
+
* (This function hasn't been in-lined because its a bit big!)
|
|
415
|
+
**********************************************************************/
|
|
416
|
+
|
|
417
|
+
void ELIST2_ITERATOR::exchange( //positions of 2 links
|
|
418
|
+
ELIST2_ITERATOR *other_it) { //other iterator
|
|
419
|
+
const ERRCODE DONT_EXCHANGE_DELETED =
|
|
420
|
+
"Can't exchange deleted elements of lists";
|
|
421
|
+
|
|
422
|
+
ELIST2_LINK *old_current;
|
|
423
|
+
|
|
424
|
+
#ifndef NDEBUG
|
|
425
|
+
if (!this)
|
|
426
|
+
NULL_OBJECT.error ("ELIST2_ITERATOR::exchange", ABORT, NULL);
|
|
427
|
+
if (!list)
|
|
428
|
+
NO_LIST.error ("ELIST2_ITERATOR::exchange", ABORT, NULL);
|
|
429
|
+
if (!other_it)
|
|
430
|
+
BAD_PARAMETER.error ("ELIST2_ITERATOR::exchange", ABORT, "other_it NULL");
|
|
431
|
+
if (!(other_it->list))
|
|
432
|
+
NO_LIST.error ("ELIST2_ITERATOR::exchange", ABORT, "other_it");
|
|
433
|
+
#endif
|
|
434
|
+
|
|
435
|
+
/* Do nothing if either list is empty or if both iterators reference the same
|
|
436
|
+
link */
|
|
437
|
+
|
|
438
|
+
if ((list->empty ()) ||
|
|
439
|
+
(other_it->list->empty ()) || (current == other_it->current))
|
|
440
|
+
return;
|
|
441
|
+
|
|
442
|
+
/* Error if either current element is deleted */
|
|
443
|
+
|
|
444
|
+
if (!current || !other_it->current)
|
|
445
|
+
DONT_EXCHANGE_DELETED.error ("ELIST2_ITERATOR.exchange", ABORT, NULL);
|
|
446
|
+
|
|
447
|
+
/* Now handle the 4 cases: doubleton list; non-doubleton adjacent elements
|
|
448
|
+
(other before this); non-doubleton adjacent elements (this before other);
|
|
449
|
+
non-adjacent elements. */
|
|
450
|
+
|
|
451
|
+
//adjacent links
|
|
452
|
+
if ((next == other_it->current) ||
|
|
453
|
+
(other_it->next == current)) {
|
|
454
|
+
//doubleton list
|
|
455
|
+
if ((next == other_it->current) &&
|
|
456
|
+
(other_it->next == current)) {
|
|
457
|
+
prev = next = current;
|
|
458
|
+
other_it->prev = other_it->next = other_it->current;
|
|
459
|
+
}
|
|
460
|
+
else { //non-doubleton with
|
|
461
|
+
//adjacent links
|
|
462
|
+
//other before this
|
|
463
|
+
if (other_it->next == current) {
|
|
464
|
+
other_it->prev->next = current;
|
|
465
|
+
other_it->current->next = next;
|
|
466
|
+
other_it->current->prev = current;
|
|
467
|
+
current->next = other_it->current;
|
|
468
|
+
current->prev = other_it->prev;
|
|
469
|
+
next->prev = other_it->current;
|
|
470
|
+
|
|
471
|
+
other_it->next = other_it->current;
|
|
472
|
+
prev = current;
|
|
473
|
+
}
|
|
474
|
+
else { //this before other
|
|
475
|
+
prev->next = other_it->current;
|
|
476
|
+
current->next = other_it->next;
|
|
477
|
+
current->prev = other_it->current;
|
|
478
|
+
other_it->current->next = current;
|
|
479
|
+
other_it->current->prev = prev;
|
|
480
|
+
other_it->next->prev = current;
|
|
481
|
+
|
|
482
|
+
next = current;
|
|
483
|
+
other_it->prev = other_it->current;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
else { //no overlap
|
|
488
|
+
prev->next = other_it->current;
|
|
489
|
+
current->next = other_it->next;
|
|
490
|
+
current->prev = other_it->prev;
|
|
491
|
+
next->prev = other_it->current;
|
|
492
|
+
other_it->prev->next = current;
|
|
493
|
+
other_it->current->next = next;
|
|
494
|
+
other_it->current->prev = prev;
|
|
495
|
+
other_it->next->prev = current;
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
/* update end of list pointer when necessary (remember that the 2 iterators
|
|
499
|
+
may iterate over different lists!) */
|
|
500
|
+
|
|
501
|
+
if (list->last == current)
|
|
502
|
+
list->last = other_it->current;
|
|
503
|
+
if (other_it->list->last == other_it->current)
|
|
504
|
+
other_it->list->last = current;
|
|
505
|
+
|
|
506
|
+
if (current == cycle_pt)
|
|
507
|
+
cycle_pt = other_it->cycle_pt;
|
|
508
|
+
if (other_it->current == other_it->cycle_pt)
|
|
509
|
+
other_it->cycle_pt = cycle_pt;
|
|
510
|
+
|
|
511
|
+
/* The actual exchange - in all cases*/
|
|
512
|
+
|
|
513
|
+
old_current = current;
|
|
514
|
+
current = other_it->current;
|
|
515
|
+
other_it->current = old_current;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
/***********************************************************************
|
|
520
|
+
* ELIST2_ITERATOR::extract_sublist()
|
|
521
|
+
*
|
|
522
|
+
* This is a private member, used only by ELIST2::assign_to_sublist.
|
|
523
|
+
* Given another iterator for the same list, extract the links from THIS to
|
|
524
|
+
* OTHER inclusive, link them into a new circular list, and return a
|
|
525
|
+
* pointer to the last element.
|
|
526
|
+
* (Can't inline this function because it contains a loop)
|
|
527
|
+
**********************************************************************/
|
|
528
|
+
|
|
529
|
+
ELIST2_LINK *ELIST2_ITERATOR::extract_sublist( //from this current
|
|
530
|
+
ELIST2_ITERATOR *other_it) { //to other current
|
|
531
|
+
#ifndef NDEBUG
|
|
532
|
+
const ERRCODE BAD_EXTRACTION_PTS =
|
|
533
|
+
"Can't extract sublist from points on different lists";
|
|
534
|
+
const ERRCODE DONT_EXTRACT_DELETED =
|
|
535
|
+
"Can't extract a sublist marked by deleted points";
|
|
536
|
+
#endif
|
|
537
|
+
const ERRCODE BAD_SUBLIST = "Can't find sublist end point in original list";
|
|
538
|
+
|
|
539
|
+
ELIST2_ITERATOR temp_it = *this;
|
|
540
|
+
ELIST2_LINK *end_of_new_list;
|
|
541
|
+
|
|
542
|
+
#ifndef NDEBUG
|
|
543
|
+
if (!this)
|
|
544
|
+
NULL_OBJECT.error ("ELIST2_ITERATOR::extract_sublist", ABORT, NULL);
|
|
545
|
+
if (!other_it)
|
|
546
|
+
BAD_PARAMETER.error ("ELIST2_ITERATOR::extract_sublist", ABORT,
|
|
547
|
+
"other_it NULL");
|
|
548
|
+
if (!list)
|
|
549
|
+
NO_LIST.error ("ELIST2_ITERATOR::extract_sublist", ABORT, NULL);
|
|
550
|
+
if (list != other_it->list)
|
|
551
|
+
BAD_EXTRACTION_PTS.error ("ELIST2_ITERATOR.extract_sublist", ABORT, NULL);
|
|
552
|
+
if (list->empty ())
|
|
553
|
+
EMPTY_LIST.error ("ELIST2_ITERATOR::extract_sublist", ABORT, NULL);
|
|
554
|
+
|
|
555
|
+
if (!current || !other_it->current)
|
|
556
|
+
DONT_EXTRACT_DELETED.error ("ELIST2_ITERATOR.extract_sublist", ABORT,
|
|
557
|
+
NULL);
|
|
558
|
+
#endif
|
|
559
|
+
|
|
560
|
+
ex_current_was_last = other_it->ex_current_was_last = FALSE;
|
|
561
|
+
ex_current_was_cycle_pt = FALSE;
|
|
562
|
+
other_it->ex_current_was_cycle_pt = FALSE;
|
|
563
|
+
|
|
564
|
+
temp_it.mark_cycle_pt ();
|
|
565
|
+
do { //walk sublist
|
|
566
|
+
if (temp_it.cycled_list ()) //cant find end pt
|
|
567
|
+
BAD_SUBLIST.error ("ELIST2_ITERATOR.extract_sublist", ABORT, NULL);
|
|
568
|
+
|
|
569
|
+
if (temp_it.at_last ()) {
|
|
570
|
+
list->last = prev;
|
|
571
|
+
ex_current_was_last = other_it->ex_current_was_last = TRUE;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
if (temp_it.current == cycle_pt)
|
|
575
|
+
ex_current_was_cycle_pt = TRUE;
|
|
576
|
+
|
|
577
|
+
if (temp_it.current == other_it->cycle_pt)
|
|
578
|
+
other_it->ex_current_was_cycle_pt = TRUE;
|
|
579
|
+
|
|
580
|
+
temp_it.forward ();
|
|
581
|
+
}
|
|
582
|
+
//do INCLUSIVE list
|
|
583
|
+
while (temp_it.prev != other_it->current);
|
|
584
|
+
|
|
585
|
+
//circularise sublist
|
|
586
|
+
other_it->current->next = current;
|
|
587
|
+
//circularise sublist
|
|
588
|
+
current->prev = other_it->current;
|
|
589
|
+
end_of_new_list = other_it->current;
|
|
590
|
+
|
|
591
|
+
//sublist = whole list
|
|
592
|
+
if (prev == other_it->current) {
|
|
593
|
+
list->last = NULL;
|
|
594
|
+
prev = current = next = NULL;
|
|
595
|
+
other_it->prev = other_it->current = other_it->next = NULL;
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
prev->next = other_it->next;
|
|
599
|
+
other_it->next->prev = prev;
|
|
600
|
+
|
|
601
|
+
current = other_it->current = NULL;
|
|
602
|
+
next = other_it->next;
|
|
603
|
+
other_it->prev = prev;
|
|
604
|
+
}
|
|
605
|
+
return end_of_new_list;
|
|
606
|
+
}
|