zxing_cpp 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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