Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxbarcode / src / 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 \r
7 #include "barcode.h"\r
8 #include "include/BC_QRCoderErrorCorrectionLevel.h"\r
9 #include "include/BC_QRCoderMode.h"\r
10 #include "include/BC_CommonByteMatrix.h"\r
11 #include "include/BC_QRCoder.h"\r
12 CBC_QRCoder::CBC_QRCoder()\r
13 {\r
14     m_mode = NULL;\r
15     m_ecLevel = NULL;\r
16     m_version = -1;\r
17     m_matrixWidth = -1;\r
18     m_maskPattern = -1;\r
19     m_numTotalBytes = -1;\r
20     m_numDataBytes = -1;\r
21     m_numECBytes = -1;\r
22     m_numRSBlocks = -1;\r
23     m_matrix = NULL;\r
24 }\r
25 CBC_QRCoder::~CBC_QRCoder()\r
26 {\r
27     if(m_matrix != NULL) {\r
28         delete m_matrix;\r
29         m_matrix = NULL;\r
30     }\r
31     m_mode = NULL;\r
32     m_ecLevel = NULL;\r
33     m_version = -1;\r
34     m_matrixWidth = -1;\r
35     m_maskPattern = -1;\r
36     m_numTotalBytes = -1;\r
37     m_numDataBytes = -1;\r
38     m_numECBytes = -1;\r
39     m_numRSBlocks = -1;\r
40 }\r
41 CBC_QRCoderMode* CBC_QRCoder::GetMode()\r
42 {\r
43     return m_mode;\r
44 }\r
45 CBC_QRCoderErrorCorrectionLevel* CBC_QRCoder::GetECLevel()\r
46 {\r
47     return m_ecLevel;\r
48 }\r
49 FX_INT32 CBC_QRCoder::GetVersion()\r
50 {\r
51     return m_version;\r
52 }\r
53 FX_INT32 CBC_QRCoder::GetMatrixWidth()\r
54 {\r
55     return m_matrixWidth;\r
56 }\r
57 FX_INT32 CBC_QRCoder::GetMaskPattern()\r
58 {\r
59     return m_maskPattern;\r
60 }\r
61 FX_INT32 CBC_QRCoder::GetNumTotalBytes()\r
62 {\r
63     return m_numTotalBytes;\r
64 }\r
65 FX_INT32 CBC_QRCoder::GetNumDataBytes()\r
66 {\r
67     return m_numDataBytes;\r
68 }\r
69 FX_INT32 CBC_QRCoder::GetNumECBytes()\r
70 {\r
71     return m_numECBytes;\r
72 }\r
73 FX_INT32 CBC_QRCoder::GetNumRSBlocks()\r
74 {\r
75     return m_numRSBlocks;\r
76 }\r
77 CBC_CommonByteMatrix* CBC_QRCoder::GetMatrix()\r
78 {\r
79     return m_matrix;\r
80 }\r
81 FX_INT32 CBC_QRCoder::At(FX_INT32 x, FX_INT32 y, FX_INT32 &e)\r
82 {\r
83     FX_INT32 value = m_matrix->Get(x, y);\r
84     if(!(value == 0 || value == 1)) {\r
85         e = BCExceptionValueMustBeEither0or1;\r
86         BC_EXCEPTION_CHECK_ReturnValue(e, 0);\r
87     }\r
88     return value;\r
89 }\r
90 FX_BOOL CBC_QRCoder::IsValid()\r
91 {\r
92     return\r
93         m_mode != NULL &&\r
94         m_ecLevel != NULL &&\r
95         m_version != -1 &&\r
96         m_matrixWidth != -1 &&\r
97         m_maskPattern != -1 &&\r
98         m_numTotalBytes != -1 &&\r
99         m_numDataBytes != -1 &&\r
100         m_numECBytes != -1 &&\r
101         m_numRSBlocks != -1 &&\r
102         IsValidMaskPattern(m_maskPattern) &&\r
103         m_numTotalBytes == m_numDataBytes + m_numECBytes &&\r
104         m_matrix != NULL &&\r
105         m_matrixWidth == m_matrix->GetWidth() &&\r
106         m_matrix->GetWidth() == m_matrix->GetHeight();\r
107 }\r
108 void CBC_QRCoder::SetMode(CBC_QRCoderMode* value)\r
109 {\r
110     m_mode = value;\r
111 }\r
112 void CBC_QRCoder::SetECLevel(CBC_QRCoderErrorCorrectionLevel* ecLevel)\r
113 {\r
114     m_ecLevel = ecLevel;\r
115 }\r
116 void CBC_QRCoder::SetVersion(FX_INT32 version)\r
117 {\r
118     m_version = version;\r
119 }\r
120 void CBC_QRCoder::SetMatrixWidth(FX_INT32 width)\r
121 {\r
122     m_matrixWidth = width;\r
123 }\r
124 void CBC_QRCoder::SetMaskPattern(FX_INT32 pattern)\r
125 {\r
126     m_maskPattern = pattern;\r
127 }\r
128 void CBC_QRCoder::SetNumDataBytes(FX_INT32 bytes)\r
129 {\r
130     m_numDataBytes = bytes;\r
131 }\r
132 void CBC_QRCoder::SetNumTotalBytes(FX_INT32 value)\r
133 {\r
134     m_numTotalBytes = value;\r
135 }\r
136 void CBC_QRCoder::SetNumRSBlocks(FX_INT32 block)\r
137 {\r
138     m_numRSBlocks = block;\r
139 }\r
140 void CBC_QRCoder::SetNumECBytes(FX_INT32 value)\r
141 {\r
142     m_numECBytes = value;\r
143 }\r
144 FX_BOOL CBC_QRCoder::IsValidMaskPattern(FX_INT32 maskPattern)\r
145 {\r
146     return maskPattern >= 0 && maskPattern < NUM_MASK_PATTERNS;\r
147 }\r
148 void CBC_QRCoder::SetMatrix(CBC_CommonByteMatrix* value)\r
149 {\r
150     m_matrix = value;\r
151 }\r
152 const FX_INT32 CBC_QRCoder::NUM_MASK_PATTERNS = 8;\r