zxing_cpp 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.gitmodules +3 -0
- data/CHANGELOG.rdoc +6 -0
- data/Gemfile +3 -0
- data/Manifest.txt +331 -0
- data/README.rdoc +138 -0
- data/Rakefile +28 -0
- data/bin/zxd +87 -0
- data/bin/zxe +53 -0
- data/ext/zxing/extconf.rb +27 -0
- data/ext/zxing/zxing-cpp/.gitignore +4 -0
- data/ext/zxing/zxing-cpp/AUTHORS +115 -0
- data/ext/zxing/zxing-cpp/CMakeLists.txt +84 -0
- data/ext/zxing/zxing-cpp/COPYING +201 -0
- data/ext/zxing/zxing-cpp/NOTICE +65 -0
- data/ext/zxing/zxing-cpp/README.md +50 -0
- data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.cpp +112 -0
- data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.h +40 -0
- data/ext/zxing/zxing-cpp/cli/src/jpgd.cpp +3174 -0
- data/ext/zxing/zxing-cpp/cli/src/jpgd.h +319 -0
- data/ext/zxing/zxing-cpp/cli/src/lodepng.cpp +6261 -0
- data/ext/zxing/zxing-cpp/cli/src/lodepng.h +1695 -0
- data/ext/zxing/zxing-cpp/cli/src/main.cpp +297 -0
- data/ext/zxing/zxing-cpp/cmake/FindCPPUNIT.cmake +54 -0
- data/ext/zxing/zxing-cpp/cmake/FindIconv.cmake +57 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/.gitignore +6 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.cc +405 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.hh +215 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.cc +70 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.hh +25 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerLibrary.hh +8 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.cc +50 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.hh +72 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.cc +697 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.hh +418 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.cc +125 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.hh +122 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/ChangeLog +146 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/Makefile +73 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/NumberlikeArray.hh +177 -0
- data/ext/zxing/zxing-cpp/core/src/bigint/README +71 -0
- data/ext/zxing/zxing-cpp/core/src/win32/zxing/iconv.h +14 -0
- data/ext/zxing/zxing-cpp/core/src/win32/zxing/stdint.h +247 -0
- data/ext/zxing/zxing-cpp/core/src/win32/zxing/win_iconv.c +2035 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.cpp +40 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.h +60 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.cpp +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.cpp +70 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.h +56 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.cpp +28 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.h +34 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.cpp +142 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.h +85 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Exception.cpp +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Exception.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.cpp +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.h +37 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/IllegalStateException.h +35 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.cpp +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.cpp +86 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.h +59 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.cpp +124 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/NotFoundException.h +35 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Reader.cpp +31 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Reader.h +40 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ReaderException.h +37 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Result.cpp +61 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/Result.h +55 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultIO.cpp +34 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.cpp +108 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.h +55 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.cpp +26 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.h +39 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/ZXing.h +133 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.cpp +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.cpp +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.cpp +489 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.h +69 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.cpp +548 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.h +92 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Array.h +170 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.cpp +155 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.h +81 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArrayIO.cpp +31 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.cpp +143 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.h +91 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.cpp +76 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.h +74 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.cpp +104 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.h +53 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Counted.h +140 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.cpp +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.cpp +39 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.h +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.cpp +212 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.cpp +80 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.h +53 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.cpp +81 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.h +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.cpp +122 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.h +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.cpp +226 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.h +67 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.cpp +27 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.h +36 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.cpp +107 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Point.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.cpp +61 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.cpp +198 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.h +52 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/JavaMath.h +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MathUtils.h +57 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.cpp +174 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.h +62 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.cpp +330 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.h +59 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.cpp +150 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.h +73 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.cpp +218 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.h +56 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.cpp +174 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.cpp +30 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.h +33 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.cpp +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.h +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.cpp +199 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.h +87 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.cpp +361 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.h +59 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.cpp +113 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp +416 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.h +104 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.cpp +93 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.cpp +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.h +43 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.cpp +446 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.h +94 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.cpp +23 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.h +23 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.cpp +75 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.h +42 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.cpp +137 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.h +51 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.cpp +29 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.h +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.cpp +58 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.h +36 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.cpp +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.h +37 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp +236 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.cpp +340 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.h +57 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.cpp +496 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.cpp +328 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.h +63 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.cpp +293 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.h +58 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.cpp +85 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.cpp +65 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.cpp +337 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.h +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.cpp +96 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.h +38 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp +110 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.h +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.cpp +227 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.h +81 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.cpp +28 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.h +35 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.cpp +71 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.cpp +309 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.h +88 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.cpp +146 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.h +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.cpp +170 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.h +49 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.cpp +997 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.h +84 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.cpp +563 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.h +84 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.cpp +118 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.h +62 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.cpp +214 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.h +71 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.cpp +120 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.h +72 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.cpp +284 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.h +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.cpp +664 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.h +106 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.cpp +714 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.h +122 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.cpp +65 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.h +52 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.cpp +117 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.h +54 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.cpp +52 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.cpp +560 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.h +85 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.cpp +183 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.h +56 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.cpp +118 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.cpp +159 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.h +50 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.cpp +425 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.h +72 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.cpp +107 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.h +46 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.cpp +90 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.h +57 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.cpp +47 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.h +45 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.cpp +208 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.h +68 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.cpp +314 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.h +69 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.cpp +69 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.h +48 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.cpp +559 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.h +76 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.cpp +41 -0
- data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.h +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/TestRunner.cpp +30 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.cpp +216 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.h +61 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.cpp +106 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.h +55 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.cpp +49 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.h +42 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.cpp +58 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.h +46 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.cpp +69 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.h +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.cpp +129 -0
- data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.h +62 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.cpp +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.h +45 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.cpp +88 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.h +47 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.cpp +88 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.h +49 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.cpp +132 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.h +91 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.cpp +52 -0
- data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.h +47 -0
- data/ext/zxing/zxing.cc +224 -0
- data/lib/zxing.rb +50 -0
- data/lib/zxing/.gitignore +2 -0
- data/lib/zxing/aztec.rb +5 -0
- data/lib/zxing/aztec/aztec_reader.rb +14 -0
- data/lib/zxing/bad_image_exception.rb +4 -0
- data/lib/zxing/binarizer.rb +8 -0
- data/lib/zxing/binary_bitmap.rb +15 -0
- data/lib/zxing/checksum_exception.rb +4 -0
- data/lib/zxing/common.rb +7 -0
- data/lib/zxing/common/bit_matrix.rb +9 -0
- data/lib/zxing/common/hybrid_binarizer.rb +17 -0
- data/lib/zxing/common/illegal_argument_exception.rb +4 -0
- data/lib/zxing/datamatrix.rb +5 -0
- data/lib/zxing/datamatrix/data_matrix_reader.rb +14 -0
- data/lib/zxing/decodable.rb +11 -0
- data/lib/zxing/exception.rb +4 -0
- data/lib/zxing/ffi.rb +20 -0
- data/lib/zxing/ffi/aztec.rb +6 -0
- data/lib/zxing/ffi/aztec/aztec_reader.rb +9 -0
- data/lib/zxing/ffi/binarizer.rb +25 -0
- data/lib/zxing/ffi/binary_bitmap.rb +15 -0
- data/lib/zxing/ffi/common.rb +8 -0
- data/lib/zxing/ffi/common/bit_matrix.rb +12 -0
- data/lib/zxing/ffi/common/greyscale_luminance_source.rb +30 -0
- data/lib/zxing/ffi/common/hybrid_binarizer.rb +10 -0
- data/lib/zxing/ffi/datamatrix.rb +6 -0
- data/lib/zxing/ffi/datamatrix/data_matrix_reader.rb +9 -0
- data/lib/zxing/ffi/library.rb +102 -0
- data/lib/zxing/ffi/luminance_source.rb +18 -0
- data/lib/zxing/ffi/multi_format_reader.rb +9 -0
- data/lib/zxing/ffi/oned.rb +6 -0
- data/lib/zxing/ffi/oned/code_39_reader.rb +10 -0
- data/lib/zxing/ffi/qrcode.rb +8 -0
- data/lib/zxing/ffi/qrcode/decoder.rb +10 -0
- data/lib/zxing/ffi/qrcode/detector.rb +10 -0
- data/lib/zxing/ffi/reader.rb +58 -0
- data/lib/zxing/ffi/result.rb +23 -0
- data/lib/zxing/format_exception.rb +4 -0
- data/lib/zxing/illegal_argument_exception.rb +4 -0
- data/lib/zxing/image.rb +15 -0
- data/lib/zxing/luminance_source.rb +18 -0
- data/lib/zxing/multi_format_reader.rb +11 -0
- data/lib/zxing/not_found_exception.rb +4 -0
- data/lib/zxing/oned.rb +5 -0
- data/lib/zxing/oned/code_39_reader.rb +15 -0
- data/lib/zxing/qrcode.rb +8 -0
- data/lib/zxing/qrcode/decoder.rb +14 -0
- data/lib/zxing/qrcode/detector.rb +14 -0
- data/lib/zxing/qrcode/encoder.rb +8 -0
- data/lib/zxing/qrcode/encoder/byte_matrix.rb +18 -0
- data/lib/zxing/qrcode/encoder/encoder.rb +9 -0
- data/lib/zxing/qrcode/encoder/qrcode.rb +18 -0
- data/lib/zxing/reader.rb +8 -0
- data/lib/zxing/reader_exception.rb +4 -0
- data/lib/zxing/reed_solomon_exception.rb +2 -0
- data/lib/zxing/result.rb +18 -0
- data/lib/zxing/rmagick.rb +5 -0
- data/lib/zxing/rmagick/image.rb +104 -0
- data/lib/zxing/version.rb +33 -0
- data/test/qrcode.png +0 -0
- data/test/test_helper.rb +5 -0
- data/test/test_zxing.rb +58 -0
- data/test/vendor.rb +360 -0
- data/test/zxing/test_decodable.rb +38 -0
- data/zxing_cpp.gemspec +48 -0
- metadata +473 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#ifndef __WHITERECTANGLEDETECTOR_H__
|
|
2
|
+
#define __WHITERECTANGLEDETECTOR_H__
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
* WhiteRectangleDetector.h
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* Created by Luiz Silva on 09/02/2010.
|
|
9
|
+
* Copyright 2010 authors All rights reserved.
|
|
10
|
+
*
|
|
11
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
+
* you may not use this file except in compliance with the License.
|
|
13
|
+
* You may obtain a copy of the License at
|
|
14
|
+
*
|
|
15
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
*
|
|
17
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
* See the License for the specific language governing permissions and
|
|
21
|
+
* limitations under the License.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
#include <vector>
|
|
25
|
+
#include <zxing/ReaderException.h>
|
|
26
|
+
#include <zxing/ResultPoint.h>
|
|
27
|
+
#include <zxing/common/BitMatrix.h>
|
|
28
|
+
#include <zxing/common/Counted.h>
|
|
29
|
+
#include <zxing/ResultPoint.h>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
namespace zxing {
|
|
33
|
+
|
|
34
|
+
class WhiteRectangleDetector : public Counted {
|
|
35
|
+
private:
|
|
36
|
+
static int INIT_SIZE;
|
|
37
|
+
static int CORR;
|
|
38
|
+
Ref<BitMatrix> image_;
|
|
39
|
+
int width_;
|
|
40
|
+
int height_;
|
|
41
|
+
int leftInit_;
|
|
42
|
+
int rightInit_;
|
|
43
|
+
int downInit_;
|
|
44
|
+
int upInit_;
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
WhiteRectangleDetector(Ref<BitMatrix> image);
|
|
48
|
+
WhiteRectangleDetector(Ref<BitMatrix> image, int initSize, int x, int y);
|
|
49
|
+
std::vector<Ref<ResultPoint> > detect();
|
|
50
|
+
|
|
51
|
+
private:
|
|
52
|
+
Ref<ResultPoint> getBlackPointOnSegment(int aX, int aY, int bX, int bY);
|
|
53
|
+
std::vector<Ref<ResultPoint> > centerEdges(Ref<ResultPoint> y, Ref<ResultPoint> z,
|
|
54
|
+
Ref<ResultPoint> x, Ref<ResultPoint> t);
|
|
55
|
+
bool containsBlackPoint(int a, int b, int fixed, bool horizontal);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#endif
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* GenericGF.cpp
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 13/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <iostream>
|
|
23
|
+
#include <zxing/common/reedsolomon/GenericGF.h>
|
|
24
|
+
#include <zxing/common/reedsolomon/GenericGFPoly.h>
|
|
25
|
+
#include <zxing/common/IllegalArgumentException.h>
|
|
26
|
+
|
|
27
|
+
using zxing::GenericGF;
|
|
28
|
+
using zxing::GenericGFPoly;
|
|
29
|
+
using zxing::Ref;
|
|
30
|
+
|
|
31
|
+
Ref<GenericGF> GenericGF::AZTEC_DATA_12(new GenericGF(0x1069, 4096, 1));
|
|
32
|
+
Ref<GenericGF> GenericGF::AZTEC_DATA_10(new GenericGF(0x409, 1024, 1));
|
|
33
|
+
Ref<GenericGF> GenericGF::AZTEC_DATA_6(new GenericGF(0x43, 64, 1));
|
|
34
|
+
Ref<GenericGF> GenericGF::AZTEC_PARAM(new GenericGF(0x13, 16, 1));
|
|
35
|
+
Ref<GenericGF> GenericGF::QR_CODE_FIELD_256(new GenericGF(0x011D, 256, 0));
|
|
36
|
+
Ref<GenericGF> GenericGF::DATA_MATRIX_FIELD_256(new GenericGF(0x012D, 256, 1));
|
|
37
|
+
Ref<GenericGF> GenericGF::AZTEC_DATA_8 = DATA_MATRIX_FIELD_256;
|
|
38
|
+
Ref<GenericGF> GenericGF::MAXICODE_FIELD_64 = AZTEC_DATA_6;
|
|
39
|
+
|
|
40
|
+
namespace {
|
|
41
|
+
int INITIALIZATION_THRESHOLD = 0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
GenericGF::GenericGF(int primitive_, int size_, int b)
|
|
45
|
+
: size(size_), primitive(primitive_), generatorBase(b), initialized(false) {
|
|
46
|
+
if (size <= INITIALIZATION_THRESHOLD) {
|
|
47
|
+
initialize();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
void GenericGF::initialize() {
|
|
52
|
+
expTable.resize(size);
|
|
53
|
+
logTable.resize(size);
|
|
54
|
+
|
|
55
|
+
int x = 1;
|
|
56
|
+
|
|
57
|
+
for (int i = 0; i < size; i++) {
|
|
58
|
+
expTable[i] = x;
|
|
59
|
+
x <<= 1; // x = x * 2; we're assuming the generator alpha is 2
|
|
60
|
+
if (x >= size) {
|
|
61
|
+
x ^= primitive;
|
|
62
|
+
x &= size-1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (int i = 0; i < size-1; i++) {
|
|
66
|
+
logTable[expTable[i]] = i;
|
|
67
|
+
}
|
|
68
|
+
//logTable[0] == 0 but this should never be used
|
|
69
|
+
zero =
|
|
70
|
+
Ref<GenericGFPoly>(new GenericGFPoly(Ref<GenericGF>(this), ArrayRef<int>(new Array<int>(1))));
|
|
71
|
+
zero->getCoefficients()[0] = 0;
|
|
72
|
+
one =
|
|
73
|
+
Ref<GenericGFPoly>(new GenericGFPoly(Ref<GenericGF>(this), ArrayRef<int>(new Array<int>(1))));
|
|
74
|
+
one->getCoefficients()[0] = 1;
|
|
75
|
+
initialized = true;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
void GenericGF::checkInit() {
|
|
79
|
+
if (!initialized) {
|
|
80
|
+
initialize();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
Ref<GenericGFPoly> GenericGF::getZero() {
|
|
85
|
+
checkInit();
|
|
86
|
+
return zero;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
Ref<GenericGFPoly> GenericGF::getOne() {
|
|
90
|
+
checkInit();
|
|
91
|
+
return one;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
Ref<GenericGFPoly> GenericGF::buildMonomial(int degree, int coefficient) {
|
|
95
|
+
checkInit();
|
|
96
|
+
|
|
97
|
+
if (degree < 0) {
|
|
98
|
+
throw IllegalArgumentException("Degree must be non-negative");
|
|
99
|
+
}
|
|
100
|
+
if (coefficient == 0) {
|
|
101
|
+
return zero;
|
|
102
|
+
}
|
|
103
|
+
ArrayRef<int> coefficients(new Array<int>(degree + 1));
|
|
104
|
+
coefficients[0] = coefficient;
|
|
105
|
+
|
|
106
|
+
return Ref<GenericGFPoly>(new GenericGFPoly(Ref<GenericGF>(this), coefficients));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
int GenericGF::addOrSubtract(int a, int b) {
|
|
110
|
+
return a ^ b;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
int GenericGF::exp(int a) {
|
|
114
|
+
checkInit();
|
|
115
|
+
return expTable[a];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
int GenericGF::log(int a) {
|
|
119
|
+
checkInit();
|
|
120
|
+
if (a == 0) {
|
|
121
|
+
throw IllegalArgumentException("cannot give log(0)");
|
|
122
|
+
}
|
|
123
|
+
return logTable[a];
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
int GenericGF::inverse(int a) {
|
|
127
|
+
checkInit();
|
|
128
|
+
if (a == 0) {
|
|
129
|
+
throw IllegalArgumentException("Cannot calculate the inverse of 0");
|
|
130
|
+
}
|
|
131
|
+
return expTable[size - logTable[a] - 1];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
int GenericGF::multiply(int a, int b) {
|
|
135
|
+
checkInit();
|
|
136
|
+
|
|
137
|
+
if (a == 0 || b == 0) {
|
|
138
|
+
return 0;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return expTable[(logTable[a] + logTable[b]) % (size - 1)];
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
int GenericGF::getSize() {
|
|
145
|
+
return size;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
int GenericGF::getGeneratorBase() {
|
|
149
|
+
return generatorBase;
|
|
150
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* GenericGF.h
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 13/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#ifndef GENERICGF_H
|
|
23
|
+
#define GENERICGF_H
|
|
24
|
+
|
|
25
|
+
#include <vector>
|
|
26
|
+
#include <zxing/common/Counted.h>
|
|
27
|
+
|
|
28
|
+
namespace zxing {
|
|
29
|
+
class GenericGFPoly;
|
|
30
|
+
|
|
31
|
+
class GenericGF : public Counted {
|
|
32
|
+
|
|
33
|
+
private:
|
|
34
|
+
std::vector<int> expTable;
|
|
35
|
+
std::vector<int> logTable;
|
|
36
|
+
Ref<GenericGFPoly> zero;
|
|
37
|
+
Ref<GenericGFPoly> one;
|
|
38
|
+
int size;
|
|
39
|
+
int primitive;
|
|
40
|
+
int generatorBase;
|
|
41
|
+
bool initialized;
|
|
42
|
+
|
|
43
|
+
void initialize();
|
|
44
|
+
void checkInit();
|
|
45
|
+
|
|
46
|
+
public:
|
|
47
|
+
static Ref<GenericGF> AZTEC_DATA_12;
|
|
48
|
+
static Ref<GenericGF> AZTEC_DATA_10;
|
|
49
|
+
static Ref<GenericGF> AZTEC_DATA_8;
|
|
50
|
+
static Ref<GenericGF> AZTEC_DATA_6;
|
|
51
|
+
static Ref<GenericGF> AZTEC_PARAM;
|
|
52
|
+
static Ref<GenericGF> QR_CODE_FIELD_256;
|
|
53
|
+
static Ref<GenericGF> DATA_MATRIX_FIELD_256;
|
|
54
|
+
static Ref<GenericGF> MAXICODE_FIELD_64;
|
|
55
|
+
|
|
56
|
+
GenericGF(int primitive, int size, int b);
|
|
57
|
+
|
|
58
|
+
Ref<GenericGFPoly> getZero();
|
|
59
|
+
Ref<GenericGFPoly> getOne();
|
|
60
|
+
int getSize();
|
|
61
|
+
int getGeneratorBase();
|
|
62
|
+
Ref<GenericGFPoly> buildMonomial(int degree, int coefficient);
|
|
63
|
+
|
|
64
|
+
static int addOrSubtract(int a, int b);
|
|
65
|
+
int exp(int a);
|
|
66
|
+
int log(int a);
|
|
67
|
+
int inverse(int a);
|
|
68
|
+
int multiply(int a, int b);
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#endif //GENERICGF_H
|
|
73
|
+
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* GenericGFPoly.cpp
|
|
4
|
+
* zxing
|
|
5
|
+
*
|
|
6
|
+
* Created by Lukas Stabe on 13/02/2012.
|
|
7
|
+
* Copyright 2012 ZXing authors All rights reserved.
|
|
8
|
+
*
|
|
9
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
|
+
* you may not use this file except in compliance with the License.
|
|
11
|
+
* You may obtain a copy of the License at
|
|
12
|
+
*
|
|
13
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
14
|
+
*
|
|
15
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
16
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
17
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
18
|
+
* See the License for the specific language governing permissions and
|
|
19
|
+
* limitations under the License.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <iostream>
|
|
23
|
+
#include <zxing/common/reedsolomon/GenericGFPoly.h>
|
|
24
|
+
#include <zxing/common/reedsolomon/GenericGF.h>
|
|
25
|
+
#include <zxing/common/IllegalArgumentException.h>
|
|
26
|
+
|
|
27
|
+
using zxing::GenericGFPoly;
|
|
28
|
+
using zxing::ArrayRef;
|
|
29
|
+
using zxing::Ref;
|
|
30
|
+
|
|
31
|
+
// VC++
|
|
32
|
+
using zxing::GenericGF;
|
|
33
|
+
|
|
34
|
+
GenericGFPoly::GenericGFPoly(Ref<GenericGF> field,
|
|
35
|
+
ArrayRef<int> coefficients)
|
|
36
|
+
: field_(field) {
|
|
37
|
+
if (coefficients->size() == 0) {
|
|
38
|
+
throw IllegalArgumentException("need coefficients");
|
|
39
|
+
}
|
|
40
|
+
int coefficientsLength = coefficients->size();
|
|
41
|
+
if (coefficientsLength > 1 && coefficients[0] == 0) {
|
|
42
|
+
// Leading term must be non-zero for anything except the constant polynomial "0"
|
|
43
|
+
int firstNonZero = 1;
|
|
44
|
+
while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0) {
|
|
45
|
+
firstNonZero++;
|
|
46
|
+
}
|
|
47
|
+
if (firstNonZero == coefficientsLength) {
|
|
48
|
+
coefficients_ = field->getZero()->getCoefficients();
|
|
49
|
+
} else {
|
|
50
|
+
coefficients_ = ArrayRef<int>(new Array<int>(coefficientsLength-firstNonZero));
|
|
51
|
+
for (int i = 0; i < (int)coefficients_->size(); i++) {
|
|
52
|
+
coefficients_[i] = coefficients[i + firstNonZero];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
coefficients_ = coefficients;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
ArrayRef<int> GenericGFPoly::getCoefficients() {
|
|
61
|
+
return coefficients_;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
int GenericGFPoly::getDegree() {
|
|
65
|
+
return coefficients_->size() - 1;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
bool GenericGFPoly::isZero() {
|
|
69
|
+
return coefficients_[0] == 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
int GenericGFPoly::getCoefficient(int degree) {
|
|
73
|
+
return coefficients_[coefficients_->size() - 1 - degree];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
int GenericGFPoly::evaluateAt(int a) {
|
|
77
|
+
if (a == 0) {
|
|
78
|
+
// Just return the x^0 coefficient
|
|
79
|
+
return getCoefficient(0);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
int size = coefficients_->size();
|
|
83
|
+
if (a == 1) {
|
|
84
|
+
// Just the sum of the coefficients
|
|
85
|
+
int result = 0;
|
|
86
|
+
for (int i = 0; i < size; i++) {
|
|
87
|
+
result = GenericGF::addOrSubtract(result, coefficients_[i]);
|
|
88
|
+
}
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
int result = coefficients_[0];
|
|
92
|
+
for (int i = 1; i < size; i++) {
|
|
93
|
+
result = GenericGF::addOrSubtract(field_->multiply(a, result), coefficients_[i]);
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
Ref<GenericGFPoly> GenericGFPoly::addOrSubtract(Ref<zxing::GenericGFPoly> other) {
|
|
99
|
+
if (!(field_.object_ == other->field_.object_)) {
|
|
100
|
+
throw IllegalArgumentException("GenericGFPolys do not have same GenericGF field");
|
|
101
|
+
}
|
|
102
|
+
if (isZero()) {
|
|
103
|
+
return other;
|
|
104
|
+
}
|
|
105
|
+
if (other->isZero()) {
|
|
106
|
+
return Ref<GenericGFPoly>(this);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
ArrayRef<int> smallerCoefficients = coefficients_;
|
|
110
|
+
ArrayRef<int> largerCoefficients = other->getCoefficients();
|
|
111
|
+
if (smallerCoefficients->size() > largerCoefficients->size()) {
|
|
112
|
+
ArrayRef<int> temp = smallerCoefficients;
|
|
113
|
+
smallerCoefficients = largerCoefficients;
|
|
114
|
+
largerCoefficients = temp;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
ArrayRef<int> sumDiff(new Array<int>(largerCoefficients->size()));
|
|
118
|
+
int lengthDiff = largerCoefficients->size() - smallerCoefficients->size();
|
|
119
|
+
// Copy high-order terms only found in higher-degree polynomial's coefficients
|
|
120
|
+
for (int i = 0; i < lengthDiff; i++) {
|
|
121
|
+
sumDiff[i] = largerCoefficients[i];
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
for (int i = lengthDiff; i < (int)largerCoefficients->size(); i++) {
|
|
125
|
+
sumDiff[i] = GenericGF::addOrSubtract(smallerCoefficients[i-lengthDiff],
|
|
126
|
+
largerCoefficients[i]);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return Ref<GenericGFPoly>(new GenericGFPoly(field_, sumDiff));
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
Ref<GenericGFPoly> GenericGFPoly::multiply(Ref<zxing::GenericGFPoly> other) {
|
|
133
|
+
if (!(field_.object_ == other->field_.object_)) {
|
|
134
|
+
throw IllegalArgumentException("GenericGFPolys do not have same GenericGF field");
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (isZero() || other->isZero()) {
|
|
138
|
+
return field_->getZero();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
ArrayRef<int> aCoefficients = coefficients_;
|
|
142
|
+
int aLength = aCoefficients->size();
|
|
143
|
+
|
|
144
|
+
ArrayRef<int> bCoefficients = other->getCoefficients();
|
|
145
|
+
int bLength = bCoefficients->size();
|
|
146
|
+
|
|
147
|
+
ArrayRef<int> product(new Array<int>(aLength + bLength - 1));
|
|
148
|
+
for (int i = 0; i < aLength; i++) {
|
|
149
|
+
int aCoeff = aCoefficients[i];
|
|
150
|
+
for (int j = 0; j < bLength; j++) {
|
|
151
|
+
product[i+j] = GenericGF::addOrSubtract(product[i+j],
|
|
152
|
+
field_->multiply(aCoeff, bCoefficients[j]));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return Ref<GenericGFPoly>(new GenericGFPoly(field_, product));
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
Ref<GenericGFPoly> GenericGFPoly::multiply(int scalar) {
|
|
160
|
+
if (scalar == 0) {
|
|
161
|
+
return field_->getZero();
|
|
162
|
+
}
|
|
163
|
+
if (scalar == 1) {
|
|
164
|
+
return Ref<GenericGFPoly>(this);
|
|
165
|
+
}
|
|
166
|
+
int size = coefficients_->size();
|
|
167
|
+
ArrayRef<int> product(new Array<int>(size));
|
|
168
|
+
for (int i = 0; i < size; i++) {
|
|
169
|
+
product[i] = field_->multiply(coefficients_[i], scalar);
|
|
170
|
+
}
|
|
171
|
+
return Ref<GenericGFPoly>(new GenericGFPoly(field_, product));
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
Ref<GenericGFPoly> GenericGFPoly::multiplyByMonomial(int degree, int coefficient) {
|
|
175
|
+
if (degree < 0) {
|
|
176
|
+
throw IllegalArgumentException("degree must not be less then 0");
|
|
177
|
+
}
|
|
178
|
+
if (coefficient == 0) {
|
|
179
|
+
return field_->getZero();
|
|
180
|
+
}
|
|
181
|
+
int size = coefficients_->size();
|
|
182
|
+
ArrayRef<int> product(new Array<int>(size+degree));
|
|
183
|
+
for (int i = 0; i < size; i++) {
|
|
184
|
+
product[i] = field_->multiply(coefficients_[i], coefficient);
|
|
185
|
+
}
|
|
186
|
+
return Ref<GenericGFPoly>(new GenericGFPoly(field_, product));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
std::vector<Ref<GenericGFPoly> > GenericGFPoly::divide(Ref<GenericGFPoly> other) {
|
|
190
|
+
if (!(field_.object_ == other->field_.object_)) {
|
|
191
|
+
throw IllegalArgumentException("GenericGFPolys do not have same GenericGF field");
|
|
192
|
+
}
|
|
193
|
+
if (other->isZero()) {
|
|
194
|
+
throw IllegalArgumentException("divide by 0");
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
Ref<GenericGFPoly> quotient = field_->getZero();
|
|
198
|
+
Ref<GenericGFPoly> remainder = Ref<GenericGFPoly>(this);
|
|
199
|
+
|
|
200
|
+
int denominatorLeadingTerm = other->getCoefficient(other->getDegree());
|
|
201
|
+
int inverseDenominatorLeadingTerm = field_->inverse(denominatorLeadingTerm);
|
|
202
|
+
|
|
203
|
+
while (remainder->getDegree() >= other->getDegree() && !remainder->isZero()) {
|
|
204
|
+
int degreeDifference = remainder->getDegree() - other->getDegree();
|
|
205
|
+
int scale = field_->multiply(remainder->getCoefficient(remainder->getDegree()),
|
|
206
|
+
inverseDenominatorLeadingTerm);
|
|
207
|
+
Ref<GenericGFPoly> term = other->multiplyByMonomial(degreeDifference, scale);
|
|
208
|
+
Ref<GenericGFPoly> iterationQuotiont = field_->buildMonomial(degreeDifference,
|
|
209
|
+
scale);
|
|
210
|
+
quotient = quotient->addOrSubtract(iterationQuotiont);
|
|
211
|
+
remainder = remainder->addOrSubtract(term);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
std::vector<Ref<GenericGFPoly> > returnValue;
|
|
215
|
+
returnValue[0] = quotient;
|
|
216
|
+
returnValue[1] = remainder;
|
|
217
|
+
return returnValue;
|
|
218
|
+
}
|