OLD | NEW |
| (Empty) |
1 // Copyright 2014 PDFium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
6 // Original code is licensed as follows: | |
7 /* | |
8 * Copyright 2012 ZXing authors | |
9 * | |
10 * Licensed under the Apache License, Version 2.0 (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 | |
13 * | |
14 * http://www.apache.org/licenses/LICENSE-2.0 | |
15 * | |
16 * Unless required by applicable law or agreed to in writing, software | |
17 * distributed under the License is distributed on an "AS IS" BASIS, | |
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
19 * See the License for the specific language governing permissions and | |
20 * limitations under the License. | |
21 */ | |
22 | |
23 #include "xfa/src/fxbarcode/pdf417/BC_PDF417Common.h" | |
24 #include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusGF.h" | |
25 #include "xfa/src/fxbarcode/pdf417/BC_PDF417ECModulusPoly.h" | |
26 #include "xfa/src/fxbarcode/utils.h" | |
27 | |
28 CBC_PDF417ECModulusGF* CBC_PDF417ECModulusGF::PDF417_GF = NULL; | |
29 void CBC_PDF417ECModulusGF::Initialize(int32_t& e) { | |
30 PDF417_GF = | |
31 new CBC_PDF417ECModulusGF(CBC_PDF417Common::NUMBER_OF_CODEWORDS, 3, e); | |
32 } | |
33 void CBC_PDF417ECModulusGF::Finalize() { | |
34 delete PDF417_GF; | |
35 } | |
36 CBC_PDF417ECModulusGF::CBC_PDF417ECModulusGF(int32_t modulus, | |
37 int32_t generator, | |
38 int32_t& e) { | |
39 m_modulus = modulus; | |
40 m_expTable.SetSize(modulus); | |
41 m_logTable.SetSize(modulus); | |
42 int32_t x = 1; | |
43 for (int32_t i = 0; i < modulus; i++) { | |
44 m_expTable[i] = x; | |
45 x = (x * generator) % modulus; | |
46 } | |
47 for (int32_t j = 0; j < modulus - 1; j++) { | |
48 m_logTable[m_expTable[j]] = j; | |
49 } | |
50 CFX_Int32Array zero; | |
51 zero.Add(0); | |
52 m_zero = new CBC_PDF417ECModulusPoly(this, zero, e); | |
53 CFX_Int32Array one; | |
54 one.Add(1); | |
55 m_one = new CBC_PDF417ECModulusPoly(this, one, e); | |
56 } | |
57 CBC_PDF417ECModulusGF::~CBC_PDF417ECModulusGF() { | |
58 delete m_zero; | |
59 delete m_one; | |
60 } | |
61 CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusGF::getZero() { | |
62 return m_zero; | |
63 } | |
64 CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusGF::getOne() { | |
65 return m_one; | |
66 } | |
67 CBC_PDF417ECModulusPoly* CBC_PDF417ECModulusGF::buildMonomial( | |
68 int32_t degree, | |
69 int32_t coefficient, | |
70 int32_t& e) { | |
71 if (degree < 0) { | |
72 e = BCExceptionIllegalArgument; | |
73 return NULL; | |
74 } | |
75 CBC_PDF417ECModulusPoly* modulusPoly = NULL; | |
76 if (coefficient == 0) { | |
77 modulusPoly = new CBC_PDF417ECModulusPoly(m_zero->getField(), | |
78 m_zero->getCoefficients(), e); | |
79 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | |
80 return modulusPoly; | |
81 } | |
82 CFX_Int32Array coefficients; | |
83 coefficients.SetSize(degree + 1); | |
84 coefficients[0] = coefficient; | |
85 modulusPoly = new CBC_PDF417ECModulusPoly(this, coefficients, e); | |
86 BC_EXCEPTION_CHECK_ReturnValue(e, NULL); | |
87 return modulusPoly; | |
88 } | |
89 int32_t CBC_PDF417ECModulusGF::add(int32_t a, int32_t b) { | |
90 return (a + b) % m_modulus; | |
91 } | |
92 int32_t CBC_PDF417ECModulusGF::subtract(int32_t a, int32_t b) { | |
93 return (m_modulus + a - b) % m_modulus; | |
94 } | |
95 int32_t CBC_PDF417ECModulusGF::exp(int32_t a) { | |
96 return m_expTable[a]; | |
97 } | |
98 int32_t CBC_PDF417ECModulusGF::log(int32_t a, int32_t& e) { | |
99 if (a == 0) { | |
100 e = BCExceptionIllegalArgument; | |
101 return -1; | |
102 } | |
103 return m_logTable[a]; | |
104 } | |
105 int32_t CBC_PDF417ECModulusGF::inverse(int32_t a, int32_t& e) { | |
106 if (a == 0) { | |
107 e = BCExceptionIllegalArgument; | |
108 return -1; | |
109 } | |
110 return m_expTable[m_modulus - m_logTable[a] - 1]; | |
111 } | |
112 int32_t CBC_PDF417ECModulusGF::multiply(int32_t a, int32_t b) { | |
113 if (a == 0 || b == 0) { | |
114 return 0; | |
115 } | |
116 return m_expTable[(m_logTable[a] + m_logTable[b]) % (m_modulus - 1)]; | |
117 } | |
118 int32_t CBC_PDF417ECModulusGF::getSize() { | |
119 return m_modulus; | |
120 } | |
OLD | NEW |