Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxbarcode / pdf417 / BC_PDF417DetectionResultColumn.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 2013 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_PDF417Codeword.h"\r
25 #include "BC_PDF417BoundingBox.h"\r
26 #include "BC_PDF417DetectionResultColumn.h"\r
27 int32_t CBC_DetectionResultColumn::MAX_NEARBY_DISTANCE = 5;\r
28 CBC_DetectionResultColumn::CBC_DetectionResultColumn(CBC_BoundingBox* boundingBox)\r
29 {\r
30     m_boundingBox = boundingBox;\r
31     m_codewords = FX_NEW CFX_PtrArray;\r
32     m_codewords->SetSize(boundingBox->getMaxY() - boundingBox->getMinY() + 1);\r
33 }\r
34 CBC_DetectionResultColumn::~CBC_DetectionResultColumn()\r
35 {\r
36     for (int32_t i = 0; i < m_codewords->GetSize(); i++) {\r
37         delete (CBC_Codeword*)m_codewords->GetAt(i);\r
38     }\r
39     m_codewords->RemoveAll();\r
40     delete m_codewords;\r
41 }\r
42 CBC_Codeword* CBC_DetectionResultColumn::getCodewordNearby(int32_t imageRow)\r
43 {\r
44     CBC_Codeword* codeword = getCodeword(imageRow);\r
45     if (codeword != NULL) {\r
46         return codeword;\r
47     }\r
48     for (int32_t i = 1; i < MAX_NEARBY_DISTANCE; i++) {\r
49         int32_t nearImageRow = imageRowToCodewordIndex(imageRow) - i;\r
50         if (nearImageRow >= 0) {\r
51             codeword = (CBC_Codeword*)m_codewords->GetAt(nearImageRow);\r
52             if (codeword != NULL) {\r
53                 return codeword;\r
54             }\r
55         }\r
56         nearImageRow = imageRowToCodewordIndex(imageRow) + i;\r
57         if (nearImageRow < m_codewords->GetSize()) {\r
58             codeword = (CBC_Codeword*)m_codewords->GetAt(nearImageRow);\r
59             if (codeword != NULL) {\r
60                 return codeword;\r
61             }\r
62         }\r
63     }\r
64     return NULL;\r
65 }\r
66 int32_t CBC_DetectionResultColumn::imageRowToCodewordIndex(int32_t imageRow)\r
67 {\r
68     return imageRow - m_boundingBox->getMinY();\r
69 }\r
70 int32_t CBC_DetectionResultColumn::codewordIndexToImageRow(int32_t codewordIndex)\r
71 {\r
72     return m_boundingBox->getMinY() + codewordIndex;\r
73 }\r
74 void CBC_DetectionResultColumn::setCodeword(int32_t imageRow, CBC_Codeword* codeword)\r
75 {\r
76     m_codewords->SetAt(imageRowToCodewordIndex(imageRow), codeword);\r
77 }\r
78 CBC_Codeword* CBC_DetectionResultColumn::getCodeword(int32_t imageRow)\r
79 {\r
80     return (CBC_Codeword*)m_codewords->GetAt(imageRowToCodewordIndex(imageRow));\r
81 }\r
82 CBC_BoundingBox* CBC_DetectionResultColumn::getBoundingBox()\r
83 {\r
84     return m_boundingBox;\r
85 }\r
86 CFX_PtrArray* CBC_DetectionResultColumn::getCodewords()\r
87 {\r
88     return m_codewords;\r
89 }\r
90 CFX_ByteString CBC_DetectionResultColumn::toString()\r
91 {\r
92     CFX_ByteString result;\r
93     int32_t row = 0;\r
94     for (int32_t i = 0; i < m_codewords->GetSize(); i++) {\r
95         CBC_Codeword* codeword = (CBC_Codeword*)m_codewords->GetAt(i);\r
96         if (codeword == NULL) {\r
97             result += (FX_CHAR) row;\r
98             row++;\r
99             continue;\r
100         }\r
101         result += (FX_CHAR) row;\r
102         result += codeword->getRowNumber();\r
103         result += codeword->getValue();\r
104         row++;\r
105     }\r
106     return result;\r
107 }\r