1 #ifndef __UPC_EAN_READER_H__
2 #define __UPC_EAN_READER_H__
8 * Copyright 2010 ZXing authors All rights reserved.
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
23 #include <zxing/oned/OneDReader.h>
24 #include <zxing/common/BitArray.h>
25 #include <zxing/Result.h>
27 typedef enum UPC_EAN_PATTERNS {
28 UPC_EAN_PATTERNS_L_PATTERNS = 0,
29 UPC_EAN_PATTERNS_L_AND_G_PATTERNS
34 class UPCEANReader : public OneDReader {
37 static const unsigned int MAX_AVG_VARIANCE = (unsigned int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.42f);
38 static const int MAX_INDIVIDUAL_VARIANCE = (int) (PATTERN_MATCH_RESULT_SCALE_FACTOR * 0.7f);
40 static bool findStartGuardPattern(Ref<BitArray> row, int* rangeStart, int* rangeEnd);
42 virtual bool decodeEnd(Ref<BitArray> row, int endStart, int* endGuardBegin, int* endGuardEnd);
44 static bool checkStandardUPCEANChecksum(std::string s);
46 static bool findGuardPattern(Ref<BitArray> row, int rowOffset, bool whiteFirst,
47 const int pattern[], int patternLen, int* start, int* end);
49 virtual const int getMIDDLE_PATTERN_LEN();
50 virtual const int* getMIDDLE_PATTERN();
55 // Returns < 0 on failure, >= 0 on success.
56 virtual int decodeMiddle(Ref<BitArray> row, int startGuardBegin, int startGuardEnd,
57 std::string& resultString) = 0;
59 Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
61 // TODO(dswitkin): Should this be virtual so that UPCAReader can override it?
62 Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row, int startGuardBegin,
65 // Returns < 0 on failure, >= 0 on success.
66 static int decodeDigit(Ref<BitArray> row, int counters[], int countersLen, int rowOffset,
67 UPC_EAN_PATTERNS patternType);
69 virtual bool checkChecksum(std::string s);
71 virtual BarcodeFormat getBarcodeFormat() = 0;
72 virtual ~UPCEANReader();