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,71 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
|
|
3
|
+
#ifndef __ERROR_CORRECTION_PDF_H__
|
|
4
|
+
#define __ERROR_CORRECTION_PDF_H__
|
|
5
|
+
/*
|
|
6
|
+
* Copyright 2012 ZXing authors
|
|
7
|
+
*
|
|
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
|
+
*
|
|
12
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
*
|
|
14
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
* See the License for the specific language governing permissions and
|
|
18
|
+
* limitations under the License.
|
|
19
|
+
*
|
|
20
|
+
* 2012-09-17 HFN translation from Java into C++
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
#include <zxing/common/Counted.h>
|
|
24
|
+
#include <zxing/common/Array.h>
|
|
25
|
+
#include <zxing/common/DecoderResult.h>
|
|
26
|
+
#include <zxing/common/BitMatrix.h>
|
|
27
|
+
#include <zxing/pdf417/decoder/ec/ModulusGF.h>
|
|
28
|
+
#include <zxing/pdf417/decoder/ec/ModulusPoly.h>
|
|
29
|
+
#include <zxing/common/reedsolomon/ReedSolomonException.h>
|
|
30
|
+
|
|
31
|
+
namespace zxing {
|
|
32
|
+
namespace pdf417 {
|
|
33
|
+
namespace decoder {
|
|
34
|
+
namespace ec {
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* <p>PDF417 error correction implementation.</p>
|
|
39
|
+
*
|
|
40
|
+
* <p>This <a href="http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction#Example">example</a>
|
|
41
|
+
* is quite useful in understanding the algorithm.</p>
|
|
42
|
+
*
|
|
43
|
+
* @author Sean Owen
|
|
44
|
+
* @see com.google.zxing.common.reedsolomon.ReedSolomonDecoder
|
|
45
|
+
*/
|
|
46
|
+
class ErrorCorrection: public Counted {
|
|
47
|
+
|
|
48
|
+
private:
|
|
49
|
+
ModulusGF &field_;
|
|
50
|
+
|
|
51
|
+
public:
|
|
52
|
+
ErrorCorrection();
|
|
53
|
+
void decode(ArrayRef<int> received,
|
|
54
|
+
int numECCodewords,
|
|
55
|
+
ArrayRef<int> erasures);
|
|
56
|
+
|
|
57
|
+
private:
|
|
58
|
+
std::vector<Ref<ModulusPoly> > runEuclideanAlgorithm(Ref<ModulusPoly> a, Ref<ModulusPoly> b, int R);
|
|
59
|
+
|
|
60
|
+
ArrayRef<int> findErrorLocations(Ref<ModulusPoly> errorLocator);
|
|
61
|
+
ArrayRef<int> findErrorMagnitudes(Ref<ModulusPoly> errorEvaluator,
|
|
62
|
+
Ref<ModulusPoly> errorLocator,
|
|
63
|
+
ArrayRef<int> errorLocations);
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
#endif /* __ERROR_CORRECTION_PDF_H__ */
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2012 ZXing authors
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*
|
|
17
|
+
* 2012-09-19 HFN translation from Java into C++
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#include <zxing/pdf417/decoder/ec/ModulusGF.h>
|
|
21
|
+
#include <zxing/pdf417/decoder/ec/ModulusPoly.h>
|
|
22
|
+
|
|
23
|
+
using zxing::Ref;
|
|
24
|
+
using zxing::pdf417::decoder::ec::ModulusGF;
|
|
25
|
+
using zxing::pdf417::decoder::ec::ModulusPoly;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The central Modulus Galois Field for PDF417 with prime number 929
|
|
29
|
+
* and generator 3.
|
|
30
|
+
*/
|
|
31
|
+
ModulusGF ModulusGF::PDF417_GF(929,3);
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* <p>A field based on powers of a generator integer, modulo some modulus.</p>
|
|
36
|
+
*
|
|
37
|
+
* @author Sean Owen
|
|
38
|
+
* @see com.google.zxing.common.reedsolomon.GenericGF
|
|
39
|
+
*/
|
|
40
|
+
|
|
41
|
+
ModulusGF::ModulusGF(int modulus, int generator)
|
|
42
|
+
: modulus_(modulus) {
|
|
43
|
+
expTable_ = new Array<int>(modulus_);
|
|
44
|
+
logTable_ = new Array<int>(modulus_);
|
|
45
|
+
int x = 1,i;
|
|
46
|
+
for (i = 0; i < modulus_; i++) {
|
|
47
|
+
expTable_[i] = x;
|
|
48
|
+
x = (x * generator) % modulus_;
|
|
49
|
+
}
|
|
50
|
+
for (i = 0; i < modulus_-1; i++) {
|
|
51
|
+
logTable_[expTable_[i]] = i;
|
|
52
|
+
}
|
|
53
|
+
// logTable[0] == 0 but this should never be used
|
|
54
|
+
ArrayRef<int>aZero(new Array<int>(1)),aOne(new Array<int>(1));
|
|
55
|
+
aZero[0]=0;aOne[0]=1;
|
|
56
|
+
zero_ = new ModulusPoly(*this, aZero);
|
|
57
|
+
one_ = new ModulusPoly(*this, aOne);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
Ref<ModulusPoly> ModulusGF::getZero() {
|
|
61
|
+
return zero_;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
Ref<ModulusPoly> ModulusGF::getOne() {
|
|
65
|
+
return one_;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
Ref<ModulusPoly> ModulusGF::buildMonomial(int degree, int coefficient)
|
|
69
|
+
{
|
|
70
|
+
if (degree < 0) {
|
|
71
|
+
throw IllegalArgumentException("monomial: degree < 0!");
|
|
72
|
+
}
|
|
73
|
+
if (coefficient == 0) {
|
|
74
|
+
return zero_;
|
|
75
|
+
}
|
|
76
|
+
int nCoefficients = degree + 1;
|
|
77
|
+
ArrayRef<int> coefficients (new Array<int>(nCoefficients));
|
|
78
|
+
coefficients[0] = coefficient;
|
|
79
|
+
Ref<ModulusPoly> result(new ModulusPoly(*this,coefficients));
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
int ModulusGF::add(int a, int b) {
|
|
86
|
+
return (a + b) % modulus_;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
int ModulusGF::subtract(int a, int b) {
|
|
90
|
+
return (modulus_ + a - b) % modulus_;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
int ModulusGF::exp(int a) {
|
|
94
|
+
return expTable_[a];
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
int ModulusGF::log(int a) {
|
|
98
|
+
if (a == 0) {
|
|
99
|
+
throw IllegalArgumentException("log of zero!");
|
|
100
|
+
}
|
|
101
|
+
return logTable_[a];
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
int ModulusGF::inverse(int a) {
|
|
105
|
+
if (a == 0) {
|
|
106
|
+
throw IllegalArgumentException("inverse of zero!");;
|
|
107
|
+
}
|
|
108
|
+
return expTable_[modulus_ - logTable_[a] - 1];
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
int ModulusGF::multiply(int a, int b) {
|
|
112
|
+
if (a == 0 || b == 0) {
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
return expTable_[(logTable_[a] + logTable_[b]) % (modulus_ - 1)];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
int ModulusGF::getSize() {
|
|
119
|
+
return modulus_;
|
|
120
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#ifndef __MODULUS_GF_PDF_H__
|
|
2
|
+
#define __MODULUS_GF_PDF_H__
|
|
3
|
+
/*
|
|
4
|
+
* Copyright 2012 ZXing authors
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
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
|
+
* 2012-09-17 HFN translation from Java into C++
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
#include <zxing/common/Counted.h>
|
|
22
|
+
#include <zxing/common/Array.h>
|
|
23
|
+
#include <zxing/common/DecoderResult.h>
|
|
24
|
+
#include <zxing/common/BitMatrix.h>
|
|
25
|
+
|
|
26
|
+
namespace zxing {
|
|
27
|
+
namespace pdf417 {
|
|
28
|
+
namespace decoder {
|
|
29
|
+
namespace ec {
|
|
30
|
+
|
|
31
|
+
class ModulusPoly;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* <p>A field based on powers of a generator integer, modulo some modulus.</p>
|
|
35
|
+
*
|
|
36
|
+
* @author Sean Owen
|
|
37
|
+
* @see com.google.zxing.common.reedsolomon.GenericGF
|
|
38
|
+
*/
|
|
39
|
+
class ModulusGF {
|
|
40
|
+
|
|
41
|
+
public:
|
|
42
|
+
static ModulusGF PDF417_GF;
|
|
43
|
+
|
|
44
|
+
private:
|
|
45
|
+
ArrayRef<int> expTable_;
|
|
46
|
+
ArrayRef<int> logTable_;
|
|
47
|
+
Ref<ModulusPoly> zero_;
|
|
48
|
+
Ref<ModulusPoly> one_;
|
|
49
|
+
int modulus_;
|
|
50
|
+
|
|
51
|
+
public:
|
|
52
|
+
ModulusGF(int modulus, int generator);
|
|
53
|
+
Ref<ModulusPoly> getZero();
|
|
54
|
+
Ref<ModulusPoly> getOne();
|
|
55
|
+
Ref<ModulusPoly> buildMonomial(int degree, int coefficient);
|
|
56
|
+
|
|
57
|
+
int add(int a, int b);
|
|
58
|
+
int subtract(int a, int b);
|
|
59
|
+
int exp(int a);
|
|
60
|
+
int log(int a);
|
|
61
|
+
int inverse(int a);
|
|
62
|
+
int multiply(int a, int b);
|
|
63
|
+
int getSize();
|
|
64
|
+
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#endif /* __MODULUS_GF_PDF_H__ */
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
// -*- mode:c++; tab-width:2; indent-tabs-mode:nil; c-basic-offset:2 -*-
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2012 ZXing authors
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*
|
|
17
|
+
* 2012-09-19 HFN translation from Java into C++
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#include <zxing/pdf417/decoder/ec/ModulusPoly.h>
|
|
21
|
+
#include <zxing/pdf417/decoder/ec/ModulusGF.h>
|
|
22
|
+
|
|
23
|
+
using zxing::Ref;
|
|
24
|
+
using zxing::ArrayRef;
|
|
25
|
+
using zxing::pdf417::decoder::ec::ModulusGF;
|
|
26
|
+
using zxing::pdf417::decoder::ec::ModulusPoly;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @author Sean Owen
|
|
30
|
+
* @see com.google.zxing.common.reedsolomon.GenericGFPoly
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
ModulusPoly::ModulusPoly(ModulusGF& field, ArrayRef<int> coefficients)
|
|
34
|
+
: field_(field)
|
|
35
|
+
{
|
|
36
|
+
if (coefficients->size() == 0) {
|
|
37
|
+
throw IllegalArgumentException("no coefficients!");
|
|
38
|
+
}
|
|
39
|
+
int coefficientsLength = coefficients->size();
|
|
40
|
+
if (coefficientsLength > 1 && coefficients[0] == 0) {
|
|
41
|
+
// Leading term must be non-zero for anything except the constant polynomial "0"
|
|
42
|
+
int firstNonZero = 1;
|
|
43
|
+
while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0) {
|
|
44
|
+
firstNonZero++;
|
|
45
|
+
}
|
|
46
|
+
if (firstNonZero == coefficientsLength) {
|
|
47
|
+
coefficientsLength = field_.getZero()->getCoefficients()->size();
|
|
48
|
+
coefficients_.reset(new Array<int> (coefficientsLength));
|
|
49
|
+
*coefficients_ = *(field_.getZero()->getCoefficients());
|
|
50
|
+
} else {
|
|
51
|
+
ArrayRef<int> c(coefficients);
|
|
52
|
+
coefficientsLength -= firstNonZero;
|
|
53
|
+
coefficients_.reset(new Array<int> (coefficientsLength));
|
|
54
|
+
for (int i = 0; i < coefficientsLength; i++) {
|
|
55
|
+
coefficients_[i] = c[i + firstNonZero];
|
|
56
|
+
}
|
|
57
|
+
/*
|
|
58
|
+
coefficientsLength -= firstNonZero;
|
|
59
|
+
coefficients_.reset(new Array<int>(coefficientsLength - firstNonZero));
|
|
60
|
+
for (int i = 0; i < coefficientsLength; i++) {
|
|
61
|
+
coefficients_[i] = coefficients[i + firstNonZero];
|
|
62
|
+
}
|
|
63
|
+
*/
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
coefficients_ = coefficients;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
ArrayRef<int> ModulusPoly::getCoefficients() {
|
|
71
|
+
return coefficients_;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @return degree of this polynomial
|
|
76
|
+
*/
|
|
77
|
+
int ModulusPoly::getDegree() {
|
|
78
|
+
return coefficients_->size() - 1;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @return true iff this polynomial is the monomial "0"
|
|
83
|
+
*/
|
|
84
|
+
bool ModulusPoly::isZero() {
|
|
85
|
+
return coefficients_[0] == 0;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @return coefficient of x^degree term in this polynomial
|
|
90
|
+
*/
|
|
91
|
+
int ModulusPoly::getCoefficient(int degree) {
|
|
92
|
+
return coefficients_[coefficients_->size() - 1 - degree];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @return evaluation of this polynomial at a given point
|
|
97
|
+
*/
|
|
98
|
+
int ModulusPoly::evaluateAt(int a) {
|
|
99
|
+
int i;
|
|
100
|
+
if (a == 0) {
|
|
101
|
+
// Just return the x^0 coefficient
|
|
102
|
+
return getCoefficient(0);
|
|
103
|
+
}
|
|
104
|
+
int size = coefficients_->size();
|
|
105
|
+
if (a == 1) {
|
|
106
|
+
// Just the sum of the coefficients
|
|
107
|
+
int result = 0;
|
|
108
|
+
for (i = 0; i < size; i++) {
|
|
109
|
+
result = field_.add(result, coefficients_[i]);
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
int result = coefficients_[0];
|
|
114
|
+
for (i = 1; i < size; i++) {
|
|
115
|
+
result = field_.add(field_.multiply(a, result), coefficients_[i]);
|
|
116
|
+
}
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
Ref<ModulusPoly> ModulusPoly::add(Ref<ModulusPoly> other) {
|
|
121
|
+
if (&field_ != &other->field_) {
|
|
122
|
+
throw IllegalArgumentException("ModulusPolys do not have same ModulusGF field");
|
|
123
|
+
}
|
|
124
|
+
if (isZero()) {
|
|
125
|
+
return other;
|
|
126
|
+
}
|
|
127
|
+
if (other->isZero()) {
|
|
128
|
+
return Ref<ModulusPoly>(this);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
ArrayRef<int> smallerCoefficients = coefficients_;
|
|
132
|
+
ArrayRef<int> largerCoefficients = other->coefficients_;
|
|
133
|
+
if (smallerCoefficients->size() > largerCoefficients->size()) {
|
|
134
|
+
ArrayRef<int> temp(smallerCoefficients);
|
|
135
|
+
smallerCoefficients = largerCoefficients;
|
|
136
|
+
largerCoefficients = temp;
|
|
137
|
+
}
|
|
138
|
+
ArrayRef<int> sumDiff (new Array<int>(largerCoefficients->size()));
|
|
139
|
+
int lengthDiff = largerCoefficients->size() - smallerCoefficients->size();
|
|
140
|
+
// Copy high-order terms only found in higher-degree polynomial's coefficients
|
|
141
|
+
for (int i = 0; i < lengthDiff; i++) {
|
|
142
|
+
sumDiff[i] = largerCoefficients[i];
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
for (int i = lengthDiff; i < largerCoefficients->size(); i++) {
|
|
146
|
+
sumDiff[i] = field_.add(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return Ref<ModulusPoly>(new ModulusPoly(field_, sumDiff));
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
Ref<ModulusPoly> ModulusPoly::subtract(Ref<ModulusPoly> other) {
|
|
153
|
+
if (&field_ != &other->field_) {
|
|
154
|
+
throw new IllegalArgumentException("ModulusPolys do not have same ModulusGF field");
|
|
155
|
+
}
|
|
156
|
+
if (other->isZero()) {
|
|
157
|
+
return Ref<ModulusPoly>(this);
|
|
158
|
+
}
|
|
159
|
+
return add(other->negative());
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
Ref<ModulusPoly> ModulusPoly::multiply(Ref<ModulusPoly> other) {
|
|
163
|
+
if (&field_ != &other->field_) {
|
|
164
|
+
throw new IllegalArgumentException("ModulusPolys do not have same ModulusGF field");
|
|
165
|
+
}
|
|
166
|
+
if (isZero() || other->isZero()) {
|
|
167
|
+
return field_.getZero();
|
|
168
|
+
}
|
|
169
|
+
int i,j;
|
|
170
|
+
ArrayRef<int> aCoefficients = coefficients_;
|
|
171
|
+
int aLength = aCoefficients->size();
|
|
172
|
+
ArrayRef<int> bCoefficients = other->coefficients_;
|
|
173
|
+
int bLength = bCoefficients->size();
|
|
174
|
+
ArrayRef<int> product (new Array<int>(aLength + bLength - 1));
|
|
175
|
+
for (i = 0; i < aLength; i++) {
|
|
176
|
+
int aCoeff = aCoefficients[i];
|
|
177
|
+
for (j = 0; j < bLength; j++) {
|
|
178
|
+
product[i + j] = field_.add(product[i + j], field_.multiply(aCoeff, bCoefficients[j]));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return Ref<ModulusPoly>(new ModulusPoly(field_, product));
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
Ref<ModulusPoly> ModulusPoly::negative() {
|
|
185
|
+
int size = coefficients_->size();
|
|
186
|
+
ArrayRef<int> negativeCoefficients (new Array<int>(size));
|
|
187
|
+
for (int i = 0; i < size; i++) {
|
|
188
|
+
negativeCoefficients[i] = field_.subtract(0, coefficients_[i]);
|
|
189
|
+
}
|
|
190
|
+
return Ref<ModulusPoly>(new ModulusPoly(field_, negativeCoefficients));
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
Ref<ModulusPoly> ModulusPoly::multiply(int scalar) {
|
|
194
|
+
if (scalar == 0) {
|
|
195
|
+
return field_.getZero();
|
|
196
|
+
}
|
|
197
|
+
if (scalar == 1) {
|
|
198
|
+
return Ref<ModulusPoly>(this);
|
|
199
|
+
}
|
|
200
|
+
int size = coefficients_->size();
|
|
201
|
+
ArrayRef<int> product( new Array<int>(size));
|
|
202
|
+
for (int i = 0; i < size; i++) {
|
|
203
|
+
product[i] = field_.multiply(coefficients_[i], scalar);
|
|
204
|
+
}
|
|
205
|
+
return Ref<ModulusPoly>(new ModulusPoly(field_, product));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
Ref<ModulusPoly> ModulusPoly::multiplyByMonomial(int degree, int coefficient) {
|
|
209
|
+
if (degree < 0) {
|
|
210
|
+
throw new IllegalArgumentException("negative degree!");
|
|
211
|
+
}
|
|
212
|
+
if (coefficient == 0) {
|
|
213
|
+
return field_.getZero();
|
|
214
|
+
}
|
|
215
|
+
int size = coefficients_->size();
|
|
216
|
+
ArrayRef<int> product (new Array<int>(size + degree));
|
|
217
|
+
for (int i = 0; i < size; i++) {
|
|
218
|
+
product[i] = field_.multiply(coefficients_[i], coefficient);
|
|
219
|
+
}
|
|
220
|
+
return Ref<ModulusPoly>(new ModulusPoly(field_, product));
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
std::vector<Ref<ModulusPoly> > ModulusPoly::divide(Ref<ModulusPoly> other) {
|
|
224
|
+
if (&field_ != &other->field_) {
|
|
225
|
+
throw new IllegalArgumentException("ModulusPolys do not have same ModulusGF field");
|
|
226
|
+
}
|
|
227
|
+
if (other->isZero()) {
|
|
228
|
+
throw new IllegalArgumentException("Divide by 0");
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
Ref<ModulusPoly> quotient (field_.getZero());
|
|
232
|
+
Ref<ModulusPoly> remainder (this);
|
|
233
|
+
|
|
234
|
+
int denominatorLeadingTerm = other->getCoefficient(other->getDegree());
|
|
235
|
+
int inverseDenominatorLeadingTerm = field_.inverse(denominatorLeadingTerm);
|
|
236
|
+
|
|
237
|
+
while (remainder->getDegree() >= other->getDegree() && !remainder->isZero()) {
|
|
238
|
+
int degreeDifference = remainder->getDegree() - other->getDegree();
|
|
239
|
+
int scale = field_.multiply(remainder->getCoefficient(remainder->getDegree()), inverseDenominatorLeadingTerm);
|
|
240
|
+
Ref<ModulusPoly> term (other->multiplyByMonomial(degreeDifference, scale));
|
|
241
|
+
Ref<ModulusPoly> iterationQuotient (field_.buildMonomial(degreeDifference, scale));
|
|
242
|
+
quotient = quotient->add(iterationQuotient);
|
|
243
|
+
remainder = remainder->subtract(term);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
std::vector<Ref<ModulusPoly> > result(2);
|
|
247
|
+
result[0] = quotient;
|
|
248
|
+
result[1] = remainder;
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
#if 0
|
|
253
|
+
@Override
|
|
254
|
+
public String toString() {
|
|
255
|
+
StringBuilder result = new StringBuilder(8 * getDegree());
|
|
256
|
+
for (int degree = getDegree(); degree >= 0; degree--) {
|
|
257
|
+
int coefficient = getCoefficient(degree);
|
|
258
|
+
if (coefficient != 0) {
|
|
259
|
+
if (coefficient < 0) {
|
|
260
|
+
result.append(" - ");
|
|
261
|
+
coefficient = -coefficient;
|
|
262
|
+
} else {
|
|
263
|
+
if (result.length() > 0) {
|
|
264
|
+
result.append(" + ");
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
if (degree == 0 || coefficient != 1) {
|
|
268
|
+
result.append(coefficient);
|
|
269
|
+
}
|
|
270
|
+
if (degree != 0) {
|
|
271
|
+
if (degree == 1) {
|
|
272
|
+
result.append('x');
|
|
273
|
+
} else {
|
|
274
|
+
result.append("x^");
|
|
275
|
+
result.append(degree);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return result.toString();
|
|
281
|
+
}
|
|
282
|
+
#endif
|
|
283
|
+
|
|
284
|
+
ModulusPoly::~ModulusPoly() {}
|