react-native-nitro-zxing 0.1.0-alpha.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 (423) hide show
  1. package/README.md +34 -0
  2. package/VisionCameraZxing.podspec +48 -0
  3. package/android/CMakeLists.txt +43 -0
  4. package/android/build.gradle +150 -0
  5. package/android/fix-prefab.gradle +51 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +3 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +7 -0
  9. package/android/src/main/java/com/margelo/nitro/camera/zxing/VisionCameraZxingPackage.kt +21 -0
  10. package/cpp/BarcodeValueTypeClassifier.cpp +70 -0
  11. package/cpp/BarcodeValueTypeClassifier.hpp +14 -0
  12. package/cpp/FrameImageView.cpp +75 -0
  13. package/cpp/FrameImageView.hpp +34 -0
  14. package/cpp/HybridBarcode.cpp +59 -0
  15. package/cpp/HybridBarcode.hpp +26 -0
  16. package/cpp/HybridBarcodeScanner.cpp +121 -0
  17. package/cpp/HybridBarcodeScanner.hpp +26 -0
  18. package/cpp/HybridBarcodeScannerFactory.cpp +11 -0
  19. package/cpp/HybridBarcodeScannerFactory.hpp +14 -0
  20. package/cpp/ImageDownscaler.cpp +34 -0
  21. package/cpp/ImageDownscaler.hpp +21 -0
  22. package/cpp/ZXingDecoder.cpp +189 -0
  23. package/cpp/ZXingDecoder.hpp +72 -0
  24. package/cpp/zxing-core/LICENSE +202 -0
  25. package/cpp/zxing-core/README.md +156 -0
  26. package/cpp/zxing-core/core/CMakeLists.txt +784 -0
  27. package/cpp/zxing-core/core/Version.h.in +28 -0
  28. package/cpp/zxing-core/core/ZXingConfig.cmake.in +9 -0
  29. package/cpp/zxing-core/core/src/Barcode.cpp +255 -0
  30. package/cpp/zxing-core/core/src/Barcode.h +191 -0
  31. package/cpp/zxing-core/core/src/BarcodeData.h +100 -0
  32. package/cpp/zxing-core/core/src/BarcodeFormat.cpp +286 -0
  33. package/cpp/zxing-core/core/src/BarcodeFormat.h +272 -0
  34. package/cpp/zxing-core/core/src/BinaryBitmap.cpp +111 -0
  35. package/cpp/zxing-core/core/src/BinaryBitmap.h +66 -0
  36. package/cpp/zxing-core/core/src/BitArray.cpp +38 -0
  37. package/cpp/zxing-core/core/src/BitArray.h +181 -0
  38. package/cpp/zxing-core/core/src/BitMatrix.cpp +175 -0
  39. package/cpp/zxing-core/core/src/BitMatrix.h +199 -0
  40. package/cpp/zxing-core/core/src/BitMatrixCursor.h +253 -0
  41. package/cpp/zxing-core/core/src/BitMatrixIO.cpp +101 -0
  42. package/cpp/zxing-core/core/src/BitMatrixIO.h +21 -0
  43. package/cpp/zxing-core/core/src/BitSource.cpp +77 -0
  44. package/cpp/zxing-core/core/src/BitSource.h +72 -0
  45. package/cpp/zxing-core/core/src/ByteArray.h +42 -0
  46. package/cpp/zxing-core/core/src/CharacterSet.cpp +78 -0
  47. package/cpp/zxing-core/core/src/CharacterSet.h +58 -0
  48. package/cpp/zxing-core/core/src/ConcentricFinder.cpp +312 -0
  49. package/cpp/zxing-core/core/src/ConcentricFinder.h +156 -0
  50. package/cpp/zxing-core/core/src/Content.cpp +471 -0
  51. package/cpp/zxing-core/core/src/Content.h +82 -0
  52. package/cpp/zxing-core/core/src/ContentType.h +19 -0
  53. package/cpp/zxing-core/core/src/CreateBarcode.cpp +490 -0
  54. package/cpp/zxing-core/core/src/CreateBarcode.h +132 -0
  55. package/cpp/zxing-core/core/src/DecoderResult.h +92 -0
  56. package/cpp/zxing-core/core/src/DetectorResult.h +44 -0
  57. package/cpp/zxing-core/core/src/ECI.cpp +81 -0
  58. package/cpp/zxing-core/core/src/ECI.h +78 -0
  59. package/cpp/zxing-core/core/src/Error.cpp +29 -0
  60. package/cpp/zxing-core/core/src/Error.h +79 -0
  61. package/cpp/zxing-core/core/src/Flags.h +165 -0
  62. package/cpp/zxing-core/core/src/GTIN.cpp +253 -0
  63. package/cpp/zxing-core/core/src/GTIN.h +58 -0
  64. package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.cpp +197 -0
  65. package/cpp/zxing-core/core/src/GlobalHistogramBinarizer.h +34 -0
  66. package/cpp/zxing-core/core/src/GridSampler.cpp +124 -0
  67. package/cpp/zxing-core/core/src/GridSampler.h +59 -0
  68. package/cpp/zxing-core/core/src/HRI.cpp +343 -0
  69. package/cpp/zxing-core/core/src/HRI.h +16 -0
  70. package/cpp/zxing-core/core/src/HybridBinarizer.cpp +315 -0
  71. package/cpp/zxing-core/core/src/HybridBinarizer.h +40 -0
  72. package/cpp/zxing-core/core/src/ImageView.h +168 -0
  73. package/cpp/zxing-core/core/src/JSON.cpp +154 -0
  74. package/cpp/zxing-core/core/src/JSON.h +66 -0
  75. package/cpp/zxing-core/core/src/LocalGrid.cpp +242 -0
  76. package/cpp/zxing-core/core/src/LocalGrid.h +91 -0
  77. package/cpp/zxing-core/core/src/LogMatrix.h +105 -0
  78. package/cpp/zxing-core/core/src/Matrix.h +125 -0
  79. package/cpp/zxing-core/core/src/MultiFormatReader.cpp +107 -0
  80. package/cpp/zxing-core/core/src/MultiFormatReader.h +34 -0
  81. package/cpp/zxing-core/core/src/MultiFormatWriter.cpp +111 -0
  82. package/cpp/zxing-core/core/src/MultiFormatWriter.h +62 -0
  83. package/cpp/zxing-core/core/src/Pattern.h +472 -0
  84. package/cpp/zxing-core/core/src/PerspectiveTransform.cpp +81 -0
  85. package/cpp/zxing-core/core/src/PerspectiveTransform.h +47 -0
  86. package/cpp/zxing-core/core/src/Point.h +185 -0
  87. package/cpp/zxing-core/core/src/Quadrilateral.h +215 -0
  88. package/cpp/zxing-core/core/src/Range.h +112 -0
  89. package/cpp/zxing-core/core/src/ReadBarcode.cpp +335 -0
  90. package/cpp/zxing-core/core/src/ReadBarcode.h +33 -0
  91. package/cpp/zxing-core/core/src/Reader.h +32 -0
  92. package/cpp/zxing-core/core/src/ReaderOptions.h +210 -0
  93. package/cpp/zxing-core/core/src/ReedSolomon.cpp +100 -0
  94. package/cpp/zxing-core/core/src/ReedSolomon.h +66 -0
  95. package/cpp/zxing-core/core/src/RegressionLine.h +161 -0
  96. package/cpp/zxing-core/core/src/ResultPoint.cpp +20 -0
  97. package/cpp/zxing-core/core/src/ResultPoint.h +35 -0
  98. package/cpp/zxing-core/core/src/StdGenerator.h +121 -0
  99. package/cpp/zxing-core/core/src/StdPrint.h +38 -0
  100. package/cpp/zxing-core/core/src/StdScope.h +55 -0
  101. package/cpp/zxing-core/core/src/StructuredAppend.h +19 -0
  102. package/cpp/zxing-core/core/src/SymbologyIdentifier.h +29 -0
  103. package/cpp/zxing-core/core/src/TextDecoder.cpp +59 -0
  104. package/cpp/zxing-core/core/src/TextDecoder.h +23 -0
  105. package/cpp/zxing-core/core/src/TextEncoder.cpp +75 -0
  106. package/cpp/zxing-core/core/src/TextEncoder.h +31 -0
  107. package/cpp/zxing-core/core/src/ThresholdBinarizer.h +58 -0
  108. package/cpp/zxing-core/core/src/TritMatrix.h +29 -0
  109. package/cpp/zxing-core/core/src/Utf.cpp +276 -0
  110. package/cpp/zxing-core/core/src/Utf.h +26 -0
  111. package/cpp/zxing-core/core/src/WhiteRectDetector.cpp +276 -0
  112. package/cpp/zxing-core/core/src/WhiteRectDetector.h +36 -0
  113. package/cpp/zxing-core/core/src/WriteBarcode.cpp +213 -0
  114. package/cpp/zxing-core/core/src/WriteBarcode.h +72 -0
  115. package/cpp/zxing-core/core/src/ZXAlgorithms.h +353 -0
  116. package/cpp/zxing-core/core/src/ZXConfig.h +17 -0
  117. package/cpp/zxing-core/core/src/ZXTestSupport.h +9 -0
  118. package/cpp/zxing-core/core/src/ZXVersion.h +14 -0
  119. package/cpp/zxing-core/core/src/ZXingC.cpp +460 -0
  120. package/cpp/zxing-core/core/src/ZXingC.h +296 -0
  121. package/cpp/zxing-core/core/src/ZXingCpp.cpp +18 -0
  122. package/cpp/zxing-core/core/src/ZXingCpp.h +76 -0
  123. package/cpp/zxing-core/core/src/ZXingQt.h +606 -0
  124. package/cpp/zxing-core/core/src/aztec/AZDecoder.cpp +376 -0
  125. package/cpp/zxing-core/core/src/aztec/AZDecoder.h +20 -0
  126. package/cpp/zxing-core/core/src/aztec/AZDetector.cpp +508 -0
  127. package/cpp/zxing-core/core/src/aztec/AZDetector.h +25 -0
  128. package/cpp/zxing-core/core/src/aztec/AZDetectorResult.h +51 -0
  129. package/cpp/zxing-core/core/src/aztec/AZEncoder.cpp +318 -0
  130. package/cpp/zxing-core/core/src/aztec/AZEncoder.h +44 -0
  131. package/cpp/zxing-core/core/src/aztec/AZEncodingState.h +40 -0
  132. package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.cpp +377 -0
  133. package/cpp/zxing-core/core/src/aztec/AZHighLevelEncoder.h +36 -0
  134. package/cpp/zxing-core/core/src/aztec/AZReader.cpp +45 -0
  135. package/cpp/zxing-core/core/src/aztec/AZReader.h +21 -0
  136. package/cpp/zxing-core/core/src/aztec/AZToken.cpp +44 -0
  137. package/cpp/zxing-core/core/src/aztec/AZToken.h +39 -0
  138. package/cpp/zxing-core/core/src/aztec/AZWriter.cpp +38 -0
  139. package/cpp/zxing-core/core/src/aztec/AZWriter.h +55 -0
  140. package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.cpp +194 -0
  141. package/cpp/zxing-core/core/src/datamatrix/DMBitLayout.h +21 -0
  142. package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.cpp +63 -0
  143. package/cpp/zxing-core/core/src/datamatrix/DMDataBlock.h +41 -0
  144. package/cpp/zxing-core/core/src/datamatrix/DMDecoder.cpp +457 -0
  145. package/cpp/zxing-core/core/src/datamatrix/DMDecoder.h +19 -0
  146. package/cpp/zxing-core/core/src/datamatrix/DMDetector.cpp +1230 -0
  147. package/cpp/zxing-core/core/src/datamatrix/DMDetector.h +23 -0
  148. package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.cpp +137 -0
  149. package/cpp/zxing-core/core/src/datamatrix/DMECEncoder.h +26 -0
  150. package/cpp/zxing-core/core/src/datamatrix/DMEncoderContext.h +128 -0
  151. package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.cpp +919 -0
  152. package/cpp/zxing-core/core/src/datamatrix/DMHighLevelEncoder.h +29 -0
  153. package/cpp/zxing-core/core/src/datamatrix/DMReader.cpp +40 -0
  154. package/cpp/zxing-core/core/src/datamatrix/DMReader.h +21 -0
  155. package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.cpp +141 -0
  156. package/cpp/zxing-core/core/src/datamatrix/DMSymbolInfo.h +78 -0
  157. package/cpp/zxing-core/core/src/datamatrix/DMSymbolShape.h +17 -0
  158. package/cpp/zxing-core/core/src/datamatrix/DMVersion.cpp +82 -0
  159. package/cpp/zxing-core/core/src/datamatrix/DMVersion.h +76 -0
  160. package/cpp/zxing-core/core/src/datamatrix/DMWriter.cpp +114 -0
  161. package/cpp/zxing-core/core/src/datamatrix/DMWriter.h +62 -0
  162. package/cpp/zxing-core/core/src/librscpp/README.md +65 -0
  163. package/cpp/zxing-core/core/src/librscpp/decode.h +258 -0
  164. package/cpp/zxing-core/core/src/librscpp/encode.h +124 -0
  165. package/cpp/zxing-core/core/src/librscpp/field.h +158 -0
  166. package/cpp/zxing-core/core/src/librscpp/poly.h +194 -0
  167. package/cpp/zxing-core/core/src/libzint/2of5inter.c +1 -0
  168. package/cpp/zxing-core/core/src/libzint/2of5inter_based.c +1 -0
  169. package/cpp/zxing-core/core/src/libzint/aztec.c +1 -0
  170. package/cpp/zxing-core/core/src/libzint/aztec.h +1 -0
  171. package/cpp/zxing-core/core/src/libzint/big5.h +1 -0
  172. package/cpp/zxing-core/core/src/libzint/codabar.c +1 -0
  173. package/cpp/zxing-core/core/src/libzint/code.c +1 -0
  174. package/cpp/zxing-core/core/src/libzint/code128.c +1 -0
  175. package/cpp/zxing-core/core/src/libzint/code128.h +1 -0
  176. package/cpp/zxing-core/core/src/libzint/common.c +1 -0
  177. package/cpp/zxing-core/core/src/libzint/common.h +1 -0
  178. package/cpp/zxing-core/core/src/libzint/dmatrix.c +1 -0
  179. package/cpp/zxing-core/core/src/libzint/dmatrix.h +1 -0
  180. package/cpp/zxing-core/core/src/libzint/dxfilmedge.c +1 -0
  181. package/cpp/zxing-core/core/src/libzint/eci.c +1 -0
  182. package/cpp/zxing-core/core/src/libzint/eci.h +1 -0
  183. package/cpp/zxing-core/core/src/libzint/eci_sb.h +1 -0
  184. package/cpp/zxing-core/core/src/libzint/filemem.c +1 -0
  185. package/cpp/zxing-core/core/src/libzint/filemem.h +1 -0
  186. package/cpp/zxing-core/core/src/libzint/fonts/normal_woff2.h +1 -0
  187. package/cpp/zxing-core/core/src/libzint/fonts/upcean_woff2.h +1 -0
  188. package/cpp/zxing-core/core/src/libzint/gb18030.h +1 -0
  189. package/cpp/zxing-core/core/src/libzint/gb2312.h +1 -0
  190. package/cpp/zxing-core/core/src/libzint/gbk.h +1 -0
  191. package/cpp/zxing-core/core/src/libzint/general_field.c +1 -0
  192. package/cpp/zxing-core/core/src/libzint/general_field.h +1 -0
  193. package/cpp/zxing-core/core/src/libzint/gs1.c +1 -0
  194. package/cpp/zxing-core/core/src/libzint/gs1.h +1 -0
  195. package/cpp/zxing-core/core/src/libzint/gs1_lint.h +1 -0
  196. package/cpp/zxing-core/core/src/libzint/iso3166.h +1 -0
  197. package/cpp/zxing-core/core/src/libzint/iso4217.h +1 -0
  198. package/cpp/zxing-core/core/src/libzint/ksx1001.h +1 -0
  199. package/cpp/zxing-core/core/src/libzint/large.c +1 -0
  200. package/cpp/zxing-core/core/src/libzint/large.h +1 -0
  201. package/cpp/zxing-core/core/src/libzint/library.c +1 -0
  202. package/cpp/zxing-core/core/src/libzint/maxicode.c +1 -0
  203. package/cpp/zxing-core/core/src/libzint/maxicode.h +1 -0
  204. package/cpp/zxing-core/core/src/libzint/medical.c +1 -0
  205. package/cpp/zxing-core/core/src/libzint/output.c +1 -0
  206. package/cpp/zxing-core/core/src/libzint/output.h +1 -0
  207. package/cpp/zxing-core/core/src/libzint/pdf417.c +1 -0
  208. package/cpp/zxing-core/core/src/libzint/pdf417.h +1 -0
  209. package/cpp/zxing-core/core/src/libzint/pdf417_tabs.h +1 -0
  210. package/cpp/zxing-core/core/src/libzint/qr.c +1 -0
  211. package/cpp/zxing-core/core/src/libzint/qr.h +1 -0
  212. package/cpp/zxing-core/core/src/libzint/raster.c +1 -0
  213. package/cpp/zxing-core/core/src/libzint/raster_font.h +1 -0
  214. package/cpp/zxing-core/core/src/libzint/reedsol.c +1 -0
  215. package/cpp/zxing-core/core/src/libzint/reedsol.h +1 -0
  216. package/cpp/zxing-core/core/src/libzint/reedsol_logs.h +1 -0
  217. package/cpp/zxing-core/core/src/libzint/rss.c +1 -0
  218. package/cpp/zxing-core/core/src/libzint/rss.h +1 -0
  219. package/cpp/zxing-core/core/src/libzint/sjis.h +1 -0
  220. package/cpp/zxing-core/core/src/libzint/stubs.c +137 -0
  221. package/cpp/zxing-core/core/src/libzint/svg.c +1 -0
  222. package/cpp/zxing-core/core/src/libzint/telepen.c +1 -0
  223. package/cpp/zxing-core/core/src/libzint/upcean.c +1 -0
  224. package/cpp/zxing-core/core/src/libzint/vector.c +1 -0
  225. package/cpp/zxing-core/core/src/libzint/zfiletypes.h +1 -0
  226. package/cpp/zxing-core/core/src/libzint/zint.h +1 -0
  227. package/cpp/zxing-core/core/src/libzint/zintconfig.h +1 -0
  228. package/cpp/zxing-core/core/src/libzueci/README.md +11 -0
  229. package/cpp/zxing-core/core/src/libzueci/zueci.c +1718 -0
  230. package/cpp/zxing-core/core/src/libzueci/zueci.h +179 -0
  231. package/cpp/zxing-core/core/src/libzueci/zueci_big5.h +3884 -0
  232. package/cpp/zxing-core/core/src/libzueci/zueci_common.h +31 -0
  233. package/cpp/zxing-core/core/src/libzueci/zueci_gb18030.h +264 -0
  234. package/cpp/zxing-core/core/src/libzueci/zueci_gb2312.h +2381 -0
  235. package/cpp/zxing-core/core/src/libzueci/zueci_gbk.h +4047 -0
  236. package/cpp/zxing-core/core/src/libzueci/zueci_ksx1001.h +2932 -0
  237. package/cpp/zxing-core/core/src/libzueci/zueci_sb.h +1112 -0
  238. package/cpp/zxing-core/core/src/libzueci/zueci_sjis.h +2286 -0
  239. package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.cpp +68 -0
  240. package/cpp/zxing-core/core/src/maxicode/MCBitMatrixParser.h +30 -0
  241. package/cpp/zxing-core/core/src/maxicode/MCDecoder.cpp +329 -0
  242. package/cpp/zxing-core/core/src/maxicode/MCDecoder.h +19 -0
  243. package/cpp/zxing-core/core/src/maxicode/MCReader.cpp +65 -0
  244. package/cpp/zxing-core/core/src/maxicode/MCReader.h +21 -0
  245. package/cpp/zxing-core/core/src/oned/ODCodabarReader.cpp +102 -0
  246. package/cpp/zxing-core/core/src/oned/ODCodabarReader.h +21 -0
  247. package/cpp/zxing-core/core/src/oned/ODCodabarWriter.cpp +136 -0
  248. package/cpp/zxing-core/core/src/oned/ODCodabarWriter.h +34 -0
  249. package/cpp/zxing-core/core/src/oned/ODCode128Patterns.h +130 -0
  250. package/cpp/zxing-core/core/src/oned/ODCode128Reader.cpp +236 -0
  251. package/cpp/zxing-core/core/src/oned/ODCode128Reader.h +21 -0
  252. package/cpp/zxing-core/core/src/oned/ODCode128Writer.cpp +261 -0
  253. package/cpp/zxing-core/core/src/oned/ODCode128Writer.h +34 -0
  254. package/cpp/zxing-core/core/src/oned/ODCode39Reader.cpp +213 -0
  255. package/cpp/zxing-core/core/src/oned/ODCode39Reader.h +26 -0
  256. package/cpp/zxing-core/core/src/oned/ODCode39Writer.cpp +176 -0
  257. package/cpp/zxing-core/core/src/oned/ODCode39Writer.h +34 -0
  258. package/cpp/zxing-core/core/src/oned/ODCode93Patterns.h +80 -0
  259. package/cpp/zxing-core/core/src/oned/ODCode93Reader.cpp +112 -0
  260. package/cpp/zxing-core/core/src/oned/ODCode93Reader.h +21 -0
  261. package/cpp/zxing-core/core/src/oned/ODCode93Writer.cpp +192 -0
  262. package/cpp/zxing-core/core/src/oned/ODCode93Writer.h +32 -0
  263. package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.cpp +246 -0
  264. package/cpp/zxing-core/core/src/oned/ODDXFilmEdgeReader.h +26 -0
  265. package/cpp/zxing-core/core/src/oned/ODDataBarCommon.cpp +172 -0
  266. package/cpp/zxing-core/core/src/oned/ODDataBarCommon.h +204 -0
  267. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.cpp +253 -0
  268. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedBitDecoder.h +19 -0
  269. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.cpp +383 -0
  270. package/cpp/zxing-core/core/src/oned/ODDataBarExpandedReader.h +25 -0
  271. package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.cpp +163 -0
  272. package/cpp/zxing-core/core/src/oned/ODDataBarLimitedReader.h +23 -0
  273. package/cpp/zxing-core/core/src/oned/ODDataBarReader.cpp +240 -0
  274. package/cpp/zxing-core/core/src/oned/ODDataBarReader.h +25 -0
  275. package/cpp/zxing-core/core/src/oned/ODEAN13Writer.cpp +62 -0
  276. package/cpp/zxing-core/core/src/oned/ODEAN13Writer.h +34 -0
  277. package/cpp/zxing-core/core/src/oned/ODEAN8Writer.cpp +51 -0
  278. package/cpp/zxing-core/core/src/oned/ODEAN8Writer.h +34 -0
  279. package/cpp/zxing-core/core/src/oned/ODITFReader.cpp +97 -0
  280. package/cpp/zxing-core/core/src/oned/ODITFReader.h +33 -0
  281. package/cpp/zxing-core/core/src/oned/ODITFWriter.cpp +78 -0
  282. package/cpp/zxing-core/core/src/oned/ODITFWriter.h +34 -0
  283. package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.cpp +323 -0
  284. package/cpp/zxing-core/core/src/oned/ODMultiUPCEANReader.h +32 -0
  285. package/cpp/zxing-core/core/src/oned/ODReader.cpp +259 -0
  286. package/cpp/zxing-core/core/src/oned/ODReader.h +35 -0
  287. package/cpp/zxing-core/core/src/oned/ODRowReader.h +222 -0
  288. package/cpp/zxing-core/core/src/oned/ODTelepenReader.cpp +199 -0
  289. package/cpp/zxing-core/core/src/oned/ODTelepenReader.h +25 -0
  290. package/cpp/zxing-core/core/src/oned/ODUPCAWriter.cpp +33 -0
  291. package/cpp/zxing-core/core/src/oned/ODUPCAWriter.h +34 -0
  292. package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.cpp +80 -0
  293. package/cpp/zxing-core/core/src/oned/ODUPCEANCommon.h +129 -0
  294. package/cpp/zxing-core/core/src/oned/ODUPCEWriter.cpp +56 -0
  295. package/cpp/zxing-core/core/src/oned/ODUPCEWriter.h +34 -0
  296. package/cpp/zxing-core/core/src/oned/ODWriterHelper.cpp +39 -0
  297. package/cpp/zxing-core/core/src/oned/ODWriterHelper.h +48 -0
  298. package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.cpp +796 -0
  299. package/cpp/zxing-core/core/src/pdf417/MicroPDFReader.h +23 -0
  300. package/cpp/zxing-core/core/src/pdf417/PDF417.cpp +85 -0
  301. package/cpp/zxing-core/core/src/pdf417/PDF417.h +81 -0
  302. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeMetadata.h +53 -0
  303. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.cpp +48 -0
  304. package/cpp/zxing-core/core/src/pdf417/PDFBarcodeValue.h +38 -0
  305. package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.cpp +116 -0
  306. package/cpp/zxing-core/core/src/pdf417/PDFBoundingBox.h +75 -0
  307. package/cpp/zxing-core/core/src/pdf417/PDFCodeword.h +71 -0
  308. package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.cpp +588 -0
  309. package/cpp/zxing-core/core/src/pdf417/PDFCodewordDecoder.h +41 -0
  310. package/cpp/zxing-core/core/src/pdf417/PDFCompaction.h +20 -0
  311. package/cpp/zxing-core/core/src/pdf417/PDFCustomData.h +32 -0
  312. package/cpp/zxing-core/core/src/pdf417/PDFDecoder.cpp +725 -0
  313. package/cpp/zxing-core/core/src/pdf417/PDFDecoder.h +20 -0
  314. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.cpp +247 -0
  315. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResult.h +74 -0
  316. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.cpp +321 -0
  317. package/cpp/zxing-core/core/src/pdf417/PDFDetectionResultColumn.h +83 -0
  318. package/cpp/zxing-core/core/src/pdf417/PDFDetector.cpp +371 -0
  319. package/cpp/zxing-core/core/src/pdf417/PDFDetector.h +45 -0
  320. package/cpp/zxing-core/core/src/pdf417/PDFEncoder.cpp +570 -0
  321. package/cpp/zxing-core/core/src/pdf417/PDFEncoder.h +182 -0
  322. package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.cpp +570 -0
  323. package/cpp/zxing-core/core/src/pdf417/PDFHighLevelEncoder.h +32 -0
  324. package/cpp/zxing-core/core/src/pdf417/PDFReader.cpp +333 -0
  325. package/cpp/zxing-core/core/src/pdf417/PDFReader.h +28 -0
  326. package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.cpp +559 -0
  327. package/cpp/zxing-core/core/src/pdf417/PDFScanningDecoder.h +41 -0
  328. package/cpp/zxing-core/core/src/pdf417/PDFWriter.cpp +170 -0
  329. package/cpp/zxing-core/core/src/pdf417/PDFWriter.h +74 -0
  330. package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.cpp +623 -0
  331. package/cpp/zxing-core/core/src/pdf417/ZXBigInteger.h +81 -0
  332. package/cpp/zxing-core/core/src/pdf417/ZXNullable.h +105 -0
  333. package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.cpp +294 -0
  334. package/cpp/zxing-core/core/src/qrcode/QRBitMatrixParser.h +41 -0
  335. package/cpp/zxing-core/core/src/qrcode/QRCodecMode.cpp +95 -0
  336. package/cpp/zxing-core/core/src/qrcode/QRCodecMode.h +59 -0
  337. package/cpp/zxing-core/core/src/qrcode/QRDataBlock.cpp +93 -0
  338. package/cpp/zxing-core/core/src/qrcode/QRDataBlock.h +52 -0
  339. package/cpp/zxing-core/core/src/qrcode/QRDataMask.h +50 -0
  340. package/cpp/zxing-core/core/src/qrcode/QRDecoder.cpp +359 -0
  341. package/cpp/zxing-core/core/src/qrcode/QRDecoder.h +19 -0
  342. package/cpp/zxing-core/core/src/qrcode/QRDetector.cpp +920 -0
  343. package/cpp/zxing-core/core/src/qrcode/QRDetector.h +45 -0
  344. package/cpp/zxing-core/core/src/qrcode/QRECB.h +52 -0
  345. package/cpp/zxing-core/core/src/qrcode/QREncodeResult.h +33 -0
  346. package/cpp/zxing-core/core/src/qrcode/QREncoder.cpp +568 -0
  347. package/cpp/zxing-core/core/src/qrcode/QREncoder.h +21 -0
  348. package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.cpp +51 -0
  349. package/cpp/zxing-core/core/src/qrcode/QRErrorCorrectionLevel.h +39 -0
  350. package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.cpp +160 -0
  351. package/cpp/zxing-core/core/src/qrcode/QRFormatInformation.h +61 -0
  352. package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.cpp +156 -0
  353. package/cpp/zxing-core/core/src/qrcode/QRMaskUtil.h +15 -0
  354. package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.cpp +318 -0
  355. package/cpp/zxing-core/core/src/qrcode/QRMatrixUtil.h +25 -0
  356. package/cpp/zxing-core/core/src/qrcode/QRReader.cpp +149 -0
  357. package/cpp/zxing-core/core/src/qrcode/QRReader.h +21 -0
  358. package/cpp/zxing-core/core/src/qrcode/QRVersion.cpp +754 -0
  359. package/cpp/zxing-core/core/src/qrcode/QRVersion.h +127 -0
  360. package/cpp/zxing-core/core/src/qrcode/QRWriter.cpp +51 -0
  361. package/cpp/zxing-core/core/src/qrcode/QRWriter.h +74 -0
  362. package/cpp/zxing-core/core/version.rc.in +34 -0
  363. package/cpp/zxing-core/core/zxing.pc.in +8 -0
  364. package/cpp/zxing-core/wrappers/ios/README.md +25 -0
  365. package/cpp/zxing-core/wrappers/ios/Sources/Wrapper/Version.h +29 -0
  366. package/cpp/zxing-core/zxing-cpp.podspec +45 -0
  367. package/lib/factory.d.ts +10 -0
  368. package/lib/factory.js +12 -0
  369. package/lib/index.d.ts +9 -0
  370. package/lib/index.js +9 -0
  371. package/lib/specs/Barcode.nitro.d.ts +63 -0
  372. package/lib/specs/Barcode.nitro.js +1 -0
  373. package/lib/specs/BarcodeFormat.d.ts +11 -0
  374. package/lib/specs/BarcodeFormat.js +1 -0
  375. package/lib/specs/BarcodeScanner.nitro.d.ts +89 -0
  376. package/lib/specs/BarcodeScanner.nitro.js +1 -0
  377. package/lib/specs/BarcodeScannerFactory.nitro.d.ts +26 -0
  378. package/lib/specs/BarcodeScannerFactory.nitro.js +1 -0
  379. package/lib/specs/BarcodeValueType.d.ts +9 -0
  380. package/lib/specs/BarcodeValueType.js +1 -0
  381. package/lib/specs/Point.d.ts +14 -0
  382. package/lib/specs/Point.js +1 -0
  383. package/lib/specs/Rect.d.ts +22 -0
  384. package/lib/specs/Rect.js +1 -0
  385. package/lib/useBarcodeScanner.d.ts +23 -0
  386. package/lib/useBarcodeScanner.js +25 -0
  387. package/nitro.json +20 -0
  388. package/nitrogen/generated/.gitattributes +1 -0
  389. package/nitrogen/generated/android/VisionCameraZxing+autolinking.cmake +83 -0
  390. package/nitrogen/generated/android/VisionCameraZxing+autolinking.gradle +27 -0
  391. package/nitrogen/generated/android/VisionCameraZxingOnLoad.cpp +49 -0
  392. package/nitrogen/generated/android/VisionCameraZxingOnLoad.hpp +34 -0
  393. package/nitrogen/generated/android/kotlin/com/margelo/nitro/camera/zxing/VisionCameraZxingOnLoad.kt +35 -0
  394. package/nitrogen/generated/ios/VisionCameraZxing+autolinking.rb +62 -0
  395. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.cpp +17 -0
  396. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Bridge.hpp +27 -0
  397. package/nitrogen/generated/ios/VisionCameraZxing-Swift-Cxx-Umbrella.hpp +38 -0
  398. package/nitrogen/generated/ios/VisionCameraZxingAutolinking.mm +35 -0
  399. package/nitrogen/generated/ios/VisionCameraZxingAutolinking.swift +16 -0
  400. package/nitrogen/generated/shared/c++/BarcodeFormat.hpp +124 -0
  401. package/nitrogen/generated/shared/c++/BarcodeScannerOptions.hpp +85 -0
  402. package/nitrogen/generated/shared/c++/BarcodeValueType.hpp +120 -0
  403. package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.cpp +23 -0
  404. package/nitrogen/generated/shared/c++/HybridBarcodeScannerSpec.hpp +74 -0
  405. package/nitrogen/generated/shared/c++/HybridBarcodeSpec.cpp +27 -0
  406. package/nitrogen/generated/shared/c++/HybridBarcodeSpec.hpp +82 -0
  407. package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.cpp +21 -0
  408. package/nitrogen/generated/shared/c++/HybridZXingBarcodeScannerFactorySpec.hpp +67 -0
  409. package/nitrogen/generated/shared/c++/Point.hpp +87 -0
  410. package/nitrogen/generated/shared/c++/Rect.hpp +95 -0
  411. package/nitrogen/generated/shared/c++/TargetBarcodeFormat.hpp +124 -0
  412. package/package.json +108 -0
  413. package/react-native.config.js +16 -0
  414. package/src/factory.ts +26 -0
  415. package/src/index.ts +9 -0
  416. package/src/specs/Barcode.nitro.ts +70 -0
  417. package/src/specs/BarcodeFormat.ts +31 -0
  418. package/src/specs/BarcodeScanner.nitro.ts +91 -0
  419. package/src/specs/BarcodeScannerFactory.nitro.ts +27 -0
  420. package/src/specs/BarcodeValueType.ts +25 -0
  421. package/src/specs/Point.ts +14 -0
  422. package/src/specs/Rect.ts +22 -0
  423. package/src/useBarcodeScanner.ts +36 -0
@@ -0,0 +1,623 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ */
4
+ // SPDX-License-Identifier: Apache-2.0
5
+
6
+ #include "ZXBigInteger.h"
7
+
8
+ #include "ZXAlgorithms.h"
9
+
10
+ #include <algorithm>
11
+ #include <cassert>
12
+ #include <cstdint>
13
+ #include <utility>
14
+
15
+ namespace ZXing {
16
+
17
+ using Block = BigInteger::Block;
18
+ using Magnitude = std::vector<Block>;
19
+
20
+ constexpr size_t NB_BITS = 8 * sizeof(Block);
21
+
22
+ static void AddMag(const Magnitude& a, const Magnitude& b, Magnitude& c)
23
+ {
24
+ // a2 points to the longer input, b2 points to the shorter
25
+ const Magnitude& a2 = a.size() >= b.size() ? a : b;
26
+ const Magnitude& b2 = a.size() >= b.size() ? b : a;
27
+
28
+ // need to store the old sizes of a and b, in case c aliases either of them
29
+ const size_t a2Size = a2.size(), b2Size = b2.size();
30
+
31
+ c.resize(a2Size + 1);
32
+ size_t i = 0;
33
+ bool carryIn = false;
34
+ for (; i < b2Size; ++i) {
35
+ auto temp = a2[i] + b2[i];
36
+ bool carryOut = (temp < a2[i]);
37
+ if (carryIn) {
38
+ ++temp;
39
+ carryOut |= (temp == 0);
40
+ }
41
+ c[i] = temp;
42
+ carryIn = carryOut;
43
+ }
44
+ // If there is a carry left over, increase blocks until one does not roll over.
45
+ for (; i < a2Size && carryIn; ++i) {
46
+ auto temp = a2[i] + 1;
47
+ carryIn = (temp == 0);
48
+ c[i] = temp;
49
+ }
50
+ // If the carry was resolved but the larger number still has blocks, copy them over.
51
+ for (; i < a2Size; ++i) {
52
+ c[i] = a2[i];
53
+ }
54
+ // Set the extra block if there's still a carry, decrease length otherwise
55
+ if (carryIn) {
56
+ c[i] = 1;
57
+ }
58
+ else {
59
+ c.pop_back();
60
+ }
61
+ }
62
+
63
+ // Note that we DO NOT support the case where b is greater than a.
64
+ static void SubMag(const Magnitude& a, const Magnitude& b, Magnitude& c)
65
+ {
66
+ assert(a.size() >= b.size());
67
+
68
+ // need to store the old sizes of a and b, in case c aliases either of them
69
+ const size_t aSize = a.size(), bSize = b.size();
70
+
71
+ c.resize(aSize);
72
+ size_t i = 0;
73
+ bool borrowIn = false;
74
+ for (; i < bSize; ++i) {
75
+ auto temp = a[i] - b[i];
76
+ // If a reverse rollover occurred, the result is greater than the block from a.
77
+ bool borrowOut = (temp > a[i]);
78
+ if (borrowIn) {
79
+ borrowOut |= (temp == 0);
80
+ temp--;
81
+ }
82
+ c[i] = temp;
83
+ borrowIn = borrowOut;
84
+ }
85
+ // If there is a borrow left over, decrease blocks until one does not reverse rollover.
86
+ for (; i < aSize && borrowIn; ++i) {
87
+ borrowIn = (a[i] == 0);
88
+ c[i] = a[i] - 1;
89
+ }
90
+ //if (borrowIn) {
91
+ //throw error;
92
+ //}
93
+ // Copy over the rest of the blocks
94
+ for (; i < aSize; ++i) {
95
+ c[i] = a[i];
96
+ }
97
+
98
+ // Zap leading zeros
99
+ while (!c.empty() && c.back() == 0) {
100
+ c.pop_back();
101
+ }
102
+ }
103
+
104
+ static Block GetShiftedBlock(const Magnitude& num, size_t x, size_t y)
105
+ {
106
+ Block part1 = (x == 0 || y == 0) ? Block(0) : (num[x - 1] >> (NB_BITS - y));
107
+ Block part2 = (x == num.size()) ? Block(0) : (num[x] << y);
108
+ return part1 | part2;
109
+ }
110
+
111
+ static void MulMag(const Magnitude& a, const Magnitude& b, Magnitude& c)
112
+ {
113
+ // If either a or b is zero, set to zero.
114
+ if (a.empty() || b.empty()) {
115
+ c.clear();
116
+ return;
117
+ }
118
+
119
+ Magnitude tmp;
120
+ Magnitude& r = &c == &a || &c == &b ? tmp : c;
121
+
122
+ /*
123
+ * Overall method:
124
+ *
125
+ * Set this = 0.
126
+ * For each 1-bit of `a' (say the `i2'th bit of block `i'):
127
+ * Add `b << (i blocks and i2 bits)' to *this.
128
+ */
129
+
130
+ r.clear();
131
+ r.resize(a.size() + b.size(), 0);
132
+
133
+ // For each block of the first number...
134
+ for (size_t i = 0; i < a.size(); ++i) {
135
+ // For each 1-bit of that block...
136
+ for (size_t i2 = 0; i2 < NB_BITS; ++i2) {
137
+ if ((a[i] & (Block(1) << i2)) == 0)
138
+ continue;
139
+ /*
140
+ * Add b to this, shifted left i blocks and i2 bits.
141
+ * j is the index in b, and k = i + j is the index in this.
142
+ *
143
+ * `getShiftedBlock', a short inline function defined above,
144
+ * is now used for the bit handling. It replaces the more
145
+ * complex `bHigh' code, in which each run of the loop dealt
146
+ * immediately with the low bits and saved the high bits to
147
+ * be picked up next time. The last run of the loop used to
148
+ * leave leftover high bits, which were handled separately.
149
+ * Instead, this loop runs an additional time with j == b.len.
150
+ * These changes were made on 2005.01.11.
151
+ */
152
+ size_t k = i;
153
+ bool carryIn = false;
154
+ for (size_t j = 0; j <= b.size(); ++j, ++k) {
155
+ /*
156
+ * The body of this loop is very similar to the body of the first loop
157
+ * in `add', except that this loop does a `+=' instead of a `+'.
158
+ */
159
+ auto temp = r[k] + GetShiftedBlock(b, j, i2);
160
+ auto carryOut = (temp < r[k]);
161
+ if (carryIn) {
162
+ temp++;
163
+ carryOut |= (temp == 0);
164
+ }
165
+ r[k] = temp;
166
+ carryIn = carryOut;
167
+ }
168
+ // No more extra iteration to deal with `bHigh'.
169
+ // Roll-over a carry as necessary.
170
+ for (; carryIn; k++) {
171
+ r[k]++;
172
+ carryIn = (r[k] == 0);
173
+ }
174
+ }
175
+ }
176
+ // Zap possible leading zero
177
+ if (r.back() == 0) {
178
+ r.pop_back();
179
+ }
180
+
181
+ if (&c != &r)
182
+ c = std::move(r);
183
+ }
184
+
185
+ /*
186
+ * DIVISION WITH REMAINDER
187
+ * This monstrous function mods *this by the given divisor b while storing the
188
+ * quotient in the given object q; at the end, *this contains the remainder.
189
+ * The seemingly bizarre pattern of inputs and outputs was chosen so that the
190
+ * function copies as little as possible (since it is implemented by repeated
191
+ * subtraction of multiples of b from *this).
192
+ *
193
+ * "modWithQuotient" might be a better name for this function, but I would
194
+ * rather not change the name now.
195
+ */
196
+ static void DivideWithRemainder(const Magnitude& a, const Magnitude& b, Magnitude& qq, Magnitude& rr)
197
+ {
198
+ /* Defending against aliased calls is more complex than usual because we
199
+ * are writing to both r and q.
200
+ *
201
+ * It would be silly to try to write quotient and remainder to the
202
+ * same variable. Rule that out right away. */
203
+ assert(&rr != &qq);
204
+
205
+ Magnitude tmp, tmp2;
206
+ Magnitude& q = &qq == &a || &qq == &b ? tmp : qq;
207
+ Magnitude& r = &rr == &b ? tmp2 : rr;
208
+
209
+ /*
210
+ * Knuth's definition of mod (which this function uses) is somewhat
211
+ * different from the C++ definition of % in case of division by 0.
212
+ *
213
+ * We let a / 0 == 0 (it doesn't matter much) and a % 0 == a, no
214
+ * exceptions thrown. This allows us to preserve both Knuth's demand
215
+ * that a mod 0 == a and the useful property that
216
+ * (a / b) * b + (a % b) == a.
217
+ */
218
+ /*
219
+ * If a.len < b.len, then a < b, and we can be sure that b doesn't go into
220
+ * a at all. The quotient is 0 and *this is already the remainder (so leave it alone).
221
+ */
222
+ if (b.empty() || a.size() < b.size()) {
223
+ qq.clear();
224
+ rr = a;
225
+ return;
226
+ }
227
+
228
+ // At this point we know a.len >= b.len > 0. (Whew!)
229
+
230
+ /*
231
+ * Overall method:
232
+ *
233
+ * For each appropriate i and i2, decreasing:
234
+ * Subtract (b << (i blocks and i2 bits)) from *this, storing the
235
+ * result in subtractBuf.
236
+ * If the subtraction succeeds with a nonnegative result:
237
+ * Turn on bit i2 of block i of the quotient q.
238
+ * Copy subtractBuf back into *this.
239
+ * Otherwise bit i2 of block i remains off, and *this is unchanged.
240
+ *
241
+ * Eventually q will contain the entire quotient, and *this will
242
+ * be left with the remainder.
243
+ *
244
+ * subtractBuf[x] corresponds to blk[x], not blk[x+i], since 2005.01.11.
245
+ * But on a single iteration, we don't touch the i lowest blocks of blk
246
+ * (and don't use those of subtractBuf) because these blocks are
247
+ * unaffected by the subtraction: we are subtracting
248
+ * (b << (i blocks and i2 bits)), which ends in at least `i' zero
249
+ * blocks. */
250
+
251
+ /*
252
+ * Make sure we have an extra zero block just past the value.
253
+ *
254
+ * When we attempt a subtraction, we might shift `b' so
255
+ * its first block begins a few bits left of the dividend,
256
+ * and then we'll try to compare these extra bits with
257
+ * a nonexistent block to the left of the dividend. The
258
+ * extra zero block ensures sensible behavior; we need
259
+ * an extra block in `subtractBuf' for exactly the same reason.
260
+ */
261
+ if (&r != &a) {
262
+ r.reserve(a.size() + 1);
263
+ r = a;
264
+ }
265
+ r.push_back(0);
266
+
267
+ Magnitude subtractBuf(r.size());
268
+
269
+ // Set preliminary length for quotient and make room
270
+ q.resize(a.size() - b.size() + 1);
271
+
272
+ // For each possible left-shift of b in blocks...
273
+ size_t i = q.size();
274
+ while (i > 0) {
275
+ i--;
276
+ // For each possible left-shift of b in bits...
277
+ // (Remember, N is the number of bits in a Blk.)
278
+ q[i] = 0;
279
+ size_t i2 = NB_BITS;
280
+ while (i2 > 0) {
281
+ i2--;
282
+ /*
283
+ * Subtract b, shifted left i blocks and i2 bits, from *this,
284
+ * and store the answer in subtractBuf. In the for loop, `k == i + j'.
285
+ *
286
+ * Compare this to the middle section of `multiply'. They
287
+ * are in many ways analogous. See especially the discussion
288
+ * of `getShiftedBlock'.
289
+ */
290
+ size_t k = i;
291
+ bool borrowIn = false;
292
+ for (size_t j = 0; j <= b.size(); ++j, ++k) {
293
+ auto temp = r[k] - GetShiftedBlock(b, j, i2);
294
+ bool borrowOut = (temp > r[k]);
295
+ if (borrowIn) {
296
+ borrowOut |= (temp == 0);
297
+ temp--;
298
+ }
299
+ // Since 2005.01.11, indices of `subtractBuf' directly match those of `blk', so use `k'.
300
+ subtractBuf[k] = temp;
301
+ borrowIn = borrowOut;
302
+ }
303
+ // No more extra iteration to deal with `bHigh'.
304
+ // Roll-over a borrow as necessary.
305
+ for (; k < a.size() && borrowIn; k++) {
306
+ borrowIn = (r[k] == 0);
307
+ subtractBuf[k] = r[k] - 1;
308
+ }
309
+ /*
310
+ * If the subtraction was performed successfully (!borrowIn),
311
+ * set bit i2 in block i of the quotient.
312
+ *
313
+ * Then, copy the portion of subtractBuf filled by the subtraction
314
+ * back to *this. This portion starts with block i and ends--
315
+ * where? Not necessarily at block `i + b.len'! Well, we
316
+ * increased k every time we saved a block into subtractBuf, so
317
+ * the region of subtractBuf we copy is just [i, k).
318
+ */
319
+ if (!borrowIn) {
320
+ q[i] |= (Block(1) << i2);
321
+ while (k > i) {
322
+ k--;
323
+ r[k] = subtractBuf[k];
324
+ }
325
+ }
326
+ }
327
+ }
328
+ // Zap possible leading zero in quotient
329
+ if (q.back() == 0)
330
+ q.pop_back();
331
+
332
+ // Zap any/all leading zeros in remainder
333
+ while (!r.empty() && r.back() == 0) {
334
+ r.pop_back();
335
+ }
336
+
337
+ if (&qq != &q)
338
+ qq = std::move(q);
339
+ if (&rr != &r)
340
+ rr = std::move(r);
341
+ }
342
+
343
+ static int CompareMag(const Magnitude& a, const Magnitude& b)
344
+ {
345
+ // A bigger length implies a bigger number.
346
+ if (a.size() < b.size()) {
347
+ return -1;
348
+ }
349
+ else if (a.size() > b.size()) {
350
+ return 1;
351
+ }
352
+ else {
353
+ // Compare blocks one by one from left to right.
354
+ auto p = std::mismatch(a.rbegin(), a.rend(), b.rbegin());
355
+ if (p.first != a.rend()) {
356
+ return *p.first < *p.second ? -1 : 1; // note: cannot use subtraction here
357
+ }
358
+ return 0;
359
+ }
360
+ }
361
+
362
+ template <typename StrT>
363
+ static bool ParseFromString(const StrT& str, std::vector<Block>& mag, bool& negative)
364
+ {
365
+ auto iter = str.begin();
366
+ auto end = str.end();
367
+ while (iter != end && IsSpace(*iter)) ++iter;
368
+ if (iter != end) {
369
+ mag.clear();
370
+ negative = false;
371
+ if (*iter == '-') {
372
+ negative = true;
373
+ ++iter;
374
+ }
375
+ else if (*iter == '+') {
376
+ ++iter;
377
+ }
378
+
379
+ Magnitude ten{10};
380
+ Magnitude tmp{0};
381
+ for (int c; iter != end && IsDigit(c = *iter); ++iter) {
382
+ tmp[0] = c - '0';
383
+ MulMag(mag, ten, mag);
384
+ AddMag(mag, tmp, mag);
385
+ }
386
+ return !mag.empty();
387
+ }
388
+ return false;
389
+ }
390
+
391
+ bool
392
+ BigInteger::TryParse(const std::string& str, BigInteger& result)
393
+ {
394
+ return ParseFromString(str, result.mag, result.negative);
395
+ }
396
+
397
+ bool
398
+ BigInteger::TryParse(const std::wstring& str, BigInteger& result)
399
+ {
400
+ return ParseFromString(str, result.mag, result.negative);
401
+ }
402
+
403
+ void
404
+ BigInteger::Add(const BigInteger& a, const BigInteger &b, BigInteger& c)
405
+ {
406
+ // If one argument is zero, copy the other.
407
+ if (a.mag.empty()) {
408
+ c = b;
409
+ return;
410
+ }
411
+ if (b.mag.empty()) {
412
+ c = a;
413
+ return;
414
+ }
415
+
416
+ // If the arguments have the same sign, take the
417
+ // common sign and add their magnitudes.
418
+ if (a.negative == b.negative) {
419
+ c.negative = a.negative;
420
+ AddMag(a.mag, b.mag, c.mag);
421
+ }
422
+ else {
423
+ // Otherwise, their magnitudes must be compared.
424
+ int cmp = CompareMag(a.mag, b.mag);
425
+ if (cmp < 0) {
426
+ c.negative = b.negative;
427
+ SubMag(b.mag, a.mag, c.mag);
428
+ }
429
+ else if (cmp > 0) {
430
+ c.negative = a.negative;
431
+ SubMag(a.mag, b.mag, c.mag);
432
+ }
433
+ else {
434
+ c.negative = false;
435
+ c.mag.clear();
436
+ }
437
+ }
438
+ }
439
+
440
+ void
441
+ BigInteger::Subtract(const BigInteger &a, const BigInteger &b, BigInteger& c)
442
+ {
443
+ if (a.mag.empty()) {
444
+ c.negative = !b.negative;
445
+ c.mag = b.mag;
446
+ return;
447
+ }
448
+ if (b.mag.empty()) {
449
+ c = a;
450
+ return;
451
+ }
452
+
453
+ // If their signs differ, take a.sign and add the magnitudes.
454
+ if (a.negative != b.negative) {
455
+ c.negative = a.negative;
456
+ AddMag(a.mag, b.mag, c.mag);
457
+ }
458
+ else {
459
+ int cmp = CompareMag(a.mag, b.mag);
460
+ if (cmp < 0) {
461
+ c.negative = !b.negative;
462
+ SubMag(b.mag, a.mag, c.mag);
463
+ }
464
+ else if (cmp > 0) {
465
+ c.negative = a.negative;
466
+ SubMag(a.mag, b.mag, c.mag);
467
+ }
468
+ else {
469
+ c.negative = false;
470
+ c.mag.clear();
471
+ }
472
+ }
473
+ }
474
+
475
+ void
476
+ BigInteger::Multiply(const BigInteger &a, const BigInteger &b, BigInteger& c)
477
+ {
478
+ if (a.mag.empty() || b.mag.empty()) {
479
+ c.negative = false;
480
+ c.mag.clear();
481
+ return;
482
+ }
483
+ c.negative = a.negative != b.negative;
484
+ MulMag(a.mag, b.mag, c.mag);
485
+ }
486
+
487
+
488
+ /*
489
+ * DIVISION WITH REMAINDER
490
+ * Please read the comments before the definition of
491
+ * `BigUnsigned::divideWithRemainder' in `BigUnsigned.cc' for lots of
492
+ * information you should know before reading this function.
493
+ *
494
+ * Following Knuth, I decree that x / y is to be
495
+ * 0 if y==0 and floor(real-number x / y) if y!=0.
496
+ * Then x % y shall be x - y*(integer x / y).
497
+ *
498
+ * Note that x = y * (x / y) + (x % y) always holds.
499
+ * In addition, (x % y) is from 0 to y - 1 if y > 0,
500
+ * and from -(|y| - 1) to 0 if y < 0. (x % y) = x if y = 0.
501
+ *
502
+ * Examples: (q = a / b, r = a % b)
503
+ * a b q r
504
+ * === === === ===
505
+ * 4 3 1 1
506
+ * -4 3 -2 2
507
+ * 4 -3 -2 -2
508
+ * -4 -3 1 -1
509
+ */
510
+ void
511
+ BigInteger::Divide(const BigInteger &a, const BigInteger &b, BigInteger &quotient, BigInteger& remainder)
512
+ {
513
+ if (b.mag.empty() || a.mag.size() < b.mag.size()) {
514
+ quotient.mag.clear();
515
+ quotient.negative = false;
516
+ remainder = a;
517
+ return;
518
+ }
519
+
520
+ // Do the operands have the same sign?
521
+ if (a.negative == b.negative) {
522
+ // Yes: easy case. Quotient is zero or positive.
523
+ quotient.negative = false;
524
+ DivideWithRemainder(a.mag, b.mag, quotient.mag, remainder.mag);
525
+ }
526
+ else {
527
+ // No: harder case. Quotient is negative.
528
+ quotient.negative = true;
529
+ // Decrease the magnitude of the dividend by one.
530
+ Magnitude one{ 1 };
531
+ Magnitude aa;
532
+ SubMag(a.mag, one, aa);
533
+ /*
534
+ * We tinker with the dividend before and with the
535
+ * quotient and remainder after so that the result
536
+ * comes out right. To see why it works, consider the following
537
+ * list of examples, where A is the magnitude-decreased
538
+ * a, Q and R are the results of BigUnsigned division
539
+ * with remainder on A and |b|, and q and r are the
540
+ * final results we want:
541
+ *
542
+ * a A b Q R q r
543
+ * -3 -2 3 0 2 -1 0
544
+ * -4 -3 3 1 0 -2 2
545
+ * -5 -4 3 1 1 -2 1
546
+ * -6 -5 3 1 2 -2 0
547
+ *
548
+ * It appears that we need a total of 3 corrections:
549
+ * Decrease the magnitude of a to get A. Increase the
550
+ * magnitude of Q to get q (and make it negative).
551
+ * Find r = (b - 1) - R and give it the desired sign.
552
+ */
553
+ DivideWithRemainder(aa, b.mag, quotient.mag, remainder.mag);
554
+
555
+ AddMag(quotient.mag, one, quotient.mag);
556
+ // Modify the remainder.
557
+ SubMag(b.mag, remainder.mag, remainder.mag);
558
+ SubMag(remainder.mag, one, remainder.mag);
559
+ }
560
+
561
+ // Sign of the remainder is always the sign of the divisor b.
562
+ remainder.negative = b.negative;
563
+
564
+ // Set signs to zero as necessary. (Thanks David Allen!)
565
+ if (remainder.mag.empty())
566
+ remainder.negative = false;
567
+ if (quotient.mag.empty())
568
+ quotient.negative = false;
569
+ }
570
+
571
+ size_t ceilingDiv(size_t a, size_t b) {
572
+ return (a + b - 1) / b;
573
+ }
574
+
575
+ std::string
576
+ BigInteger::toString() const
577
+ {
578
+ if (mag.empty()) {
579
+ return "0";
580
+ }
581
+ std::string result;
582
+ if (negative) {
583
+ result.push_back('-');
584
+ }
585
+
586
+ constexpr uint32_t base = 10;
587
+ constexpr uint32_t minBitsPerDigit = 4; // HighestBitSet(base)
588
+ auto maxBitLenOfX = static_cast<uint32_t>(mag.size()) * NB_BITS;
589
+ auto maxDigitLenOfX = (maxBitLenOfX + minBitsPerDigit - 1) / minBitsPerDigit; // ceilingDiv
590
+
591
+ std::vector<uint8_t> buffer;
592
+ buffer.reserve(maxDigitLenOfX);
593
+
594
+ Magnitude x2 = mag;
595
+ Magnitude buBase{base};
596
+ Magnitude lastDigit;
597
+ lastDigit.reserve(1);
598
+
599
+ while (!x2.empty()) {
600
+ // Get last digit. This is like `lastDigit = x2 % buBase, x2 /= buBase'.
601
+ DivideWithRemainder(x2, buBase, x2, lastDigit);
602
+ // Save the digit.
603
+ buffer.push_back(static_cast<uint8_t>(lastDigit.empty() ? 0 : lastDigit.front()));
604
+ }
605
+
606
+ size_t offset = result.size();
607
+ result.resize(offset + buffer.size());
608
+ std::transform(buffer.rbegin(), buffer.rend(), result.begin() + offset, ToDigit<char>);
609
+ return result;
610
+ }
611
+
612
+ int
613
+ BigInteger::toInt() const
614
+ {
615
+ if (mag.empty())
616
+ return 0;
617
+ else if (negative)
618
+ return -static_cast<int>(mag.back());
619
+ else
620
+ return static_cast<int>(mag.back());
621
+ }
622
+
623
+ } // ZXing
@@ -0,0 +1,81 @@
1
+ /*
2
+ * Copyright 2016 Huy Cuong Nguyen
3
+ */
4
+ // SPDX-License-Identifier: Apache-2.0
5
+
6
+ #pragma once
7
+
8
+ #include <cstdlib>
9
+ #include <string>
10
+ #include <type_traits>
11
+ #include <utility>
12
+ #include <vector>
13
+
14
+ namespace ZXing {
15
+
16
+ /**
17
+ * All credits on BigInteger below go to Matt McCutchen, as the code below is extracted/modified from his C++ Big Integer Library (https://mattmccutchen.net/bigint/)
18
+ */
19
+ class BigInteger
20
+ {
21
+ public:
22
+ using Block = size_t;
23
+
24
+ // The number of bits in a block
25
+ //static const unsigned int N = 8 * sizeof(Block);
26
+
27
+ // Constructs zero.
28
+ BigInteger() = default;
29
+
30
+ template <typename T>
31
+ BigInteger(T x, typename std::enable_if_t<std::is_integral_v<T> && std::is_unsigned_v<T>>* = nullptr) : mag(1, x) {}
32
+
33
+ template <typename T>
34
+ BigInteger(T x, typename std::enable_if_t<std::is_integral_v<T> && std::is_signed_v<T>>* = nullptr) : negative(x < 0), mag(1, std::abs(x)) {}
35
+
36
+ static bool TryParse(const std::string& str, BigInteger& result);
37
+ static bool TryParse(const std::wstring& str, BigInteger& result);
38
+
39
+ bool isZero() const { return mag.empty(); }
40
+
41
+ std::string toString() const;
42
+ int toInt() const;
43
+
44
+ BigInteger& operator+=(BigInteger&& a) {
45
+ if (mag.empty())
46
+ *this = std::move(a);
47
+ else
48
+ Add(*this, a, *this);
49
+ return *this;
50
+ }
51
+
52
+ friend BigInteger operator+(const BigInteger& a, const BigInteger& b) {
53
+ BigInteger c;
54
+ BigInteger::Add(a, b, c);
55
+ return c;
56
+ }
57
+
58
+ friend BigInteger operator-(const BigInteger& a, const BigInteger& b) {
59
+ BigInteger c;
60
+ BigInteger::Subtract(a, b, c);
61
+ return c;
62
+ }
63
+
64
+ friend BigInteger operator*(const BigInteger& a, const BigInteger& b) {
65
+ BigInteger c;
66
+ BigInteger::Multiply(a, b, c);
67
+ return c;
68
+ }
69
+
70
+ static void Add(const BigInteger& a, const BigInteger &b, BigInteger& c);
71
+ static void Subtract(const BigInteger& a, const BigInteger &b, BigInteger& c);
72
+ static void Multiply(const BigInteger& a, const BigInteger &b, BigInteger& c);
73
+ static void Divide(const BigInteger& a, const BigInteger &b, BigInteger& quotient, BigInteger& remainder);
74
+
75
+ private:
76
+ bool negative = false;
77
+ std::vector<Block> mag;
78
+ };
79
+
80
+
81
+ } // ZXing