Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxbarcode / src / 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 \r
7 #include "barcode.h"\r
8 #include "include/BC_PDF417Codeword.h"\r
9 #include "include/BC_PDF417BoundingBox.h"\r
10 #include "include/BC_PDF417DetectionResultColumn.h"\r
11 FX_INT32 CBC_DetectionResultColumn::MAX_NEARBY_DISTANCE = 5;\r
12 CBC_DetectionResultColumn::CBC_DetectionResultColumn(CBC_BoundingBox* boundingBox)\r
13 {\r
14     m_boundingBox = boundingBox;\r
15     m_codewords = FX_NEW CFX_PtrArray;\r
16     m_codewords->SetSize(boundingBox->getMaxY() - boundingBox->getMinY() + 1);\r
17 }\r
18 CBC_DetectionResultColumn::~CBC_DetectionResultColumn()\r
19 {\r
20     for (FX_INT32 i = 0; i < m_codewords->GetSize(); i++) {\r
21         delete (CBC_Codeword*)m_codewords->GetAt(i);\r
22     }\r
23     m_codewords->RemoveAll();\r
24     delete m_codewords;\r
25 }\r
26 CBC_Codeword* CBC_DetectionResultColumn::getCodewordNearby(FX_INT32 imageRow)\r
27 {\r
28     CBC_Codeword* codeword = getCodeword(imageRow);\r
29     if (codeword != NULL) {\r
30         return codeword;\r
31     }\r
32     for (FX_INT32 i = 1; i < MAX_NEARBY_DISTANCE; i++) {\r
33         FX_INT32 nearImageRow = imageRowToCodewordIndex(imageRow) - i;\r
34         if (nearImageRow >= 0) {\r
35             codeword = (CBC_Codeword*)m_codewords->GetAt(nearImageRow);\r
36             if (codeword != NULL) {\r
37                 return codeword;\r
38             }\r
39         }\r
40         nearImageRow = imageRowToCodewordIndex(imageRow) + i;\r
41         if (nearImageRow < m_codewords->GetSize()) {\r
42             codeword = (CBC_Codeword*)m_codewords->GetAt(nearImageRow);\r
43             if (codeword != NULL) {\r
44                 return codeword;\r
45             }\r
46         }\r
47     }\r
48     return NULL;\r
49 }\r
50 FX_INT32 CBC_DetectionResultColumn::imageRowToCodewordIndex(FX_INT32 imageRow)\r
51 {\r
52     return imageRow - m_boundingBox->getMinY();\r
53 }\r
54 FX_INT32 CBC_DetectionResultColumn::codewordIndexToImageRow(FX_INT32 codewordIndex)\r
55 {\r
56     return m_boundingBox->getMinY() + codewordIndex;\r
57 }\r
58 void CBC_DetectionResultColumn::setCodeword(FX_INT32 imageRow, CBC_Codeword* codeword)\r
59 {\r
60     m_codewords->SetAt(imageRowToCodewordIndex(imageRow), codeword);\r
61 }\r
62 CBC_Codeword* CBC_DetectionResultColumn::getCodeword(FX_INT32 imageRow)\r
63 {\r
64     return (CBC_Codeword*)m_codewords->GetAt(imageRowToCodewordIndex(imageRow));\r
65 }\r
66 CBC_BoundingBox* CBC_DetectionResultColumn::getBoundingBox()\r
67 {\r
68     return m_boundingBox;\r
69 }\r
70 CFX_PtrArray* CBC_DetectionResultColumn::getCodewords()\r
71 {\r
72     return m_codewords;\r
73 }\r
74 CFX_ByteString CBC_DetectionResultColumn::toString()\r
75 {\r
76     CFX_ByteString result;\r
77     FX_INT32 row = 0;\r
78     for (FX_INT32 i = 0; i < m_codewords->GetSize(); i++) {\r
79         CBC_Codeword* codeword = (CBC_Codeword*)m_codewords->GetAt(i);\r
80         if (codeword == NULL) {\r
81             result += (FX_CHAR) row;\r
82             row++;\r
83             continue;\r
84         }\r
85         result += (FX_CHAR) row;\r
86         result += codeword->getRowNumber();\r
87         result += codeword->getValue();\r
88         row++;\r
89     }\r
90     return result;\r
91 }\r