Merge to XFA: Use stdint.h types throughout PDFium.
[pdfium.git] / xfa / src / fxbarcode / oned / BC_OnedEAN8Reader.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 "../BC_Reader.h"\r
25 #include "../common/BC_CommonBitArray.h"\r
26 #include "BC_OneDReader.h"\r
27 #include "BC_OneDimReader.h"\r
28 #include "BC_OnedEAN8Reader.h"\r
29 CBC_OnedEAN8Reader::CBC_OnedEAN8Reader()\r
30 {\r
31 }\r
32 CBC_OnedEAN8Reader::~CBC_OnedEAN8Reader()\r
33 {\r
34 }\r
35 int32_t CBC_OnedEAN8Reader::DecodeMiddle(CBC_CommonBitArray *row, CFX_Int32Array *startRange, CFX_ByteString &resultResult, int32_t &e)\r
36 {\r
37     CFX_Int32Array counters;\r
38     counters.Add(0);\r
39     counters.Add(0);\r
40     counters.Add(0);\r
41     counters.Add(0);\r
42     int32_t end = row->GetSize();\r
43     int32_t rowOffset = (*startRange)[1];\r
44     int32_t rowOffsetLeft = rowOffset;\r
45     for (int32_t x = 0; x < 4 && rowOffset < end; x++) {\r
46         int32_t bestMatch = DecodeDigit(row, &counters, rowOffset, &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);\r
47         BC_EXCEPTION_CHECK_ReturnValue(e, 0);\r
48         resultResult += (FX_CHAR) ('0' + bestMatch);\r
49         for (int32_t i = 0; i < counters.GetSize(); i++) {\r
50             rowOffset += counters[i];\r
51         }\r
52     }\r
53     int32_t RowOffsetLen = (rowOffset - rowOffsetLeft) / 4;\r
54     CFX_Int32Array result;\r
55     result.Add(CBC_OneDimReader::MIDDLE_PATTERN[0]);\r
56     result.Add(CBC_OneDimReader::MIDDLE_PATTERN[1]);\r
57     result.Add(CBC_OneDimReader::MIDDLE_PATTERN[2]);\r
58     result.Add(CBC_OneDimReader::MIDDLE_PATTERN[3]);\r
59     result.Add(CBC_OneDimReader::MIDDLE_PATTERN[4]);\r
60     CFX_Int32Array *middleRange = FindGuardPattern(row, rowOffset, TRUE, &result, e);\r
61     BC_EXCEPTION_CHECK_ReturnValue(e, 0);\r
62     int32_t rowOffsetMid = rowOffset;\r
63     rowOffset = (*middleRange)[1];\r
64     if((rowOffset - rowOffsetMid) > RowOffsetLen) {\r
65         e = BCExceptionNotFound;\r
66         BC_EXCEPTION_CHECK_ReturnValue(e, 0);\r
67     }\r
68     if(middleRange != NULL) {\r
69         delete middleRange;\r
70         middleRange = NULL;\r
71     }\r
72     for (int32_t y = 0; y < 4 && rowOffset < end; y++) {\r
73         int32_t bestMatch = DecodeDigit(row, & counters, rowOffset, &(CBC_OneDimReader::L_PATTERNS[0][0]), 10, e);\r
74         BC_EXCEPTION_CHECK_ReturnValue(e, 0);\r
75         resultResult += (FX_CHAR) ('0' + bestMatch);\r
76         for (int32_t i = 0; i < counters.GetSize(); i++) {\r
77             rowOffset += counters[i];\r
78         }\r
79     }\r
80     return rowOffset;\r
81 }\r