rhodes 2.4.1 → 3.0.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +7 -0
- data/Rakefile +7 -36
- data/doc/build.txt +48 -22
- data/doc/device-caps.txt +130 -1
- data/doc/rhom.txt +9 -3
- data/doc/test-log-debug.txt +5 -2
- data/lib/extensions/barcode/ext/barcode/platform/android/Rakefile +40 -20
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/AUTHORS +58 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/CHANGES +266 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/COPYING +201 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ZXing_Info/README +11 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/ext_build.files +173 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/jni/src/barcode.cpp +34 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BarcodeFormat.java +103 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Binarizer.java +80 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/BinaryBitmap.java +128 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ChecksumException.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/DecodeHintType.java +79 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/EncodeHintType.java +39 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/FormatException.java +38 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/LuminanceSource.java +113 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatReader.java +166 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/MultiFormatWriter.java +65 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/NotFoundException.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Reader.java +64 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ReaderException.java +98 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Result.java +143 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultMetadataType.java +109 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPoint.java +127 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/ResultPointCallback.java +29 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/Writer.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/WriterException.java +35 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AbstractDoCoMoResultParser.java +39 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookAUResultParser.java +73 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookDoCoMoResultParser.java +85 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/AddressBookParsedResult.java +122 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BizcardResultParser.java +94 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/BookmarkDoCoMoResultParser.java +46 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/CalendarParsedResult.java +134 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressParsedResult.java +61 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailAddressResultParser.java +64 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/EmailDoCoMoResultParser.java +87 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductParsedResult.java +195 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ExpandedProductResultParser.java +199 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoParsedResult.java +132 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/GeoResultParser.java +77 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNParsedResult.java +39 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ISBNResultParser.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResult.java +73 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ParsedResultType.java +53 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductParsedResult.java +49 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ProductResultParser.java +66 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/ResultParser.java +319 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSMMSResultParser.java +107 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSParsedResult.java +104 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/SMSTOMMSTOResultParser.java +57 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelParsedResult.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TelResultParser.java +44 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/TextParsedResult.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIParsedResult.java +113 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URIResultParser.java +87 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/URLTOResultParser.java +47 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VCardResultParser.java +346 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/VEventResultParser.java +54 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiParsedResult.java +53 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/WifiResultParser.java +50 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/AbstractNDEFResultParser.java +45 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFRecord.java +87 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterParsedResult.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFSmartPosterResultParser.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFTextResultParser.java +57 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/client/result/optional/NDEFURIResultParser.java +95 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitArray.java +247 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitMatrix.java +226 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/BitSource.java +97 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/CharacterSetECI.java +110 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Collections.java +53 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/Comparator.java +27 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DecoderResult.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DefaultGridSampler.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/DetectorResult.java +46 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/ECI.java +52 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GlobalHistogramBinarizer.java +196 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/GridSampler.java +171 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/HybridBinarizer.java +185 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/PerspectiveTransform.java +148 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/StringUtils.java +191 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/MonochromeRectangleDetector.java +209 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/detector/WhiteRectangleDetector.java +316 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256.java +139 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/GF256Poly.java +263 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonDecoder.java +194 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonEncoder.java +75 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/common/reedsolomon/ReedSolomonException.java +31 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/DataMatrixReader.java +161 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/BitMatrixParser.java +446 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DataBlock.java +118 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/DecodedBitStreamParser.java +462 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Decoder.java +134 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/decoder/Version.java +242 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/datamatrix/detector/Detector.java +348 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/ByQuadrantReader.java +96 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/GenericMultipleBarcodeReader.java +156 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/MultipleBarcodeReader.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/QRCodeMultiReader.java +80 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiDetector.java +72 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/multi/qrcode/detector/MultiFinderPatternFinder.java +324 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/CodaBarReader.java +263 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Reader.java +473 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code128Writer.java +73 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Reader.java +333 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code39Writer.java +82 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/Code93Reader.java +273 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Reader.java +135 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN13Writer.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Reader.java +72 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EAN8Writer.java +76 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/EANManufacturerOrgSupport.java +170 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFReader.java +348 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/ITFWriter.java +68 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatOneDReader.java +109 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/MultiFormatUPCEANReader.java +113 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/OneDReader.java +297 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCAReader.java +75 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANExtensionSupport.java +186 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANReader.java +355 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEANWriter.java +104 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/UPCEReader.java +153 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/AbstractRSSReader.java +110 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/DataCharacter.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/FinderPattern.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/Pair.java +41 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSS14Reader.java +494 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/RSSUtils.java +155 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/BitArrayBuilder.java +85 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/ExpandedPair.java +68 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/RSSExpandedReader.java +578 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013103decoder.java +47 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01320xDecoder.java +55 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01392xDecoder.java +66 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01393xDecoder.java +76 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0x1xDecoder.java +106 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI013x0xDecoder.java +56 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01AndOtherAIs.java +56 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01decoder.java +81 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AI01weightDecoder.java +58 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AbstractExpandedDecoder.java +85 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/AnyAIDecoder.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/BlockParsedResult.java +60 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/CurrentParsingState.java +69 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedChar.java +52 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedInformation.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedNumeric.java +79 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/DecodedObject.java +44 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/FieldParser.java +285 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/oned/rss/expanded/decoders/GeneralAppIdDecoder.java +414 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/PDF417Reader.java +79 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/BitMatrixParser.java +1163 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/DecodedBitStreamParser.java +629 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/decoder/Decoder.java +150 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/pdf417/detector/Detector.java +498 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeReader.java +166 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/QRCodeWriter.java +108 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/BitMatrixParser.java +203 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataBlock.java +123 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DataMask.java +155 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/DecodedBitStreamParser.java +261 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Decoder.java +148 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/ErrorCorrectionLevel.java +86 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/FormatInformation.java +171 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Mode.java +112 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/decoder/Version.java +586 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPattern.java +48 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/AlignmentPatternFinder.java +279 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/Detector.java +400 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPattern.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternFinder.java +585 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/detector/FinderPatternInfo.java +49 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/BlockPair.java +37 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/ByteMatrix.java +97 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/Encoder.java +557 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MaskUtil.java +217 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/MatrixUtil.java +524 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/google/zxing/qrcode/encoder/QRCode.java +239 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/Barcode.java +63 -0
- data/lib/extensions/barcode/ext/barcode/platform/android/src/com/rhomobile/barcode/RhoLuminanceSource.java +75 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/Barcode.xcodeproj/project.pbxproj +74 -318
- data/lib/extensions/barcode/ext/barcode/platform/iphone/Classes/barcode.m +70 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/COPYING +27 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarCaptureReader.h +105 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarHelpController.h +60 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImage.h +69 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarImageScanner.h +51 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderController.h +142 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderView.h +118 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarReaderViewController.h +100 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSDK.h +33 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/ZBarSymbol.h +71 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar.h +1476 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Decoder.h +201 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Exception.h +187 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Image.h +321 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/ImageScanner.h +130 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Processor.h +223 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Scanner.h +162 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Symbol.h +529 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Video.h +170 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Headers/ZBarSDK/zbar/Window.h +136 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/LICENSE +504 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README +59 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-back.png +0 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-help.html +88 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-helpicons.png +0 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/Resources/zbar-samples.png +0 -0
- data/lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/libzbar.a +0 -0
- data/lib/extensions/debugger/debugger.rb +215 -67
- data/lib/extensions/nfc/ext/nfc/platform/android/AndroidManifest.xml +1 -1
- data/lib/extensions/nfc/ext/nfc/platform/android/src/com/nfc/Nfc.java +14 -2
- data/lib/extensions/timeout/timeout.rb +114 -0
- data/lib/framework/rho/render.rb +14 -16
- data/lib/framework/rho/rho.rb +38 -14
- data/lib/framework/rho/rhoapplication.rb +1 -1
- data/lib/framework/rho/rhocontroller.rb +3 -3
- data/lib/framework/rho/rhofsconnector.rb +18 -6
- data/lib/framework/rho/rhoviewhelpers.rb +1 -1
- data/lib/framework/rhoappmanifest.rb +44 -0
- data/lib/framework/rhodes.rb +1 -1
- data/lib/framework/rhoframework.rb +31 -11
- data/lib/framework/rholang/localization_simplified.rb +10 -6
- data/lib/framework/rhom/rhom_object_factory.rb +3 -3
- data/lib/framework/version.rb +1 -1
- data/lib/rhodes.rb +1 -1
- data/platform/android/Rhodes/AndroidManifest.xml +2 -2
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesApplication.h +32 -8
- data/platform/android/Rhodes/jni/include/rhodes/jni/com_rhomobile_rhodes_RhodesService.h +21 -21
- data/platform/android/Rhodes/jni/src/rhocryptimpl.cpp +1 -0
- data/platform/android/Rhodes/jni/src/rhodes.cpp +21 -9
- data/platform/android/Rhodes/jni/src/sslimpl.cpp +1 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/BaseActivity.java +7 -6
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/PushReceiver.java +19 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhoCryptImpl.java +2 -2
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesActivity.java +24 -15
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesApplication.java +39 -47
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/RhodesService.java +113 -106
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/Alert.java +11 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/alert/StatusNotification.java +49 -0
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/mainview/SimpleMainView.java +1 -1
- data/platform/android/Rhodes/src/com/rhomobile/rhodes/socket/SSLImpl.java +5 -1
- data/platform/android/build/RhodesSRC_build.files +1 -0
- data/platform/android/build/android.rake +93 -6
- data/platform/bb/RubyVM/src/com/rho/RhodesApp.java +5 -4
- data/platform/bb/RubyVM/src/com/rho/file/RhoFile.java +10 -0
- data/platform/bb/RubyVM/src/com/rho/sync/SyncEngine.java +16 -15
- data/platform/bb/RubyVM/src/com/rho/sync/SyncNotify.java +2 -2
- data/platform/bb/RubyVM/src/com/rho/sync/SyncSource.java +21 -19
- data/platform/bb/rhodes/src/com/rho/BrowserAdapter5.java +2 -2
- data/platform/bb/rhodes/src/com/rho/rubyext/System.java +6 -1
- data/platform/bb/rhodes/src/com/rho/rubyext/WebView.java +10 -3
- data/platform/bb/rhodes/src/rhomobile/RhodesApplication.java +21 -1
- data/platform/iphone/Classes/SimpleMainView.m +5 -5
- data/platform/iphone/Info.plist +1 -1
- data/platform/iphone/rbuild/iphone.rake +30 -1
- data/platform/iphone/rhorunner.xcodeproj/project.pbxproj +12 -0
- data/platform/shared/SyncClient/SyncClient.cpp +136 -20
- data/platform/shared/SyncClient/SyncClient.h +17 -0
- data/platform/shared/common/AppMenu.cpp +6 -1
- data/platform/shared/common/RhoConf.cpp +13 -1
- data/platform/shared/common/RhoConf.h +3 -1
- data/platform/shared/common/RhoDefs.h +10 -0
- data/platform/shared/common/RhoFile.cpp +15 -0
- data/platform/shared/common/RhoFile.h +1 -0
- data/platform/shared/common/RhodesApp.cpp +16 -3
- data/platform/shared/common/RhodesApp.h +1 -0
- data/platform/shared/common/RhodesAppBase.cpp +102 -62
- data/platform/shared/common/RhodesAppBase.h +7 -1
- data/platform/shared/curl/lib/rhossl.c +1 -0
- data/platform/shared/db/DBAdapter.cpp +14 -2
- data/platform/shared/logging/RhoLogConf.cpp +21 -0
- data/platform/shared/logging/RhoLogConf.h +11 -0
- data/platform/shared/logging/RhoLogSink.cpp +24 -0
- data/platform/shared/logging/RhoLogSink.h +20 -1
- data/platform/shared/net/HttpServer.cpp +8 -6
- data/platform/shared/net/RawSocket.cpp +130 -0
- data/platform/shared/net/RawSocket.h +74 -0
- data/platform/shared/ruby/ext/rho/rhoruby.c +37 -1
- data/platform/shared/ruby/ext/rho/rhosupport.c +74 -21
- data/platform/shared/ruby/ext/sqlite3_api/sqlite3_api_wrap.c +9 -1
- data/platform/shared/ruby/vm_eval.c +4 -3
- data/platform/shared/sync/SyncEngine.cpp +11 -12
- data/platform/shared/sync/SyncEngine.h +2 -2
- data/platform/shared/sync/SyncNotify.cpp +41 -13
- data/platform/shared/sync/SyncNotify.h +20 -3
- data/platform/shared/sync/SyncSource.cpp +21 -19
- data/platform/shared/sync/SyncThread.cpp +11 -1
- data/platform/shared/sync/SyncThread.h +3 -0
- data/platform/shared/test/test_helper.cpp +7 -0
- data/platform/win32/RhoSimulator/QtCore4.dll +0 -0
- data/platform/win32/RhoSimulator/QtGui4.dll +0 -0
- data/platform/win32/RhoSimulator/QtNetwork4.dll +0 -0
- data/platform/win32/RhoSimulator/QtWebKit4.dll +0 -0
- data/platform/win32/RhoSimulator/imageformats/qgif4.dll +0 -0
- data/platform/win32/RhoSimulator/imageformats/qjpeg4.dll +0 -0
- data/platform/win32/RhoSimulator/rhosimulator.exe +0 -0
- data/platform/wm/RhoLib/RhoLib.vcproj +762 -14
- data/platform/wm/build/wm.rake +87 -10
- data/platform/wm/rhodes.sln +155 -72
- data/platform/wm/rhodes/MainWindow.cpp +5 -2
- data/platform/wm/rhodes/MainWindow.h +9 -1
- data/platform/wm/rhodes/RhoNativeViewManager.cpp +4 -0
- data/platform/wm/rhodes/Rhodes.cpp +60 -6
- data/platform/wm/rhodes/emulator/ExternalWebView.cpp +20 -0
- data/platform/wm/rhodes/emulator/ExternalWebView.h +23 -0
- data/platform/wm/rhodes/emulator/ExternalWebView.ui +46 -0
- data/platform/wm/rhodes/emulator/MainWindowCallback.h +18 -0
- data/platform/wm/rhodes/emulator/MainWindowProxy.cpp +268 -0
- data/platform/wm/rhodes/emulator/MainWindowProxy.h +34 -0
- data/platform/wm/rhodes/emulator/MainWindowQt.cpp +345 -0
- data/platform/wm/rhodes/emulator/MainWindowQt.h +118 -0
- data/platform/wm/rhodes/emulator/NativeToolbarQt.cpp +57 -0
- data/platform/wm/rhodes/emulator/NativeToolbarQt.h +52 -0
- data/platform/wm/rhodes/emulator/QtMainWindow.cpp +219 -0
- data/platform/wm/rhodes/emulator/QtMainWindow.h +62 -0
- data/platform/wm/rhodes/emulator/QtMainWindow.ui +122 -0
- data/platform/wm/rhodes/{RhoCryptImpl.cpp → rho/common/RhoCryptImpl.cpp} +0 -0
- data/platform/wm/rhodes/{RhoCryptImpl.h → rho/common/RhoCryptImpl.h} +0 -0
- data/platform/wm/rhodes/rho/rubyext/NativeToolbar.cpp +2 -86
- data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.cpp +87 -0
- data/platform/wm/rhodes/rho/rubyext/NativeToolbarExt.h +6 -0
- data/platform/wm/rhodes/rho/rubyext/SystemImpl.cpp +60 -0
- data/platform/wm/rhodes/rhodes.vcproj +4025 -365
- data/platform/wm/rhodes/signature/Signature.cpp +29 -13
- data/platform/wm/rubylib/rubylib.vcproj +1167 -195
- data/platform/wm/shttpd/shttpd.vcproj +4 -4
- data/platform/wm/sqlite3/sqlite3.vcproj +441 -13
- data/platform/wm/syncengine/syncengine.vcproj +443 -15
- data/platform/wm/tcmalloc/tcmalloc.vcproj +0 -154
- data/platform/wm/tools/detool/LogServer.cpp +150 -0
- data/platform/wm/tools/detool/LogServer.h +23 -0
- data/platform/wm/tools/detool/detool.cpp +42 -4
- data/platform/wm/tools/detool/detool.vcproj +10 -1
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.Libraries.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/IronRuby.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Dynamic.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.Core.dll +0 -0
- data/platform/wp7/IronRuby/Bin/Silverlight3Release/Microsoft.Scripting.dll +0 -0
- data/platform/wp7/RhoAppRunner/Program.cs +20 -3
- data/platform/wp7/RhoLogServer/Program.cs +22 -0
- data/platform/wp7/RhoLogServer/Properties/AssemblyInfo.cs +36 -0
- data/platform/wp7/RhoLogServer/RhoLogServer.csproj +65 -0
- data/platform/wp7/RhoLogServer/SocketServer.cs +210 -0
- data/platform/wp7/RhoRubyExtGen/RhoAsyncHttp.cs +6 -0
- data/platform/wp7/RhoRubyLib/Initializers.Generated.cs +3 -2
- data/platform/wp7/RhoRubyLib/RhoRuby.cs +82 -0
- data/platform/wp7/RhoRubyLib/RhoRubyLib.csproj +7 -5
- data/platform/wp7/RhoRubyLib/WP_PlatformAdaptationLayer.cs +1 -1
- data/platform/wp7/RhoRubyLib/common/RhoParams.cs +1 -1
- data/platform/wp7/RhoRubyLib/common/ThreadQueue.cs +4 -1
- data/platform/wp7/RhoRubyLib/db/DBAdapter.cs +2 -2
- data/platform/wp7/RhoRubyLib/logging/IRhoLogSink.cs +1 -1
- data/platform/wp7/RhoRubyLib/logging/RhoEmptyLogger.cs +30 -0
- data/platform/wp7/RhoRubyLib/logging/RhoLogConf.cs +10 -0
- data/platform/wp7/RhoRubyLib/logging/RhoLogFileSink.cs +6 -1
- data/platform/wp7/RhoRubyLib/logging/RhoLogServerSink.cs +56 -0
- data/platform/wp7/RhoRubyLib/logging/RhoLogger.cs +24 -11
- data/platform/wp7/RhoRubyLib/net/AsyncHttp.cs +57 -14
- data/platform/wp7/RhoRubyLib/net/NetRequest.cs +32 -9
- data/platform/wp7/RhoRubyLib/rubyext/RhoAsyncHttp.cs +7 -0
- data/platform/wp7/RhoRubyLib/rubyext/RhoKernelOps.cs +6 -0
- data/platform/wp7/RhoRubyLib/sync/SyncEngine.cs +20 -16
- data/platform/wp7/RhoRubyLib/sync/SyncNotify.cs +2 -2
- data/platform/wp7/RhoRubyLib/sync/SyncSource.cs +138 -40
- data/platform/wp7/WPApplication/rho/apps/app/layout.erb +3 -1
- data/platform/wp7/build/wp.rake +151 -12
- data/platform/wp7/rhodes.sln +10 -0
- data/platform/wp7/rhodes/App.xaml.cs +6 -0
- data/platform/wp7/rhodes/MainPage.xaml +3 -0
- data/platform/wp7/rhodes/MainPage.xaml.cs +19 -0
- data/platform/wp7/rhodes/Rhodes.csproj +4 -2
- data/rakefile.rb +7 -36
- data/res/build-tools/RhoAppRunner.exe +0 -0
- data/res/build-tools/RhoLogServer.exe +0 -0
- data/res/build-tools/detool.exe +0 -0
- data/res/build-tools/wp7explorer.exe +0 -0
- data/res/generators/templates/application/app/layout.erb +3 -1
- data/res/generators/templates/application/public/jqtouch/jqtouch.js +1 -1
- data/rhodes.gemspec +1 -1
- data/spec/framework_spec/app/layout.erb +1 -1
- data/spec/framework_spec/build.yml +1 -0
- data/spec/perfomance_spec/app/layout.erb +3 -0
- data/spec/phone_spec/app/Account_s/account_s.rb +4 -1
- data/spec/phone_spec/app/spec/rhom_object_spec.rb +30 -1
- data/spec/phone_spec/app/spec_runner.rb +1 -1
- data/spec/phone_spec/build.yml +4 -1
- metadata +262 -10
- data/platform/wp7/IronRuby/Languages/Ruby/Ruby/Builtins/ConsoleStream.cs +0 -107
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.common.reedsolomon;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* <p>Represents a polynomial whose coefficients are elements of GF(256).
|
|
21
|
+
* Instances of this class are immutable.</p>
|
|
22
|
+
*
|
|
23
|
+
* <p>Much credit is due to William Rucklidge since portions of this code are an indirect
|
|
24
|
+
* port of his C++ Reed-Solomon implementation.</p>
|
|
25
|
+
*
|
|
26
|
+
* @author Sean Owen
|
|
27
|
+
*/
|
|
28
|
+
final class GF256Poly {
|
|
29
|
+
|
|
30
|
+
private final GF256 field;
|
|
31
|
+
private final int[] coefficients;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @param field the {@link GF256} instance representing the field to use
|
|
35
|
+
* to perform computations
|
|
36
|
+
* @param coefficients coefficients as ints representing elements of GF(256), arranged
|
|
37
|
+
* from most significant (highest-power term) coefficient to least significant
|
|
38
|
+
* @throws IllegalArgumentException if argument is null or empty,
|
|
39
|
+
* or if leading coefficient is 0 and this is not a
|
|
40
|
+
* constant polynomial (that is, it is not the monomial "0")
|
|
41
|
+
*/
|
|
42
|
+
GF256Poly(GF256 field, int[] coefficients) {
|
|
43
|
+
if (coefficients == null || coefficients.length == 0) {
|
|
44
|
+
throw new IllegalArgumentException();
|
|
45
|
+
}
|
|
46
|
+
this.field = field;
|
|
47
|
+
int coefficientsLength = coefficients.length;
|
|
48
|
+
if (coefficientsLength > 1 && coefficients[0] == 0) {
|
|
49
|
+
// Leading term must be non-zero for anything except the constant polynomial "0"
|
|
50
|
+
int firstNonZero = 1;
|
|
51
|
+
while (firstNonZero < coefficientsLength && coefficients[firstNonZero] == 0) {
|
|
52
|
+
firstNonZero++;
|
|
53
|
+
}
|
|
54
|
+
if (firstNonZero == coefficientsLength) {
|
|
55
|
+
this.coefficients = field.getZero().coefficients;
|
|
56
|
+
} else {
|
|
57
|
+
this.coefficients = new int[coefficientsLength - firstNonZero];
|
|
58
|
+
System.arraycopy(coefficients,
|
|
59
|
+
firstNonZero,
|
|
60
|
+
this.coefficients,
|
|
61
|
+
0,
|
|
62
|
+
this.coefficients.length);
|
|
63
|
+
}
|
|
64
|
+
} else {
|
|
65
|
+
this.coefficients = coefficients;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
int[] getCoefficients() {
|
|
70
|
+
return coefficients;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @return degree of this polynomial
|
|
75
|
+
*/
|
|
76
|
+
int getDegree() {
|
|
77
|
+
return coefficients.length - 1;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @return true iff this polynomial is the monomial "0"
|
|
82
|
+
*/
|
|
83
|
+
boolean isZero() {
|
|
84
|
+
return coefficients[0] == 0;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* @return coefficient of x^degree term in this polynomial
|
|
89
|
+
*/
|
|
90
|
+
int getCoefficient(int degree) {
|
|
91
|
+
return coefficients[coefficients.length - 1 - degree];
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @return evaluation of this polynomial at a given point
|
|
96
|
+
*/
|
|
97
|
+
int evaluateAt(int a) {
|
|
98
|
+
if (a == 0) {
|
|
99
|
+
// Just return the x^0 coefficient
|
|
100
|
+
return getCoefficient(0);
|
|
101
|
+
}
|
|
102
|
+
int size = coefficients.length;
|
|
103
|
+
if (a == 1) {
|
|
104
|
+
// Just the sum of the coefficients
|
|
105
|
+
int result = 0;
|
|
106
|
+
for (int i = 0; i < size; i++) {
|
|
107
|
+
result = GF256.addOrSubtract(result, coefficients[i]);
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
int result = coefficients[0];
|
|
112
|
+
for (int i = 1; i < size; i++) {
|
|
113
|
+
result = GF256.addOrSubtract(field.multiply(a, result), coefficients[i]);
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
GF256Poly addOrSubtract(GF256Poly other) {
|
|
119
|
+
if (!field.equals(other.field)) {
|
|
120
|
+
throw new IllegalArgumentException("GF256Polys do not have same GF256 field");
|
|
121
|
+
}
|
|
122
|
+
if (isZero()) {
|
|
123
|
+
return other;
|
|
124
|
+
}
|
|
125
|
+
if (other.isZero()) {
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
int[] smallerCoefficients = this.coefficients;
|
|
130
|
+
int[] largerCoefficients = other.coefficients;
|
|
131
|
+
if (smallerCoefficients.length > largerCoefficients.length) {
|
|
132
|
+
int[] temp = smallerCoefficients;
|
|
133
|
+
smallerCoefficients = largerCoefficients;
|
|
134
|
+
largerCoefficients = temp;
|
|
135
|
+
}
|
|
136
|
+
int[] sumDiff = new int[largerCoefficients.length];
|
|
137
|
+
int lengthDiff = largerCoefficients.length - smallerCoefficients.length;
|
|
138
|
+
// Copy high-order terms only found in higher-degree polynomial's coefficients
|
|
139
|
+
System.arraycopy(largerCoefficients, 0, sumDiff, 0, lengthDiff);
|
|
140
|
+
|
|
141
|
+
for (int i = lengthDiff; i < largerCoefficients.length; i++) {
|
|
142
|
+
sumDiff[i] = GF256.addOrSubtract(smallerCoefficients[i - lengthDiff], largerCoefficients[i]);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return new GF256Poly(field, sumDiff);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
GF256Poly multiply(GF256Poly other) {
|
|
149
|
+
if (!field.equals(other.field)) {
|
|
150
|
+
throw new IllegalArgumentException("GF256Polys do not have same GF256 field");
|
|
151
|
+
}
|
|
152
|
+
if (isZero() || other.isZero()) {
|
|
153
|
+
return field.getZero();
|
|
154
|
+
}
|
|
155
|
+
int[] aCoefficients = this.coefficients;
|
|
156
|
+
int aLength = aCoefficients.length;
|
|
157
|
+
int[] bCoefficients = other.coefficients;
|
|
158
|
+
int bLength = bCoefficients.length;
|
|
159
|
+
int[] product = new int[aLength + bLength - 1];
|
|
160
|
+
for (int i = 0; i < aLength; i++) {
|
|
161
|
+
int aCoeff = aCoefficients[i];
|
|
162
|
+
for (int j = 0; j < bLength; j++) {
|
|
163
|
+
product[i + j] = GF256.addOrSubtract(product[i + j],
|
|
164
|
+
field.multiply(aCoeff, bCoefficients[j]));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return new GF256Poly(field, product);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
GF256Poly multiply(int scalar) {
|
|
171
|
+
if (scalar == 0) {
|
|
172
|
+
return field.getZero();
|
|
173
|
+
}
|
|
174
|
+
if (scalar == 1) {
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
int size = coefficients.length;
|
|
178
|
+
int[] product = new int[size];
|
|
179
|
+
for (int i = 0; i < size; i++) {
|
|
180
|
+
product[i] = field.multiply(coefficients[i], scalar);
|
|
181
|
+
}
|
|
182
|
+
return new GF256Poly(field, product);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
GF256Poly multiplyByMonomial(int degree, int coefficient) {
|
|
186
|
+
if (degree < 0) {
|
|
187
|
+
throw new IllegalArgumentException();
|
|
188
|
+
}
|
|
189
|
+
if (coefficient == 0) {
|
|
190
|
+
return field.getZero();
|
|
191
|
+
}
|
|
192
|
+
int size = coefficients.length;
|
|
193
|
+
int[] product = new int[size + degree];
|
|
194
|
+
for (int i = 0; i < size; i++) {
|
|
195
|
+
product[i] = field.multiply(coefficients[i], coefficient);
|
|
196
|
+
}
|
|
197
|
+
return new GF256Poly(field, product);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
GF256Poly[] divide(GF256Poly other) {
|
|
201
|
+
if (!field.equals(other.field)) {
|
|
202
|
+
throw new IllegalArgumentException("GF256Polys do not have same GF256 field");
|
|
203
|
+
}
|
|
204
|
+
if (other.isZero()) {
|
|
205
|
+
throw new IllegalArgumentException("Divide by 0");
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
GF256Poly quotient = field.getZero();
|
|
209
|
+
GF256Poly remainder = this;
|
|
210
|
+
|
|
211
|
+
int denominatorLeadingTerm = other.getCoefficient(other.getDegree());
|
|
212
|
+
int inverseDenominatorLeadingTerm = field.inverse(denominatorLeadingTerm);
|
|
213
|
+
|
|
214
|
+
while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {
|
|
215
|
+
int degreeDifference = remainder.getDegree() - other.getDegree();
|
|
216
|
+
int scale = field.multiply(remainder.getCoefficient(remainder.getDegree()), inverseDenominatorLeadingTerm);
|
|
217
|
+
GF256Poly term = other.multiplyByMonomial(degreeDifference, scale);
|
|
218
|
+
GF256Poly iterationQuotient = field.buildMonomial(degreeDifference, scale);
|
|
219
|
+
quotient = quotient.addOrSubtract(iterationQuotient);
|
|
220
|
+
remainder = remainder.addOrSubtract(term);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
return new GF256Poly[] { quotient, remainder };
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
public String toString() {
|
|
227
|
+
StringBuffer result = new StringBuffer(8 * getDegree());
|
|
228
|
+
for (int degree = getDegree(); degree >= 0; degree--) {
|
|
229
|
+
int coefficient = getCoefficient(degree);
|
|
230
|
+
if (coefficient != 0) {
|
|
231
|
+
if (coefficient < 0) {
|
|
232
|
+
result.append(" - ");
|
|
233
|
+
coefficient = -coefficient;
|
|
234
|
+
} else {
|
|
235
|
+
if (result.length() > 0) {
|
|
236
|
+
result.append(" + ");
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (degree == 0 || coefficient != 1) {
|
|
240
|
+
int alphaPower = field.log(coefficient);
|
|
241
|
+
if (alphaPower == 0) {
|
|
242
|
+
result.append('1');
|
|
243
|
+
} else if (alphaPower == 1) {
|
|
244
|
+
result.append('a');
|
|
245
|
+
} else {
|
|
246
|
+
result.append("a^");
|
|
247
|
+
result.append(alphaPower);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (degree != 0) {
|
|
251
|
+
if (degree == 1) {
|
|
252
|
+
result.append('x');
|
|
253
|
+
} else {
|
|
254
|
+
result.append("x^");
|
|
255
|
+
result.append(degree);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
return result.toString();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2007 ZXing authors
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package com.google.zxing.common.reedsolomon;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* <p>Implements Reed-Solomon decoding, as the name implies.</p>
|
|
21
|
+
*
|
|
22
|
+
* <p>The algorithm will not be explained here, but the following references were helpful
|
|
23
|
+
* in creating this implementation:</p>
|
|
24
|
+
*
|
|
25
|
+
* <ul>
|
|
26
|
+
* <li>Bruce Maggs.
|
|
27
|
+
* <a href="http://www.cs.cmu.edu/afs/cs.cmu.edu/project/pscico-guyb/realworld/www/rs_decode.ps">
|
|
28
|
+
* "Decoding Reed-Solomon Codes"</a> (see discussion of Forney's Formula)</li>
|
|
29
|
+
* <li>J.I. Hall. <a href="www.mth.msu.edu/~jhall/classes/codenotes/GRS.pdf">
|
|
30
|
+
* "Chapter 5. Generalized Reed-Solomon Codes"</a>
|
|
31
|
+
* (see discussion of Euclidean algorithm)</li>
|
|
32
|
+
* </ul>
|
|
33
|
+
*
|
|
34
|
+
* <p>Much credit is due to William Rucklidge since portions of this code are an indirect
|
|
35
|
+
* port of his C++ Reed-Solomon implementation.</p>
|
|
36
|
+
*
|
|
37
|
+
* @author Sean Owen
|
|
38
|
+
* @author William Rucklidge
|
|
39
|
+
* @author sanfordsquires
|
|
40
|
+
*/
|
|
41
|
+
public final class ReedSolomonDecoder {
|
|
42
|
+
|
|
43
|
+
private final GF256 field;
|
|
44
|
+
|
|
45
|
+
public ReedSolomonDecoder(GF256 field) {
|
|
46
|
+
this.field = field;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* <p>Decodes given set of received codewords, which include both data and error-correction
|
|
51
|
+
* codewords. Really, this means it uses Reed-Solomon to detect and correct errors, in-place,
|
|
52
|
+
* in the input.</p>
|
|
53
|
+
*
|
|
54
|
+
* @param received data and error-correction codewords
|
|
55
|
+
* @param twoS number of error-correction codewords available
|
|
56
|
+
* @throws ReedSolomonException if decoding fails for any reason
|
|
57
|
+
*/
|
|
58
|
+
public void decode(int[] received, int twoS) throws ReedSolomonException {
|
|
59
|
+
GF256Poly poly = new GF256Poly(field, received);
|
|
60
|
+
int[] syndromeCoefficients = new int[twoS];
|
|
61
|
+
boolean dataMatrix = field.equals(GF256.DATA_MATRIX_FIELD);
|
|
62
|
+
boolean noError = true;
|
|
63
|
+
for (int i = 0; i < twoS; i++) {
|
|
64
|
+
// Thanks to sanfordsquires for this fix:
|
|
65
|
+
int eval = poly.evaluateAt(field.exp(dataMatrix ? i + 1 : i));
|
|
66
|
+
syndromeCoefficients[syndromeCoefficients.length - 1 - i] = eval;
|
|
67
|
+
if (eval != 0) {
|
|
68
|
+
noError = false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (noError) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
GF256Poly syndrome = new GF256Poly(field, syndromeCoefficients);
|
|
75
|
+
GF256Poly[] sigmaOmega =
|
|
76
|
+
runEuclideanAlgorithm(field.buildMonomial(twoS, 1), syndrome, twoS);
|
|
77
|
+
GF256Poly sigma = sigmaOmega[0];
|
|
78
|
+
GF256Poly omega = sigmaOmega[1];
|
|
79
|
+
int[] errorLocations = findErrorLocations(sigma);
|
|
80
|
+
int[] errorMagnitudes = findErrorMagnitudes(omega, errorLocations, dataMatrix);
|
|
81
|
+
for (int i = 0; i < errorLocations.length; i++) {
|
|
82
|
+
int position = received.length - 1 - field.log(errorLocations[i]);
|
|
83
|
+
if (position < 0) {
|
|
84
|
+
throw new ReedSolomonException("Bad error location");
|
|
85
|
+
}
|
|
86
|
+
received[position] = GF256.addOrSubtract(received[position], errorMagnitudes[i]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private GF256Poly[] runEuclideanAlgorithm(GF256Poly a, GF256Poly b, int R)
|
|
91
|
+
throws ReedSolomonException {
|
|
92
|
+
// Assume a's degree is >= b's
|
|
93
|
+
if (a.getDegree() < b.getDegree()) {
|
|
94
|
+
GF256Poly temp = a;
|
|
95
|
+
a = b;
|
|
96
|
+
b = temp;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
GF256Poly rLast = a;
|
|
100
|
+
GF256Poly r = b;
|
|
101
|
+
GF256Poly sLast = field.getOne();
|
|
102
|
+
GF256Poly s = field.getZero();
|
|
103
|
+
GF256Poly tLast = field.getZero();
|
|
104
|
+
GF256Poly t = field.getOne();
|
|
105
|
+
|
|
106
|
+
// Run Euclidean algorithm until r's degree is less than R/2
|
|
107
|
+
while (r.getDegree() >= R / 2) {
|
|
108
|
+
GF256Poly rLastLast = rLast;
|
|
109
|
+
GF256Poly sLastLast = sLast;
|
|
110
|
+
GF256Poly tLastLast = tLast;
|
|
111
|
+
rLast = r;
|
|
112
|
+
sLast = s;
|
|
113
|
+
tLast = t;
|
|
114
|
+
|
|
115
|
+
// Divide rLastLast by rLast, with quotient in q and remainder in r
|
|
116
|
+
if (rLast.isZero()) {
|
|
117
|
+
// Oops, Euclidean algorithm already terminated?
|
|
118
|
+
throw new ReedSolomonException("r_{i-1} was zero");
|
|
119
|
+
}
|
|
120
|
+
r = rLastLast;
|
|
121
|
+
GF256Poly q = field.getZero();
|
|
122
|
+
int denominatorLeadingTerm = rLast.getCoefficient(rLast.getDegree());
|
|
123
|
+
int dltInverse = field.inverse(denominatorLeadingTerm);
|
|
124
|
+
while (r.getDegree() >= rLast.getDegree() && !r.isZero()) {
|
|
125
|
+
int degreeDiff = r.getDegree() - rLast.getDegree();
|
|
126
|
+
int scale = field.multiply(r.getCoefficient(r.getDegree()), dltInverse);
|
|
127
|
+
q = q.addOrSubtract(field.buildMonomial(degreeDiff, scale));
|
|
128
|
+
r = r.addOrSubtract(rLast.multiplyByMonomial(degreeDiff, scale));
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
s = q.multiply(sLast).addOrSubtract(sLastLast);
|
|
132
|
+
t = q.multiply(tLast).addOrSubtract(tLastLast);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
int sigmaTildeAtZero = t.getCoefficient(0);
|
|
136
|
+
if (sigmaTildeAtZero == 0) {
|
|
137
|
+
throw new ReedSolomonException("sigmaTilde(0) was zero");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
int inverse = field.inverse(sigmaTildeAtZero);
|
|
141
|
+
GF256Poly sigma = t.multiply(inverse);
|
|
142
|
+
GF256Poly omega = r.multiply(inverse);
|
|
143
|
+
return new GF256Poly[]{sigma, omega};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private int[] findErrorLocations(GF256Poly errorLocator) throws ReedSolomonException {
|
|
147
|
+
// This is a direct application of Chien's search
|
|
148
|
+
int numErrors = errorLocator.getDegree();
|
|
149
|
+
if (numErrors == 1) { // shortcut
|
|
150
|
+
return new int[] { errorLocator.getCoefficient(1) };
|
|
151
|
+
}
|
|
152
|
+
int[] result = new int[numErrors];
|
|
153
|
+
int e = 0;
|
|
154
|
+
for (int i = 1; i < 256 && e < numErrors; i++) {
|
|
155
|
+
if (errorLocator.evaluateAt(i) == 0) {
|
|
156
|
+
result[e] = field.inverse(i);
|
|
157
|
+
e++;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (e != numErrors) {
|
|
161
|
+
throw new ReedSolomonException("Error locator degree does not match number of roots");
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
private int[] findErrorMagnitudes(GF256Poly errorEvaluator, int[] errorLocations, boolean dataMatrix) {
|
|
167
|
+
// This is directly applying Forney's Formula
|
|
168
|
+
int s = errorLocations.length;
|
|
169
|
+
int[] result = new int[s];
|
|
170
|
+
for (int i = 0; i < s; i++) {
|
|
171
|
+
int xiInverse = field.inverse(errorLocations[i]);
|
|
172
|
+
int denominator = 1;
|
|
173
|
+
for (int j = 0; j < s; j++) {
|
|
174
|
+
if (i != j) {
|
|
175
|
+
//denominator = field.multiply(denominator,
|
|
176
|
+
// GF256.addOrSubtract(1, field.multiply(errorLocations[j], xiInverse)));
|
|
177
|
+
// Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.
|
|
178
|
+
// Below is a funny-looking workaround from Steven Parkes
|
|
179
|
+
int term = field.multiply(errorLocations[j], xiInverse);
|
|
180
|
+
int termPlus1 = ((term & 0x1) == 0) ? (term | 1) : (term & ~1);
|
|
181
|
+
denominator = field.multiply(denominator, termPlus1);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
result[i] = field.multiply(errorEvaluator.evaluateAt(xiInverse),
|
|
185
|
+
field.inverse(denominator));
|
|
186
|
+
// Thanks to sanfordsquires for this fix:
|
|
187
|
+
if (dataMatrix) {
|
|
188
|
+
result[i] = field.multiply(result[i], xiInverse);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return result;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
}
|