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,215 @@
|
|
|
1
|
+
#ifndef BIGINTEGER_H
|
|
2
|
+
#define BIGINTEGER_H
|
|
3
|
+
|
|
4
|
+
#include "BigUnsigned.hh"
|
|
5
|
+
|
|
6
|
+
/* A BigInteger object represents a signed integer of size limited only by
|
|
7
|
+
* available memory. BigUnsigneds support most mathematical operators and can
|
|
8
|
+
* be converted to and from most primitive integer types.
|
|
9
|
+
*
|
|
10
|
+
* A BigInteger is just an aggregate of a BigUnsigned and a sign. (It is no
|
|
11
|
+
* longer derived from BigUnsigned because that led to harmful implicit
|
|
12
|
+
* conversions.) */
|
|
13
|
+
class BigInteger {
|
|
14
|
+
|
|
15
|
+
public:
|
|
16
|
+
typedef BigUnsigned::Blk Blk;
|
|
17
|
+
typedef BigUnsigned::Index Index;
|
|
18
|
+
typedef BigUnsigned::CmpRes CmpRes;
|
|
19
|
+
static const CmpRes
|
|
20
|
+
less = BigUnsigned::less ,
|
|
21
|
+
equal = BigUnsigned::equal ,
|
|
22
|
+
greater = BigUnsigned::greater;
|
|
23
|
+
// Enumeration for the sign of a BigInteger.
|
|
24
|
+
enum Sign { negative = -1, zero = 0, positive = 1 };
|
|
25
|
+
|
|
26
|
+
protected:
|
|
27
|
+
Sign sign;
|
|
28
|
+
BigUnsigned mag;
|
|
29
|
+
|
|
30
|
+
public:
|
|
31
|
+
// Constructs zero.
|
|
32
|
+
BigInteger() : sign(zero), mag() {}
|
|
33
|
+
|
|
34
|
+
// Copy constructor
|
|
35
|
+
BigInteger(const BigInteger &x) : sign(x.sign), mag(x.mag) {};
|
|
36
|
+
|
|
37
|
+
// Assignment operator
|
|
38
|
+
void operator=(const BigInteger &x);
|
|
39
|
+
|
|
40
|
+
// Constructor that copies from a given array of blocks with a sign.
|
|
41
|
+
BigInteger(const Blk *b, Index blen, Sign s);
|
|
42
|
+
|
|
43
|
+
// Nonnegative constructor that copies from a given array of blocks.
|
|
44
|
+
BigInteger(const Blk *b, Index blen) : mag(b, blen) {
|
|
45
|
+
sign = mag.isZero() ? zero : positive;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Constructor from a BigUnsigned and a sign
|
|
49
|
+
BigInteger(const BigUnsigned &x, Sign s);
|
|
50
|
+
|
|
51
|
+
// Nonnegative constructor from a BigUnsigned
|
|
52
|
+
BigInteger(const BigUnsigned &x) : mag(x) {
|
|
53
|
+
sign = mag.isZero() ? zero : positive;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Constructors from primitive integer types
|
|
57
|
+
BigInteger(unsigned long x);
|
|
58
|
+
BigInteger( long x);
|
|
59
|
+
BigInteger(unsigned int x);
|
|
60
|
+
BigInteger( int x);
|
|
61
|
+
BigInteger(unsigned short x);
|
|
62
|
+
BigInteger( short x);
|
|
63
|
+
|
|
64
|
+
/* Converters to primitive integer types
|
|
65
|
+
* The implicit conversion operators caused trouble, so these are now
|
|
66
|
+
* named. */
|
|
67
|
+
unsigned long toUnsignedLong () const;
|
|
68
|
+
long toLong () const;
|
|
69
|
+
unsigned int toUnsignedInt () const;
|
|
70
|
+
int toInt () const;
|
|
71
|
+
unsigned short toUnsignedShort() const;
|
|
72
|
+
short toShort () const;
|
|
73
|
+
protected:
|
|
74
|
+
// Helper
|
|
75
|
+
template <class X> X convertToUnsignedPrimitive() const;
|
|
76
|
+
template <class X, class UX> X convertToSignedPrimitive() const;
|
|
77
|
+
public:
|
|
78
|
+
|
|
79
|
+
// ACCESSORS
|
|
80
|
+
Sign getSign() const { return sign; }
|
|
81
|
+
/* The client can't do any harm by holding a read-only reference to the
|
|
82
|
+
* magnitude. */
|
|
83
|
+
const BigUnsigned &getMagnitude() const { return mag; }
|
|
84
|
+
|
|
85
|
+
// Some accessors that go through to the magnitude
|
|
86
|
+
Index getLength() const { return mag.getLength(); }
|
|
87
|
+
Index getCapacity() const { return mag.getCapacity(); }
|
|
88
|
+
Blk getBlock(Index i) const { return mag.getBlock(i); }
|
|
89
|
+
bool isZero() const { return sign == zero; } // A bit special
|
|
90
|
+
|
|
91
|
+
// COMPARISONS
|
|
92
|
+
|
|
93
|
+
// Compares this to x like Perl's <=>
|
|
94
|
+
CmpRes compareTo(const BigInteger &x) const;
|
|
95
|
+
|
|
96
|
+
// Ordinary comparison operators
|
|
97
|
+
bool operator ==(const BigInteger &x) const {
|
|
98
|
+
return sign == x.sign && mag == x.mag;
|
|
99
|
+
}
|
|
100
|
+
bool operator !=(const BigInteger &x) const { return !operator ==(x); };
|
|
101
|
+
bool operator < (const BigInteger &x) const { return compareTo(x) == less ; }
|
|
102
|
+
bool operator <=(const BigInteger &x) const { return compareTo(x) != greater; }
|
|
103
|
+
bool operator >=(const BigInteger &x) const { return compareTo(x) != less ; }
|
|
104
|
+
bool operator > (const BigInteger &x) const { return compareTo(x) == greater; }
|
|
105
|
+
|
|
106
|
+
// OPERATORS -- See the discussion in BigUnsigned.hh.
|
|
107
|
+
void add (const BigInteger &a, const BigInteger &b);
|
|
108
|
+
void subtract(const BigInteger &a, const BigInteger &b);
|
|
109
|
+
void multiply(const BigInteger &a, const BigInteger &b);
|
|
110
|
+
/* See the comment on BigUnsigned::divideWithRemainder. Semantics
|
|
111
|
+
* differ from those of primitive integers when negatives and/or zeros
|
|
112
|
+
* are involved. */
|
|
113
|
+
void divideWithRemainder(const BigInteger &b, BigInteger &q);
|
|
114
|
+
void negate(const BigInteger &a);
|
|
115
|
+
|
|
116
|
+
/* Bitwise operators are not provided for BigIntegers. Use
|
|
117
|
+
* getMagnitude to get the magnitude and operate on that instead. */
|
|
118
|
+
|
|
119
|
+
BigInteger operator +(const BigInteger &x) const;
|
|
120
|
+
BigInteger operator -(const BigInteger &x) const;
|
|
121
|
+
BigInteger operator *(const BigInteger &x) const;
|
|
122
|
+
BigInteger operator /(const BigInteger &x) const;
|
|
123
|
+
BigInteger operator %(const BigInteger &x) const;
|
|
124
|
+
BigInteger operator -() const;
|
|
125
|
+
|
|
126
|
+
void operator +=(const BigInteger &x);
|
|
127
|
+
void operator -=(const BigInteger &x);
|
|
128
|
+
void operator *=(const BigInteger &x);
|
|
129
|
+
void operator /=(const BigInteger &x);
|
|
130
|
+
void operator %=(const BigInteger &x);
|
|
131
|
+
void flipSign();
|
|
132
|
+
|
|
133
|
+
// INCREMENT/DECREMENT OPERATORS
|
|
134
|
+
void operator ++( );
|
|
135
|
+
void operator ++(int);
|
|
136
|
+
void operator --( );
|
|
137
|
+
void operator --(int);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
// NORMAL OPERATORS
|
|
141
|
+
/* These create an object to hold the result and invoke
|
|
142
|
+
* the appropriate put-here operation on it, passing
|
|
143
|
+
* this and x. The new object is then returned. */
|
|
144
|
+
inline BigInteger BigInteger::operator +(const BigInteger &x) const {
|
|
145
|
+
BigInteger ans;
|
|
146
|
+
ans.add(*this, x);
|
|
147
|
+
return ans;
|
|
148
|
+
}
|
|
149
|
+
inline BigInteger BigInteger::operator -(const BigInteger &x) const {
|
|
150
|
+
BigInteger ans;
|
|
151
|
+
ans.subtract(*this, x);
|
|
152
|
+
return ans;
|
|
153
|
+
}
|
|
154
|
+
inline BigInteger BigInteger::operator *(const BigInteger &x) const {
|
|
155
|
+
BigInteger ans;
|
|
156
|
+
ans.multiply(*this, x);
|
|
157
|
+
return ans;
|
|
158
|
+
}
|
|
159
|
+
inline BigInteger BigInteger::operator /(const BigInteger &x) const {
|
|
160
|
+
if (x.isZero()) throw "BigInteger::operator /: division by zero";
|
|
161
|
+
BigInteger q, r;
|
|
162
|
+
r = *this;
|
|
163
|
+
r.divideWithRemainder(x, q);
|
|
164
|
+
return q;
|
|
165
|
+
}
|
|
166
|
+
inline BigInteger BigInteger::operator %(const BigInteger &x) const {
|
|
167
|
+
if (x.isZero()) throw "BigInteger::operator %: division by zero";
|
|
168
|
+
BigInteger q, r;
|
|
169
|
+
r = *this;
|
|
170
|
+
r.divideWithRemainder(x, q);
|
|
171
|
+
return r;
|
|
172
|
+
}
|
|
173
|
+
inline BigInteger BigInteger::operator -() const {
|
|
174
|
+
BigInteger ans;
|
|
175
|
+
ans.negate(*this);
|
|
176
|
+
return ans;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/*
|
|
180
|
+
* ASSIGNMENT OPERATORS
|
|
181
|
+
*
|
|
182
|
+
* Now the responsibility for making a temporary copy if necessary
|
|
183
|
+
* belongs to the put-here operations. See Assignment Operators in
|
|
184
|
+
* BigUnsigned.hh.
|
|
185
|
+
*/
|
|
186
|
+
inline void BigInteger::operator +=(const BigInteger &x) {
|
|
187
|
+
add(*this, x);
|
|
188
|
+
}
|
|
189
|
+
inline void BigInteger::operator -=(const BigInteger &x) {
|
|
190
|
+
subtract(*this, x);
|
|
191
|
+
}
|
|
192
|
+
inline void BigInteger::operator *=(const BigInteger &x) {
|
|
193
|
+
multiply(*this, x);
|
|
194
|
+
}
|
|
195
|
+
inline void BigInteger::operator /=(const BigInteger &x) {
|
|
196
|
+
if (x.isZero()) throw "BigInteger::operator /=: division by zero";
|
|
197
|
+
/* The following technique is slightly faster than copying *this first
|
|
198
|
+
* when x is large. */
|
|
199
|
+
BigInteger q;
|
|
200
|
+
divideWithRemainder(x, q);
|
|
201
|
+
// *this contains the remainder, but we overwrite it with the quotient.
|
|
202
|
+
*this = q;
|
|
203
|
+
}
|
|
204
|
+
inline void BigInteger::operator %=(const BigInteger &x) {
|
|
205
|
+
if (x.isZero()) throw "BigInteger::operator %=: division by zero";
|
|
206
|
+
BigInteger q;
|
|
207
|
+
// Mods *this by x. Don't care about quotient left in q.
|
|
208
|
+
divideWithRemainder(x, q);
|
|
209
|
+
}
|
|
210
|
+
// This one is trivial
|
|
211
|
+
inline void BigInteger::flipSign() {
|
|
212
|
+
sign = Sign(-sign);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
#endif
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#include "BigIntegerAlgorithms.hh"
|
|
2
|
+
|
|
3
|
+
BigUnsigned gcd(BigUnsigned a, BigUnsigned b) {
|
|
4
|
+
BigUnsigned trash;
|
|
5
|
+
// Neat in-place alternating technique.
|
|
6
|
+
for (;;) {
|
|
7
|
+
if (b.isZero())
|
|
8
|
+
return a;
|
|
9
|
+
a.divideWithRemainder(b, trash);
|
|
10
|
+
if (a.isZero())
|
|
11
|
+
return b;
|
|
12
|
+
b.divideWithRemainder(a, trash);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
void extendedEuclidean(BigInteger m, BigInteger n,
|
|
17
|
+
BigInteger &g, BigInteger &r, BigInteger &s) {
|
|
18
|
+
if (&g == &r || &g == &s || &r == &s)
|
|
19
|
+
throw "BigInteger extendedEuclidean: Outputs are aliased";
|
|
20
|
+
BigInteger r1(1), s1(0), r2(0), s2(1), q;
|
|
21
|
+
/* Invariants:
|
|
22
|
+
* r1*m(orig) + s1*n(orig) == m(current)
|
|
23
|
+
* r2*m(orig) + s2*n(orig) == n(current) */
|
|
24
|
+
for (;;) {
|
|
25
|
+
if (n.isZero()) {
|
|
26
|
+
r = r1; s = s1; g = m;
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Subtract q times the second invariant from the first invariant.
|
|
30
|
+
m.divideWithRemainder(n, q);
|
|
31
|
+
r1 -= q*r2; s1 -= q*s2;
|
|
32
|
+
|
|
33
|
+
if (m.isZero()) {
|
|
34
|
+
r = r2; s = s2; g = n;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Subtract q times the first invariant from the second invariant.
|
|
38
|
+
n.divideWithRemainder(m, q);
|
|
39
|
+
r2 -= q*r1; s2 -= q*s1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
BigUnsigned modinv(const BigInteger &x, const BigUnsigned &n) {
|
|
44
|
+
BigInteger g, r, s;
|
|
45
|
+
extendedEuclidean(x, n, g, r, s);
|
|
46
|
+
if (g == 1)
|
|
47
|
+
// r*x + s*n == 1, so r*x === 1 (mod n), so r is the answer.
|
|
48
|
+
return (r % n).getMagnitude(); // (r % n) will be nonnegative
|
|
49
|
+
else
|
|
50
|
+
throw "BigInteger modinv: x and n have a common factor";
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
BigUnsigned modexp(const BigInteger &base, const BigUnsigned &exponent,
|
|
54
|
+
const BigUnsigned &modulus) {
|
|
55
|
+
BigUnsigned ans = 1, base2 = (base % modulus).getMagnitude();
|
|
56
|
+
BigUnsigned::Index i = exponent.bitLength();
|
|
57
|
+
// For each bit of the exponent, most to least significant...
|
|
58
|
+
while (i > 0) {
|
|
59
|
+
i--;
|
|
60
|
+
// Square.
|
|
61
|
+
ans *= ans;
|
|
62
|
+
ans %= modulus;
|
|
63
|
+
// And multiply if the bit is a 1.
|
|
64
|
+
if (exponent.getBit(i)) {
|
|
65
|
+
ans *= base2;
|
|
66
|
+
ans %= modulus;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return ans;
|
|
70
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#ifndef BIGINTEGERALGORITHMS_H
|
|
2
|
+
#define BIGINTEGERALGORITHMS_H
|
|
3
|
+
|
|
4
|
+
#include "BigInteger.hh"
|
|
5
|
+
|
|
6
|
+
/* Some mathematical algorithms for big integers.
|
|
7
|
+
* This code is new and, as such, experimental. */
|
|
8
|
+
|
|
9
|
+
// Returns the greatest common divisor of a and b.
|
|
10
|
+
BigUnsigned gcd(BigUnsigned a, BigUnsigned b);
|
|
11
|
+
|
|
12
|
+
/* Extended Euclidean algorithm.
|
|
13
|
+
* Given m and n, finds gcd g and numbers r, s such that r*m + s*n == g. */
|
|
14
|
+
void extendedEuclidean(BigInteger m, BigInteger n,
|
|
15
|
+
BigInteger &g, BigInteger &r, BigInteger &s);
|
|
16
|
+
|
|
17
|
+
/* Returns the multiplicative inverse of x modulo n, or throws an exception if
|
|
18
|
+
* they have a common factor. */
|
|
19
|
+
BigUnsigned modinv(const BigInteger &x, const BigUnsigned &n);
|
|
20
|
+
|
|
21
|
+
// Returns (base ^ exponent) % modulus.
|
|
22
|
+
BigUnsigned modexp(const BigInteger &base, const BigUnsigned &exponent,
|
|
23
|
+
const BigUnsigned &modulus);
|
|
24
|
+
|
|
25
|
+
#endif
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#include "BigIntegerUtils.hh"
|
|
2
|
+
#include "BigUnsignedInABase.hh"
|
|
3
|
+
|
|
4
|
+
std::string bigUnsignedToString(const BigUnsigned &x) {
|
|
5
|
+
return std::string(BigUnsignedInABase(x, 10));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
std::string bigIntegerToString(const BigInteger &x) {
|
|
9
|
+
return (x.getSign() == BigInteger::negative)
|
|
10
|
+
? (std::string("-") + bigUnsignedToString(x.getMagnitude()))
|
|
11
|
+
: (bigUnsignedToString(x.getMagnitude()));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
BigUnsigned stringToBigUnsigned(const std::string &s) {
|
|
15
|
+
return BigUnsigned(BigUnsignedInABase(s, 10));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
BigInteger stringToBigInteger(const std::string &s) {
|
|
19
|
+
// Recognize a sign followed by a BigUnsigned.
|
|
20
|
+
return (s[0] == '-') ? BigInteger(stringToBigUnsigned(s.substr(1, s.length() - 1)), BigInteger::negative)
|
|
21
|
+
: (s[0] == '+') ? BigInteger(stringToBigUnsigned(s.substr(1, s.length() - 1)))
|
|
22
|
+
: BigInteger(stringToBigUnsigned(s));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
std::ostream &operator <<(std::ostream &os, const BigUnsigned &x) {
|
|
26
|
+
BigUnsignedInABase::Base base;
|
|
27
|
+
long osFlags = os.flags();
|
|
28
|
+
if (osFlags & os.dec)
|
|
29
|
+
base = 10;
|
|
30
|
+
else if (osFlags & os.hex) {
|
|
31
|
+
base = 16;
|
|
32
|
+
if (osFlags & os.showbase)
|
|
33
|
+
os << "0x";
|
|
34
|
+
} else if (osFlags & os.oct) {
|
|
35
|
+
base = 8;
|
|
36
|
+
if (osFlags & os.showbase)
|
|
37
|
+
os << '0';
|
|
38
|
+
} else
|
|
39
|
+
throw "std::ostream << BigUnsigned: Could not determine the desired base from output-stream flags";
|
|
40
|
+
std::string s = std::string(BigUnsignedInABase(x, base));
|
|
41
|
+
os << s;
|
|
42
|
+
return os;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
std::ostream &operator <<(std::ostream &os, const BigInteger &x) {
|
|
46
|
+
if (x.getSign() == BigInteger::negative)
|
|
47
|
+
os << '-';
|
|
48
|
+
os << x.getMagnitude();
|
|
49
|
+
return os;
|
|
50
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#ifndef BIGINTEGERUTILS_H
|
|
2
|
+
#define BIGINTEGERUTILS_H
|
|
3
|
+
|
|
4
|
+
#include "BigInteger.hh"
|
|
5
|
+
#include <string>
|
|
6
|
+
#include <iostream>
|
|
7
|
+
|
|
8
|
+
/* This file provides:
|
|
9
|
+
* - Convenient std::string <-> BigUnsigned/BigInteger conversion routines
|
|
10
|
+
* - std::ostream << operators for BigUnsigned/BigInteger */
|
|
11
|
+
|
|
12
|
+
// std::string conversion routines. Base 10 only.
|
|
13
|
+
std::string bigUnsignedToString(const BigUnsigned &x);
|
|
14
|
+
std::string bigIntegerToString(const BigInteger &x);
|
|
15
|
+
BigUnsigned stringToBigUnsigned(const std::string &s);
|
|
16
|
+
BigInteger stringToBigInteger(const std::string &s);
|
|
17
|
+
|
|
18
|
+
// Creates a BigInteger from data such as `char's; read below for details.
|
|
19
|
+
template <class T>
|
|
20
|
+
BigInteger dataToBigInteger(const T* data, BigInteger::Index length, BigInteger::Sign sign);
|
|
21
|
+
|
|
22
|
+
// Outputs x to os, obeying the flags `dec', `hex', `bin', and `showbase'.
|
|
23
|
+
std::ostream &operator <<(std::ostream &os, const BigUnsigned &x);
|
|
24
|
+
|
|
25
|
+
// Outputs x to os, obeying the flags `dec', `hex', `bin', and `showbase'.
|
|
26
|
+
// My somewhat arbitrary policy: a negative sign comes before a base indicator (like -0xFF).
|
|
27
|
+
std::ostream &operator <<(std::ostream &os, const BigInteger &x);
|
|
28
|
+
|
|
29
|
+
// BEGIN TEMPLATE DEFINITIONS.
|
|
30
|
+
|
|
31
|
+
/*
|
|
32
|
+
* Converts binary data to a BigInteger.
|
|
33
|
+
* Pass an array `data', its length, and the desired sign.
|
|
34
|
+
*
|
|
35
|
+
* Elements of `data' may be of any type `T' that has the following
|
|
36
|
+
* two properties (this includes almost all integral types):
|
|
37
|
+
*
|
|
38
|
+
* (1) `sizeof(T)' correctly gives the amount of binary data in one
|
|
39
|
+
* value of `T' and is a factor of `sizeof(Blk)'.
|
|
40
|
+
*
|
|
41
|
+
* (2) When a value of `T' is casted to a `Blk', the low bytes of
|
|
42
|
+
* the result contain the desired binary data.
|
|
43
|
+
*/
|
|
44
|
+
template <class T>
|
|
45
|
+
BigInteger dataToBigInteger(const T* data, BigInteger::Index length, BigInteger::Sign sign) {
|
|
46
|
+
// really ceiling(numBytes / sizeof(BigInteger::Blk))
|
|
47
|
+
unsigned int pieceSizeInBits = 8 * sizeof(T);
|
|
48
|
+
unsigned int piecesPerBlock = sizeof(BigInteger::Blk) / sizeof(T);
|
|
49
|
+
unsigned int numBlocks = (length + piecesPerBlock - 1) / piecesPerBlock;
|
|
50
|
+
|
|
51
|
+
// Allocate our block array
|
|
52
|
+
BigInteger::Blk *blocks = new BigInteger::Blk[numBlocks];
|
|
53
|
+
|
|
54
|
+
BigInteger::Index blockNum, pieceNum, pieceNumHere;
|
|
55
|
+
|
|
56
|
+
// Convert
|
|
57
|
+
for (blockNum = 0, pieceNum = 0; blockNum < numBlocks; blockNum++) {
|
|
58
|
+
BigInteger::Blk curBlock = 0;
|
|
59
|
+
for (pieceNumHere = 0; pieceNumHere < piecesPerBlock && pieceNum < length;
|
|
60
|
+
pieceNumHere++, pieceNum++)
|
|
61
|
+
curBlock |= (BigInteger::Blk(data[pieceNum]) << (pieceSizeInBits * pieceNumHere));
|
|
62
|
+
blocks[blockNum] = curBlock;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Create the BigInteger.
|
|
66
|
+
BigInteger x(blocks, numBlocks, sign);
|
|
67
|
+
|
|
68
|
+
delete [] blocks;
|
|
69
|
+
return x;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
#endif
|