Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxbarcode / datamatrix / BC_DataMatrixVersion.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 2007 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 "BC_DataMatrixVersion.h"\r
25 CFX_PtrArray* CBC_DataMatrixVersion::VERSIONS = NULL;\r
26 void CBC_DataMatrixVersion::Initialize()\r
27 {\r
28     VERSIONS = FX_NEW CFX_PtrArray();\r
29 }\r
30 void CBC_DataMatrixVersion::Finalize()\r
31 {\r
32     for (int32_t i = 0; i < VERSIONS->GetSize(); i++) {\r
33         delete ( (CBC_DataMatrixVersion*)(VERSIONS->GetAt(i)) );\r
34     }\r
35     VERSIONS->RemoveAll();\r
36     delete VERSIONS;\r
37 }\r
38 CBC_DataMatrixVersion::CBC_DataMatrixVersion(int32_t versionNumber,\r
39         int32_t symbolSizeRows,\r
40         int32_t symbolSizeColumns,\r
41         int32_t dataRegionSizeRows,\r
42         int32_t dataRegionSizeColumns,\r
43         ECBlocks *ecBlocks)\r
44 {\r
45     m_versionNumber = versionNumber;\r
46     m_symbolSizeRows = symbolSizeRows;\r
47     m_symbolSizeColumns = symbolSizeColumns;\r
48     m_dataRegionSizeRows = dataRegionSizeRows;\r
49     m_dataRegionSizeColumns = dataRegionSizeColumns;\r
50     m_ecBlocks = ecBlocks;\r
51     int32_t total = 0;\r
52     int32_t ecCodewords = ecBlocks->GetECCodewords();\r
53     const CFX_PtrArray &ecbArray = ecBlocks->GetECBlocks();\r
54     for (int32_t i = 0; i < ecbArray.GetSize(); i++) {\r
55         total += ((ECB*)ecbArray[i])->GetCount() * (((ECB*)ecbArray[i])->GetDataCodewords() + ecCodewords);\r
56     }\r
57     m_totalCodewords = total;\r
58 }\r
59 CBC_DataMatrixVersion::~CBC_DataMatrixVersion()\r
60 {\r
61     if(m_ecBlocks != NULL) {\r
62         delete m_ecBlocks;\r
63     }\r
64     m_ecBlocks = NULL;\r
65 }\r
66 int32_t CBC_DataMatrixVersion::GetVersionNumber()\r
67 {\r
68     return m_versionNumber;\r
69 }\r
70 int32_t CBC_DataMatrixVersion::GetSymbolSizeRows()\r
71 {\r
72     return m_symbolSizeRows;\r
73 }\r
74 int32_t CBC_DataMatrixVersion::GetSymbolSizeColumns()\r
75 {\r
76     return m_symbolSizeColumns;\r
77 }\r
78 int32_t CBC_DataMatrixVersion::GetDataRegionSizeRows()\r
79 {\r
80     return m_dataRegionSizeRows;\r
81 }\r
82 int32_t CBC_DataMatrixVersion::GetDataRegionSizeColumns()\r
83 {\r
84     return m_dataRegionSizeColumns;\r
85 }\r
86 int32_t CBC_DataMatrixVersion::GetTotalCodewords()\r
87 {\r
88     return m_totalCodewords;\r
89 }\r
90 ECBlocks *CBC_DataMatrixVersion::GetECBlocks()\r
91 {\r
92     return m_ecBlocks;\r
93 }\r
94 void CBC_DataMatrixVersion::ReleaseAll()\r
95 {\r
96     for (int32_t i = 0; i < VERSIONS->GetSize(); i++) {\r
97         delete (CBC_DataMatrixVersion*)VERSIONS->GetAt(i);\r
98     }\r
99     VERSIONS->RemoveAll();\r
100 }\r
101 CBC_DataMatrixVersion *CBC_DataMatrixVersion::GetVersionForDimensions(int32_t numRows, int32_t numColumns, int32_t &e)\r
102 {\r
103     if ((numRows & 0x01) != 0 || (numColumns & 0x01) != 0) {\r
104         e = BCExceptionNotFound;\r
105         return NULL;\r
106     }\r
107     if(VERSIONS->GetSize() == 0) {\r
108         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(1, 10, 10, 8, 8, FX_NEW ECBlocks(5, FX_NEW ECB(1, 3))));\r
109         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(2, 12, 12, 10, 10, FX_NEW ECBlocks(7, FX_NEW ECB(1, 5))));\r
110         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(3, 14, 14, 12, 12, FX_NEW ECBlocks(10, FX_NEW ECB(1, 8))));\r
111         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(4, 16, 16, 14, 14, FX_NEW ECBlocks(12, FX_NEW ECB(1, 12))));\r
112         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(5, 18, 18, 16, 16, FX_NEW ECBlocks(14, FX_NEW ECB(1, 18))));\r
113         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(6, 20, 20, 18, 18, FX_NEW ECBlocks(18, FX_NEW ECB(1, 22))));\r
114         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(7, 22, 22, 20, 20, FX_NEW ECBlocks(20, FX_NEW ECB(1, 30))));\r
115         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(8, 24, 24, 22, 22, FX_NEW ECBlocks(24, FX_NEW ECB(1, 36))));\r
116         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(9, 26, 26, 24, 24, FX_NEW ECBlocks(28, FX_NEW ECB(1, 44))));\r
117         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(10, 32, 32, 14, 14, FX_NEW ECBlocks(36, FX_NEW ECB(1, 62))));\r
118         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(11, 36, 36, 16, 16, FX_NEW ECBlocks(42, FX_NEW ECB(1, 86))));\r
119         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(12, 40, 40, 18, 18, FX_NEW ECBlocks(48, FX_NEW ECB(1, 114))));\r
120         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(13, 44, 44, 20, 20, FX_NEW ECBlocks(56, FX_NEW ECB(1, 144))));\r
121         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(14, 48, 48, 22, 22, FX_NEW ECBlocks(68, FX_NEW ECB(1, 174))));\r
122         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(15, 52, 52, 24, 24, FX_NEW ECBlocks(42, FX_NEW ECB(2, 102))));\r
123         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(16, 64, 64, 14, 14, FX_NEW ECBlocks(56, FX_NEW ECB(2, 140))));\r
124         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(17, 72, 72, 16, 16, FX_NEW ECBlocks(36, FX_NEW ECB(4, 92))));\r
125         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(18, 80, 80, 18, 18, FX_NEW ECBlocks(48, FX_NEW ECB(4, 114))));\r
126         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(19, 88, 88, 20, 20, FX_NEW ECBlocks(56, FX_NEW ECB(4, 144))));\r
127         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(20, 96, 96, 22, 22, FX_NEW ECBlocks(68, FX_NEW ECB(4, 174))));\r
128         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(21, 104, 104, 24, 24, FX_NEW ECBlocks(56, FX_NEW ECB(6, 136))));\r
129         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(22, 120, 120, 18, 18, FX_NEW ECBlocks(68, FX_NEW ECB(6, 175))));\r
130         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(23, 132, 132, 20, 20, FX_NEW ECBlocks(62, FX_NEW ECB(8, 163))));\r
131         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(24, 144, 144, 22, 22, FX_NEW ECBlocks(62, FX_NEW ECB(8, 156), FX_NEW ECB(2, 155))));\r
132         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(25, 8, 18, 6, 16, FX_NEW ECBlocks(7, FX_NEW ECB(1, 5))));\r
133         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(26, 8, 32, 6, 14, FX_NEW ECBlocks(11, FX_NEW ECB(1, 10))));\r
134         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(27, 12, 26, 10, 24, FX_NEW ECBlocks(14, FX_NEW ECB(1, 16))));\r
135         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(28, 12, 36, 10, 16, FX_NEW ECBlocks(18, FX_NEW ECB(1, 22))));\r
136         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(29, 16, 36, 14, 16, FX_NEW ECBlocks(24, FX_NEW ECB(1, 32))));\r
137         VERSIONS->Add(FX_NEW CBC_DataMatrixVersion(30, 16, 48, 14, 22, FX_NEW ECBlocks(28, FX_NEW ECB(1, 49))));\r
138     }\r
139     int32_t numVersions = VERSIONS->GetSize();\r
140     for (int32_t i = 0; i < numVersions; ++i) {\r
141         if (((CBC_DataMatrixVersion*)((*VERSIONS)[i]))->m_symbolSizeRows == numRows && ((CBC_DataMatrixVersion*)((*VERSIONS)[i]))->m_symbolSizeColumns == numColumns) {\r
142             return (CBC_DataMatrixVersion*)(*VERSIONS)[i];\r
143         }\r
144     }\r
145     e = BCExceptionNotFound;\r
146     return NULL;\r
147 }\r