Organize barcode codes into modules.
[pdfium.git] / xfa / src / fxbarcode / qrcode / BC_QRCoder.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 // Original code is licensed as follows:\r
7 /*\r
8  * Copyright 2008 ZXing authors\r
9  *\r
10  * Licensed under the Apache License, Version 2.0 (the "License");\r
11  * you may not use this file except in compliance with the License.\r
12  * You may obtain a copy of the License at\r
13  *\r
14  *      http://www.apache.org/licenses/LICENSE-2.0\r
15  *\r
16  * Unless required by applicable law or agreed to in writing, software\r
17  * distributed under the License is distributed on an "AS IS" BASIS,\r
18  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
19  * See the License for the specific language governing permissions and\r
20  * limitations under the License.\r
21  */\r
22 \r
23 #include "../barcode.h"\r
24 #include "../common/BC_CommonByteMatrix.h"\r
25 #include "BC_QRCoderErrorCorrectionLevel.h"\r
26 #include "BC_QRCoderMode.h"\r
27 #include "BC_QRCoder.h"\r
28 CBC_QRCoder::CBC_QRCoder()\r
29 {\r
30     m_mode = NULL;\r
31     m_ecLevel = NULL;\r
32     m_version = -1;\r
33     m_matrixWidth = -1;\r
34     m_maskPattern = -1;\r
35     m_numTotalBytes = -1;\r
36     m_numDataBytes = -1;\r
37     m_numECBytes = -1;\r
38     m_numRSBlocks = -1;\r
39     m_matrix = NULL;\r
40 }\r
41 CBC_QRCoder::~CBC_QRCoder()\r
42 {\r
43     if(m_matrix != NULL) {\r
44         delete m_matrix;\r
45         m_matrix = NULL;\r
46     }\r
47     m_mode = NULL;\r
48     m_ecLevel = NULL;\r
49     m_version = -1;\r
50     m_matrixWidth = -1;\r
51     m_maskPattern = -1;\r
52     m_numTotalBytes = -1;\r
53     m_numDataBytes = -1;\r
54     m_numECBytes = -1;\r
55     m_numRSBlocks = -1;\r
56 }\r
57 CBC_QRCoderMode* CBC_QRCoder::GetMode()\r
58 {\r
59     return m_mode;\r
60 }\r
61 CBC_QRCoderErrorCorrectionLevel* CBC_QRCoder::GetECLevel()\r
62 {\r
63     return m_ecLevel;\r
64 }\r
65 FX_INT32 CBC_QRCoder::GetVersion()\r
66 {\r
67     return m_version;\r
68 }\r
69 FX_INT32 CBC_QRCoder::GetMatrixWidth()\r
70 {\r
71     return m_matrixWidth;\r
72 }\r
73 FX_INT32 CBC_QRCoder::GetMaskPattern()\r
74 {\r
75     return m_maskPattern;\r
76 }\r
77 FX_INT32 CBC_QRCoder::GetNumTotalBytes()\r
78 {\r
79     return m_numTotalBytes;\r
80 }\r
81 FX_INT32 CBC_QRCoder::GetNumDataBytes()\r
82 {\r
83     return m_numDataBytes;\r
84 }\r
85 FX_INT32 CBC_QRCoder::GetNumECBytes()\r
86 {\r
87     return m_numECBytes;\r
88 }\r
89 FX_INT32 CBC_QRCoder::GetNumRSBlocks()\r
90 {\r
91     return m_numRSBlocks;\r
92 }\r
93 CBC_CommonByteMatrix* CBC_QRCoder::GetMatrix()\r
94 {\r
95     return m_matrix;\r
96 }\r
97 FX_INT32 CBC_QRCoder::At(FX_INT32 x, FX_INT32 y, FX_INT32 &e)\r
98 {\r
99     FX_INT32 value = m_matrix->Get(x, y);\r
100     if(!(value == 0 || value == 1)) {\r
101         e = BCExceptionValueMustBeEither0or1;\r
102         BC_EXCEPTION_CHECK_ReturnValue(e, 0);\r
103     }\r
104     return value;\r
105 }\r
106 FX_BOOL CBC_QRCoder::IsValid()\r
107 {\r
108     return\r
109         m_mode != NULL &&\r
110         m_ecLevel != NULL &&\r
111         m_version != -1 &&\r
112         m_matrixWidth != -1 &&\r
113         m_maskPattern != -1 &&\r
114         m_numTotalBytes != -1 &&\r
115         m_numDataBytes != -1 &&\r
116         m_numECBytes != -1 &&\r
117         m_numRSBlocks != -1 &&\r
118         IsValidMaskPattern(m_maskPattern) &&\r
119         m_numTotalBytes == m_numDataBytes + m_numECBytes &&\r
120         m_matrix != NULL &&\r
121         m_matrixWidth == m_matrix->GetWidth() &&\r
122         m_matrix->GetWidth() == m_matrix->GetHeight();\r
123 }\r
124 void CBC_QRCoder::SetMode(CBC_QRCoderMode* value)\r
125 {\r
126     m_mode = value;\r
127 }\r
128 void CBC_QRCoder::SetECLevel(CBC_QRCoderErrorCorrectionLevel* ecLevel)\r
129 {\r
130     m_ecLevel = ecLevel;\r
131 }\r
132 void CBC_QRCoder::SetVersion(FX_INT32 version)\r
133 {\r
134     m_version = version;\r
135 }\r
136 void CBC_QRCoder::SetMatrixWidth(FX_INT32 width)\r
137 {\r
138     m_matrixWidth = width;\r
139 }\r
140 void CBC_QRCoder::SetMaskPattern(FX_INT32 pattern)\r
141 {\r
142     m_maskPattern = pattern;\r
143 }\r
144 void CBC_QRCoder::SetNumDataBytes(FX_INT32 bytes)\r
145 {\r
146     m_numDataBytes = bytes;\r
147 }\r
148 void CBC_QRCoder::SetNumTotalBytes(FX_INT32 value)\r
149 {\r
150     m_numTotalBytes = value;\r
151 }\r
152 void CBC_QRCoder::SetNumRSBlocks(FX_INT32 block)\r
153 {\r
154     m_numRSBlocks = block;\r
155 }\r
156 void CBC_QRCoder::SetNumECBytes(FX_INT32 value)\r
157 {\r
158     m_numECBytes = value;\r
159 }\r
160 FX_BOOL CBC_QRCoder::IsValidMaskPattern(FX_INT32 maskPattern)\r
161 {\r
162     return maskPattern >= 0 && maskPattern < NUM_MASK_PATTERNS;\r
163 }\r
164 void CBC_QRCoder::SetMatrix(CBC_CommonByteMatrix* value)\r
165 {\r
166     m_matrix = value;\r
167 }\r
168 const FX_INT32 CBC_QRCoder::NUM_MASK_PATTERNS = 8;\r