| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 // Original code is licensed as follows: | 6 // Original code is licensed as follows: |
| 7 /* | 7 /* |
| 8 * Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part | 8 * Copyright 2006 Jeremias Maerki in part, and ZXing Authors in part |
| 9 * | 9 * |
| 10 * Licensed under the Apache License, Version 2.0 (the "License"); | 10 * Licensed under the Apache License, Version 2.0 (the "License"); |
| 11 * you may not use this file except in compliance with the License. | 11 * you may not use this file except in compliance with the License. |
| 12 * You may obtain a copy of the License at | 12 * You may obtain a copy of the License at |
| 13 * | 13 * |
| 14 * http://www.apache.org/licenses/LICENSE-2.0 | 14 * http://www.apache.org/licenses/LICENSE-2.0 |
| 15 * | 15 * |
| 16 * Unless required by applicable law or agreed to in writing, software | 16 * Unless required by applicable law or agreed to in writing, software |
| 17 * distributed under the License is distributed on an "AS IS" BASIS, | 17 * distributed under the License is distributed on an "AS IS" BASIS, |
| 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 19 * See the License for the specific language governing permissions and | 19 * See the License for the specific language governing permissions and |
| 20 * limitations under the License. | 20 * limitations under the License. |
| 21 */ | 21 */ |
| 22 | 22 |
| 23 #include "../barcode.h" | 23 #include "../barcode.h" |
| 24 #include "BC_PDF417ErrorCorrection.h" | 24 #include "BC_PDF417ErrorCorrection.h" |
| 25 FX_INT32 CBC_PDF417ErrorCorrection::EC_COEFFICIENTS[][2500] = { | 25 int32_t CBC_PDF417ErrorCorrection::EC_COEFFICIENTS[][2500] = { |
| 26 {27, 917}, | 26 {27, 917}, |
| 27 {522, 568, 723, 809}, | 27 {522, 568, 723, 809}, |
| 28 {237, 308, 436, 284, 646, 653, 428, 379}, | 28 {237, 308, 436, 284, 646, 653, 428, 379}, |
| 29 { | 29 { |
| 30 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, | 30 274, 562, 232, 755, 599, 524, 801, 132, 295, 116, 442, 428, 295, |
| 31 42, 176, 65 | 31 42, 176, 65 |
| 32 }, | 32 }, |
| 33 { | 33 { |
| 34 361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, | 34 361, 575, 922, 525, 176, 586, 640, 321, 536, 742, 677, 742, 687, |
| 35 284, 193, 517, 273, 494, 263, 147, 593, 800, 571, 320, 803, | 35 284, 193, 517, 273, 494, 263, 147, 593, 800, 571, 320, 803, |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 223, 849, 647, 63, 310, 863, 251, 366, 304, 282, 738, 675, | 125 223, 849, 647, 63, 310, 863, 251, 366, 304, 282, 738, 675, |
| 126 410, 389, 244, 31, 121, 303, 263 | 126 410, 389, 244, 31, 121, 303, 263 |
| 127 } | 127 } |
| 128 }; | 128 }; |
| 129 CBC_PDF417ErrorCorrection::CBC_PDF417ErrorCorrection() | 129 CBC_PDF417ErrorCorrection::CBC_PDF417ErrorCorrection() |
| 130 { | 130 { |
| 131 } | 131 } |
| 132 CBC_PDF417ErrorCorrection::~CBC_PDF417ErrorCorrection() | 132 CBC_PDF417ErrorCorrection::~CBC_PDF417ErrorCorrection() |
| 133 { | 133 { |
| 134 } | 134 } |
| 135 FX_INT32 CBC_PDF417ErrorCorrection::getErrorCorrectionCodewordCount(FX_INT32 err
orCorrectionLevel, FX_INT32 &e) | 135 int32_t CBC_PDF417ErrorCorrection::getErrorCorrectionCodewordCount(int32_t error
CorrectionLevel, int32_t &e) |
| 136 { | 136 { |
| 137 if (errorCorrectionLevel < 0 || errorCorrectionLevel > 8) { | 137 if (errorCorrectionLevel < 0 || errorCorrectionLevel > 8) { |
| 138 e = BCExceptionErrorCorrectionLevelMustBeBetween0And8; | 138 e = BCExceptionErrorCorrectionLevelMustBeBetween0And8; |
| 139 return -1; | 139 return -1; |
| 140 } | 140 } |
| 141 return 1 << (errorCorrectionLevel + 1); | 141 return 1 << (errorCorrectionLevel + 1); |
| 142 } | 142 } |
| 143 FX_INT32 CBC_PDF417ErrorCorrection::getRecommendedMinimumErrorCorrectionLevel(FX
_INT32 n, FX_INT32 &e) | 143 int32_t CBC_PDF417ErrorCorrection::getRecommendedMinimumErrorCorrectionLevel(int
32_t n, int32_t &e) |
| 144 { | 144 { |
| 145 if (n <= 0) { | 145 if (n <= 0) { |
| 146 e = BCExceptionIllegalArgumentnMustBeAbove0; | 146 e = BCExceptionIllegalArgumentnMustBeAbove0; |
| 147 return -1; | 147 return -1; |
| 148 } | 148 } |
| 149 if (n <= 40) { | 149 if (n <= 40) { |
| 150 return 2; | 150 return 2; |
| 151 } | 151 } |
| 152 if (n <= 160) { | 152 if (n <= 160) { |
| 153 return 3; | 153 return 3; |
| 154 } | 154 } |
| 155 if (n <= 320) { | 155 if (n <= 320) { |
| 156 return 4; | 156 return 4; |
| 157 } | 157 } |
| 158 if (n <= 863) { | 158 if (n <= 863) { |
| 159 return 5; | 159 return 5; |
| 160 } | 160 } |
| 161 e = BCExceptionNoRecommendationPossible; | 161 e = BCExceptionNoRecommendationPossible; |
| 162 return -1; | 162 return -1; |
| 163 } | 163 } |
| 164 CFX_WideString CBC_PDF417ErrorCorrection::generateErrorCorrection(CFX_WideString
dataCodewords, FX_INT32 errorCorrectionLevel, FX_INT32 &e) | 164 CFX_WideString CBC_PDF417ErrorCorrection::generateErrorCorrection(CFX_WideString
dataCodewords, int32_t errorCorrectionLevel, int32_t &e) |
| 165 { | 165 { |
| 166 FX_INT32 k = getErrorCorrectionCodewordCount(errorCorrectionLevel, e); | 166 int32_t k = getErrorCorrectionCodewordCount(errorCorrectionLevel, e); |
| 167 BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR)' '); | 167 BC_EXCEPTION_CHECK_ReturnValue(e, (FX_WCHAR)' '); |
| 168 FX_WCHAR* ech = FX_Alloc(FX_WCHAR, k * sizeof(FX_WCHAR)); | 168 FX_WCHAR* ech = FX_Alloc(FX_WCHAR, k * sizeof(FX_WCHAR)); |
| 169 FXSYS_memset32(ech, 0, k * sizeof(FX_WCHAR)); | 169 FXSYS_memset32(ech, 0, k * sizeof(FX_WCHAR)); |
| 170 FX_INT32 sld = dataCodewords.GetLength(); | 170 int32_t sld = dataCodewords.GetLength(); |
| 171 for (FX_INT32 i = 0; i < sld; i++) { | 171 for (int32_t i = 0; i < sld; i++) { |
| 172 FX_INT32 t1 = (dataCodewords.GetAt(i) + ech[k - 1]) % 929; | 172 int32_t t1 = (dataCodewords.GetAt(i) + ech[k - 1]) % 929; |
| 173 FX_INT32 t2; | 173 int32_t t2; |
| 174 FX_INT32 t3; | 174 int32_t t3; |
| 175 for (FX_INT32 j = k - 1; j >= 1; j--) { | 175 for (int32_t j = k - 1; j >= 1; j--) { |
| 176 t2 = (t1 * EC_COEFFICIENTS[errorCorrectionLevel][j]) % 929; | 176 t2 = (t1 * EC_COEFFICIENTS[errorCorrectionLevel][j]) % 929; |
| 177 t3 = 929 - t2; | 177 t3 = 929 - t2; |
| 178 ech[j] = (FX_WCHAR) ((ech[j - 1] + t3) % 929); | 178 ech[j] = (FX_WCHAR) ((ech[j - 1] + t3) % 929); |
| 179 } | 179 } |
| 180 t2 = (t1 * EC_COEFFICIENTS[errorCorrectionLevel][0]) % 929; | 180 t2 = (t1 * EC_COEFFICIENTS[errorCorrectionLevel][0]) % 929; |
| 181 t3 = 929 - t2; | 181 t3 = 929 - t2; |
| 182 ech[0] = (FX_WCHAR) (t3 % 929); | 182 ech[0] = (FX_WCHAR) (t3 % 929); |
| 183 } | 183 } |
| 184 CFX_WideString sb; | 184 CFX_WideString sb; |
| 185 for (FX_INT32 j = k - 1; j >= 0; j--) { | 185 for (int32_t j = k - 1; j >= 0; j--) { |
| 186 if (ech[j] != 0) { | 186 if (ech[j] != 0) { |
| 187 ech[j] = (FX_WCHAR) (929 - ech[j]); | 187 ech[j] = (FX_WCHAR) (929 - ech[j]); |
| 188 } | 188 } |
| 189 sb += (FX_WCHAR)ech[j]; | 189 sb += (FX_WCHAR)ech[j]; |
| 190 } | 190 } |
| 191 FX_Free (ech); | 191 FX_Free (ech); |
| 192 return sb; | 192 return sb; |
| 193 } | 193 } |
| OLD | NEW |