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.
Files changed (332) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.gitmodules +3 -0
  4. data/CHANGELOG.rdoc +6 -0
  5. data/Gemfile +3 -0
  6. data/Manifest.txt +331 -0
  7. data/README.rdoc +138 -0
  8. data/Rakefile +28 -0
  9. data/bin/zxd +87 -0
  10. data/bin/zxe +53 -0
  11. data/ext/zxing/extconf.rb +27 -0
  12. data/ext/zxing/zxing-cpp/.gitignore +4 -0
  13. data/ext/zxing/zxing-cpp/AUTHORS +115 -0
  14. data/ext/zxing/zxing-cpp/CMakeLists.txt +84 -0
  15. data/ext/zxing/zxing-cpp/COPYING +201 -0
  16. data/ext/zxing/zxing-cpp/NOTICE +65 -0
  17. data/ext/zxing/zxing-cpp/README.md +50 -0
  18. data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.cpp +112 -0
  19. data/ext/zxing/zxing-cpp/cli/src/ImageReaderSource.h +40 -0
  20. data/ext/zxing/zxing-cpp/cli/src/jpgd.cpp +3174 -0
  21. data/ext/zxing/zxing-cpp/cli/src/jpgd.h +319 -0
  22. data/ext/zxing/zxing-cpp/cli/src/lodepng.cpp +6261 -0
  23. data/ext/zxing/zxing-cpp/cli/src/lodepng.h +1695 -0
  24. data/ext/zxing/zxing-cpp/cli/src/main.cpp +297 -0
  25. data/ext/zxing/zxing-cpp/cmake/FindCPPUNIT.cmake +54 -0
  26. data/ext/zxing/zxing-cpp/cmake/FindIconv.cmake +57 -0
  27. data/ext/zxing/zxing-cpp/core/src/bigint/.gitignore +6 -0
  28. data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.cc +405 -0
  29. data/ext/zxing/zxing-cpp/core/src/bigint/BigInteger.hh +215 -0
  30. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.cc +70 -0
  31. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerAlgorithms.hh +25 -0
  32. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerLibrary.hh +8 -0
  33. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.cc +50 -0
  34. data/ext/zxing/zxing-cpp/core/src/bigint/BigIntegerUtils.hh +72 -0
  35. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.cc +697 -0
  36. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsigned.hh +418 -0
  37. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.cc +125 -0
  38. data/ext/zxing/zxing-cpp/core/src/bigint/BigUnsignedInABase.hh +122 -0
  39. data/ext/zxing/zxing-cpp/core/src/bigint/ChangeLog +146 -0
  40. data/ext/zxing/zxing-cpp/core/src/bigint/Makefile +73 -0
  41. data/ext/zxing/zxing-cpp/core/src/bigint/NumberlikeArray.hh +177 -0
  42. data/ext/zxing/zxing-cpp/core/src/bigint/README +71 -0
  43. data/ext/zxing/zxing-cpp/core/src/win32/zxing/iconv.h +14 -0
  44. data/ext/zxing/zxing-cpp/core/src/win32/zxing/stdint.h +247 -0
  45. data/ext/zxing/zxing-cpp/core/src/win32/zxing/win_iconv.c +2035 -0
  46. data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.cpp +40 -0
  47. data/ext/zxing/zxing-cpp/core/src/zxing/BarcodeFormat.h +60 -0
  48. data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.cpp +45 -0
  49. data/ext/zxing/zxing-cpp/core/src/zxing/Binarizer.h +50 -0
  50. data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.cpp +70 -0
  51. data/ext/zxing/zxing-cpp/core/src/zxing/BinaryBitmap.h +56 -0
  52. data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.cpp +28 -0
  53. data/ext/zxing/zxing-cpp/core/src/zxing/ChecksumException.h +34 -0
  54. data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.cpp +142 -0
  55. data/ext/zxing/zxing-cpp/core/src/zxing/DecodeHints.h +85 -0
  56. data/ext/zxing/zxing-cpp/core/src/zxing/Exception.cpp +43 -0
  57. data/ext/zxing/zxing-cpp/core/src/zxing/Exception.h +51 -0
  58. data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.cpp +41 -0
  59. data/ext/zxing/zxing-cpp/core/src/zxing/FormatException.h +37 -0
  60. data/ext/zxing/zxing-cpp/core/src/zxing/IllegalStateException.h +35 -0
  61. data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.cpp +68 -0
  62. data/ext/zxing/zxing-cpp/core/src/zxing/InvertedLuminanceSource.h +48 -0
  63. data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.cpp +86 -0
  64. data/ext/zxing/zxing-cpp/core/src/zxing/LuminanceSource.h +59 -0
  65. data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.cpp +124 -0
  66. data/ext/zxing/zxing-cpp/core/src/zxing/MultiFormatReader.h +48 -0
  67. data/ext/zxing/zxing-cpp/core/src/zxing/NotFoundException.h +35 -0
  68. data/ext/zxing/zxing-cpp/core/src/zxing/Reader.cpp +31 -0
  69. data/ext/zxing/zxing-cpp/core/src/zxing/Reader.h +40 -0
  70. data/ext/zxing/zxing-cpp/core/src/zxing/ReaderException.h +37 -0
  71. data/ext/zxing/zxing-cpp/core/src/zxing/Result.cpp +61 -0
  72. data/ext/zxing/zxing-cpp/core/src/zxing/Result.h +55 -0
  73. data/ext/zxing/zxing-cpp/core/src/zxing/ResultIO.cpp +34 -0
  74. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.cpp +108 -0
  75. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPoint.h +55 -0
  76. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.cpp +26 -0
  77. data/ext/zxing/zxing-cpp/core/src/zxing/ResultPointCallback.h +39 -0
  78. data/ext/zxing/zxing-cpp/core/src/zxing/ZXing.h +133 -0
  79. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.cpp +54 -0
  80. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecDetectorResult.h +48 -0
  81. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.cpp +68 -0
  82. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/AztecReader.h +49 -0
  83. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.cpp +489 -0
  84. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/decoder/Decoder.h +69 -0
  85. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.cpp +548 -0
  86. data/ext/zxing/zxing-cpp/core/src/zxing/aztec/detector/Detector.h +92 -0
  87. data/ext/zxing/zxing-cpp/core/src/zxing/common/Array.h +170 -0
  88. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.cpp +155 -0
  89. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArray.h +81 -0
  90. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitArrayIO.cpp +31 -0
  91. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.cpp +143 -0
  92. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitMatrix.h +91 -0
  93. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.cpp +76 -0
  94. data/ext/zxing/zxing-cpp/core/src/zxing/common/BitSource.h +74 -0
  95. data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.cpp +104 -0
  96. data/ext/zxing/zxing-cpp/core/src/zxing/common/CharacterSetECI.h +53 -0
  97. data/ext/zxing/zxing-cpp/core/src/zxing/common/Counted.h +140 -0
  98. data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.cpp +46 -0
  99. data/ext/zxing/zxing-cpp/core/src/zxing/common/DecoderResult.h +51 -0
  100. data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.cpp +39 -0
  101. data/ext/zxing/zxing-cpp/core/src/zxing/common/DetectorResult.h +43 -0
  102. data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.cpp +212 -0
  103. data/ext/zxing/zxing-cpp/core/src/zxing/common/GlobalHistogramBinarizer.h +48 -0
  104. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.cpp +80 -0
  105. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleLuminanceSource.h +53 -0
  106. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.cpp +81 -0
  107. data/ext/zxing/zxing-cpp/core/src/zxing/common/GreyscaleRotatedLuminanceSource.h +46 -0
  108. data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.cpp +122 -0
  109. data/ext/zxing/zxing-cpp/core/src/zxing/common/GridSampler.h +45 -0
  110. data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.cpp +226 -0
  111. data/ext/zxing/zxing-cpp/core/src/zxing/common/HybridBinarizer.h +67 -0
  112. data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.cpp +27 -0
  113. data/ext/zxing/zxing-cpp/core/src/zxing/common/IllegalArgumentException.h +36 -0
  114. data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.cpp +107 -0
  115. data/ext/zxing/zxing-cpp/core/src/zxing/common/PerspectiveTransform.h +49 -0
  116. data/ext/zxing/zxing-cpp/core/src/zxing/common/Point.h +47 -0
  117. data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.cpp +61 -0
  118. data/ext/zxing/zxing-cpp/core/src/zxing/common/Str.h +51 -0
  119. data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.cpp +198 -0
  120. data/ext/zxing/zxing-cpp/core/src/zxing/common/StringUtils.h +52 -0
  121. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/JavaMath.h +43 -0
  122. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MathUtils.h +57 -0
  123. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.cpp +174 -0
  124. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/MonochromeRectangleDetector.h +62 -0
  125. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.cpp +330 -0
  126. data/ext/zxing/zxing-cpp/core/src/zxing/common/detector/WhiteRectangleDetector.h +59 -0
  127. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.cpp +150 -0
  128. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGF.h +73 -0
  129. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.cpp +218 -0
  130. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/GenericGFPoly.h +56 -0
  131. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.cpp +174 -0
  132. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonDecoder.h +49 -0
  133. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.cpp +30 -0
  134. data/ext/zxing/zxing-cpp/core/src/zxing/common/reedsolomon/ReedSolomonException.h +33 -0
  135. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.cpp +54 -0
  136. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/DataMatrixReader.h +45 -0
  137. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.cpp +199 -0
  138. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/Version.h +87 -0
  139. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.cpp +361 -0
  140. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/BitMatrixParser.h +59 -0
  141. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.cpp +113 -0
  142. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DataBlock.h +49 -0
  143. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.cpp +416 -0
  144. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/DecodedBitStreamParser.h +104 -0
  145. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.cpp +93 -0
  146. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/decoder/Decoder.h +49 -0
  147. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.cpp +46 -0
  148. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/CornerPoint.h +43 -0
  149. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.cpp +446 -0
  150. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/Detector.h +94 -0
  151. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.cpp +23 -0
  152. data/ext/zxing/zxing-cpp/core/src/zxing/datamatrix/detector/DetectorException.h +23 -0
  153. data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.cpp +75 -0
  154. data/ext/zxing/zxing-cpp/core/src/zxing/multi/ByQuadrantReader.h +42 -0
  155. data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.cpp +137 -0
  156. data/ext/zxing/zxing-cpp/core/src/zxing/multi/GenericMultipleBarcodeReader.h +51 -0
  157. data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.cpp +29 -0
  158. data/ext/zxing/zxing-cpp/core/src/zxing/multi/MultipleBarcodeReader.h +41 -0
  159. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.cpp +58 -0
  160. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/QRCodeMultiReader.h +36 -0
  161. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.cpp +47 -0
  162. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiDetector.h +37 -0
  163. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.cpp +236 -0
  164. data/ext/zxing/zxing-cpp/core/src/zxing/multi/qrcode/detector/MultiFinderPatternFinder.h +47 -0
  165. data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.cpp +340 -0
  166. data/ext/zxing/zxing-cpp/core/src/zxing/oned/CodaBarReader.h +57 -0
  167. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.cpp +496 -0
  168. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code128Reader.h +48 -0
  169. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.cpp +328 -0
  170. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code39Reader.h +63 -0
  171. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.cpp +293 -0
  172. data/ext/zxing/zxing-cpp/core/src/zxing/oned/Code93Reader.h +58 -0
  173. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.cpp +85 -0
  174. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN13Reader.h +49 -0
  175. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.cpp +65 -0
  176. data/ext/zxing/zxing-cpp/core/src/zxing/oned/EAN8Reader.h +47 -0
  177. data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.cpp +337 -0
  178. data/ext/zxing/zxing-cpp/core/src/zxing/oned/ITFReader.h +54 -0
  179. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.cpp +96 -0
  180. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatOneDReader.h +38 -0
  181. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp +110 -0
  182. data/ext/zxing/zxing-cpp/core/src/zxing/oned/MultiFormatUPCEANReader.h +41 -0
  183. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.cpp +227 -0
  184. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDReader.h +81 -0
  185. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.cpp +28 -0
  186. data/ext/zxing/zxing-cpp/core/src/zxing/oned/OneDResultPoint.h +35 -0
  187. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.cpp +71 -0
  188. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCAReader.h +50 -0
  189. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.cpp +309 -0
  190. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEANReader.h +88 -0
  191. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.cpp +146 -0
  192. data/ext/zxing/zxing-cpp/core/src/zxing/oned/UPCEReader.h +47 -0
  193. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.cpp +170 -0
  194. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/PDF417Reader.h +49 -0
  195. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.cpp +997 -0
  196. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/BitMatrixParser.h +84 -0
  197. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.cpp +563 -0
  198. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/DecodedBitStreamParser.h +84 -0
  199. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.cpp +118 -0
  200. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/Decoder.h +62 -0
  201. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.cpp +214 -0
  202. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ErrorCorrection.h +71 -0
  203. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.cpp +120 -0
  204. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusGF.h +72 -0
  205. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.cpp +284 -0
  206. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/decoder/ec/ModulusPoly.h +68 -0
  207. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.cpp +664 -0
  208. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/Detector.h +106 -0
  209. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.cpp +714 -0
  210. data/ext/zxing/zxing-cpp/core/src/zxing/pdf417/detector/LinesSampler.h +122 -0
  211. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.cpp +65 -0
  212. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/ErrorCorrectionLevel.h +52 -0
  213. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.cpp +117 -0
  214. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/FormatInformation.h +54 -0
  215. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.cpp +52 -0
  216. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/QRCodeReader.h +48 -0
  217. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.cpp +560 -0
  218. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/Version.h +85 -0
  219. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.cpp +183 -0
  220. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/BitMatrixParser.h +56 -0
  221. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.cpp +118 -0
  222. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataBlock.h +50 -0
  223. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.cpp +159 -0
  224. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DataMask.h +50 -0
  225. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.cpp +425 -0
  226. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/DecodedBitStreamParser.h +72 -0
  227. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.cpp +107 -0
  228. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Decoder.h +46 -0
  229. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.cpp +90 -0
  230. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/decoder/Mode.h +57 -0
  231. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.cpp +47 -0
  232. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPattern.h +45 -0
  233. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.cpp +208 -0
  234. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/AlignmentPatternFinder.h +68 -0
  235. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.cpp +314 -0
  236. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/Detector.h +69 -0
  237. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.cpp +69 -0
  238. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPattern.h +48 -0
  239. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.cpp +559 -0
  240. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternFinder.h +76 -0
  241. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.cpp +41 -0
  242. data/ext/zxing/zxing-cpp/core/src/zxing/qrcode/detector/FinderPatternInfo.h +47 -0
  243. data/ext/zxing/zxing-cpp/core/tests/src/TestRunner.cpp +30 -0
  244. data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.cpp +216 -0
  245. data/ext/zxing/zxing-cpp/core/tests/src/common/BitArrayTest.h +61 -0
  246. data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.cpp +106 -0
  247. data/ext/zxing/zxing-cpp/core/tests/src/common/BitMatrixTest.h +55 -0
  248. data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.cpp +49 -0
  249. data/ext/zxing/zxing-cpp/core/tests/src/common/BitSourceTest.h +42 -0
  250. data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.cpp +58 -0
  251. data/ext/zxing/zxing-cpp/core/tests/src/common/CountedTest.h +46 -0
  252. data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.cpp +69 -0
  253. data/ext/zxing/zxing-cpp/core/tests/src/common/PerspectiveTransformTest.h +47 -0
  254. data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.cpp +129 -0
  255. data/ext/zxing/zxing-cpp/core/tests/src/common/reedsolomon/ReedSolomonTest.h +62 -0
  256. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.cpp +47 -0
  257. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/ErrorCorrectionLevelTest.h +45 -0
  258. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.cpp +88 -0
  259. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/FormatInformationTest.h +47 -0
  260. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.cpp +88 -0
  261. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/VersionTest.h +49 -0
  262. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.cpp +132 -0
  263. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/DataMaskTest.h +91 -0
  264. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.cpp +52 -0
  265. data/ext/zxing/zxing-cpp/core/tests/src/qrcode/decoder/ModeTest.h +47 -0
  266. data/ext/zxing/zxing.cc +224 -0
  267. data/lib/zxing.rb +50 -0
  268. data/lib/zxing/.gitignore +2 -0
  269. data/lib/zxing/aztec.rb +5 -0
  270. data/lib/zxing/aztec/aztec_reader.rb +14 -0
  271. data/lib/zxing/bad_image_exception.rb +4 -0
  272. data/lib/zxing/binarizer.rb +8 -0
  273. data/lib/zxing/binary_bitmap.rb +15 -0
  274. data/lib/zxing/checksum_exception.rb +4 -0
  275. data/lib/zxing/common.rb +7 -0
  276. data/lib/zxing/common/bit_matrix.rb +9 -0
  277. data/lib/zxing/common/hybrid_binarizer.rb +17 -0
  278. data/lib/zxing/common/illegal_argument_exception.rb +4 -0
  279. data/lib/zxing/datamatrix.rb +5 -0
  280. data/lib/zxing/datamatrix/data_matrix_reader.rb +14 -0
  281. data/lib/zxing/decodable.rb +11 -0
  282. data/lib/zxing/exception.rb +4 -0
  283. data/lib/zxing/ffi.rb +20 -0
  284. data/lib/zxing/ffi/aztec.rb +6 -0
  285. data/lib/zxing/ffi/aztec/aztec_reader.rb +9 -0
  286. data/lib/zxing/ffi/binarizer.rb +25 -0
  287. data/lib/zxing/ffi/binary_bitmap.rb +15 -0
  288. data/lib/zxing/ffi/common.rb +8 -0
  289. data/lib/zxing/ffi/common/bit_matrix.rb +12 -0
  290. data/lib/zxing/ffi/common/greyscale_luminance_source.rb +30 -0
  291. data/lib/zxing/ffi/common/hybrid_binarizer.rb +10 -0
  292. data/lib/zxing/ffi/datamatrix.rb +6 -0
  293. data/lib/zxing/ffi/datamatrix/data_matrix_reader.rb +9 -0
  294. data/lib/zxing/ffi/library.rb +102 -0
  295. data/lib/zxing/ffi/luminance_source.rb +18 -0
  296. data/lib/zxing/ffi/multi_format_reader.rb +9 -0
  297. data/lib/zxing/ffi/oned.rb +6 -0
  298. data/lib/zxing/ffi/oned/code_39_reader.rb +10 -0
  299. data/lib/zxing/ffi/qrcode.rb +8 -0
  300. data/lib/zxing/ffi/qrcode/decoder.rb +10 -0
  301. data/lib/zxing/ffi/qrcode/detector.rb +10 -0
  302. data/lib/zxing/ffi/reader.rb +58 -0
  303. data/lib/zxing/ffi/result.rb +23 -0
  304. data/lib/zxing/format_exception.rb +4 -0
  305. data/lib/zxing/illegal_argument_exception.rb +4 -0
  306. data/lib/zxing/image.rb +15 -0
  307. data/lib/zxing/luminance_source.rb +18 -0
  308. data/lib/zxing/multi_format_reader.rb +11 -0
  309. data/lib/zxing/not_found_exception.rb +4 -0
  310. data/lib/zxing/oned.rb +5 -0
  311. data/lib/zxing/oned/code_39_reader.rb +15 -0
  312. data/lib/zxing/qrcode.rb +8 -0
  313. data/lib/zxing/qrcode/decoder.rb +14 -0
  314. data/lib/zxing/qrcode/detector.rb +14 -0
  315. data/lib/zxing/qrcode/encoder.rb +8 -0
  316. data/lib/zxing/qrcode/encoder/byte_matrix.rb +18 -0
  317. data/lib/zxing/qrcode/encoder/encoder.rb +9 -0
  318. data/lib/zxing/qrcode/encoder/qrcode.rb +18 -0
  319. data/lib/zxing/reader.rb +8 -0
  320. data/lib/zxing/reader_exception.rb +4 -0
  321. data/lib/zxing/reed_solomon_exception.rb +2 -0
  322. data/lib/zxing/result.rb +18 -0
  323. data/lib/zxing/rmagick.rb +5 -0
  324. data/lib/zxing/rmagick/image.rb +104 -0
  325. data/lib/zxing/version.rb +33 -0
  326. data/test/qrcode.png +0 -0
  327. data/test/test_helper.rb +5 -0
  328. data/test/test_zxing.rb +58 -0
  329. data/test/vendor.rb +360 -0
  330. data/test/zxing/test_decodable.rb +38 -0
  331. data/zxing_cpp.gemspec +48 -0
  332. 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,8 @@
1
+ // This header file includes all of the library header files.
2
+
3
+ #include "NumberlikeArray.hh"
4
+ #include "BigUnsigned.hh"
5
+ #include "BigInteger.hh"
6
+ #include "BigIntegerAlgorithms.hh"
7
+ #include "BigUnsignedInABase.hh"
8
+ #include "BigIntegerUtils.hh"
@@ -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