From: dswitkin@google.com Date: Fri, 13 Aug 2010 19:47:13 +0000 (+0000) Subject: Changed OneDReader::recordPattern to not throw exceptions. For now it just X-Git-Url: http://git.rot13.org/?p=zxing.git;a=commitdiff_plain;h=588c8db7d6f8794125b9cfa7bd0a3b8884a413b6 Changed OneDReader::recordPattern to not throw exceptions. For now it just moves them up a level to the callers. git-svn-id: http://zxing.googlecode.com/svn/trunk@1531 59b500cc-1b3d-0410-9834-0bbf25fbcc57 --- diff --git a/cpp/core/src/zxing/oned/Code128Reader.cpp b/cpp/core/src/zxing/oned/Code128Reader.cpp index 4668a038..7b088219 100644 --- a/cpp/core/src/zxing/oned/Code128Reader.cpp +++ b/cpp/core/src/zxing/oned/Code128Reader.cpp @@ -205,8 +205,10 @@ namespace zxing { } int Code128Reader::decodeCode(Ref row, int counters[], int countersCount, - int rowOffset){ - recordPattern(row, rowOffset, counters, countersCount); + int rowOffset) { + if (!recordPattern(row, rowOffset, counters, countersCount)) { + throw ReaderException(""); + } unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1; for (int d = 0; d < CODE_PATTERNS_LENGTH; d++) { diff --git a/cpp/core/src/zxing/oned/Code39Reader.cpp b/cpp/core/src/zxing/oned/Code39Reader.cpp index bcf1b68f..9a2a82a1 100644 --- a/cpp/core/src/zxing/oned/Code39Reader.cpp +++ b/cpp/core/src/zxing/oned/Code39Reader.cpp @@ -102,7 +102,9 @@ namespace oned { char decodedChar; int lastStart; do { - recordPattern(row, nextStart, counters, countersLen); + if (!recordPattern(row, nextStart, counters, countersLen)) { + throw ReaderException(""); + } int pattern = toNarrowWidePattern(counters, countersLen); if (pattern < 0) { throw ReaderException("pattern < 0"); diff --git a/cpp/core/src/zxing/oned/ITFReader.cpp b/cpp/core/src/zxing/oned/ITFReader.cpp index dca48a64..aa8e948f 100644 --- a/cpp/core/src/zxing/oned/ITFReader.cpp +++ b/cpp/core/src/zxing/oned/ITFReader.cpp @@ -134,7 +134,9 @@ namespace zxing { while (payloadStart < payloadEnd) { // Get 10 runs of black/white. - recordPattern(row, payloadStart, counterDigitPair, counterDigitPairLen); + if (!recordPattern(row, payloadStart, counterDigitPair, counterDigitPairLen)) { + throw ReaderException(""); + } // Split them into each array for (int k = 0; k < 5; k++) { int twoK = k << 1; diff --git a/cpp/core/src/zxing/oned/OneDReader.cpp b/cpp/core/src/zxing/oned/OneDReader.cpp index 0ab71b70..706e4043 100644 --- a/cpp/core/src/zxing/oned/OneDReader.cpp +++ b/cpp/core/src/zxing/oned/OneDReader.cpp @@ -112,13 +112,16 @@ namespace zxing { // if there's exactly two points (which there should be), flip the x coordinate // if there's not exactly 2, I don't know what do do with it if (points.size() == 2) { - Ref pointZero(new OneDResultPoint(width - points[0]->getX() - 1, points[0]->getY())); + Ref pointZero(new OneDResultPoint(width - points[0]->getX() - 1, + points[0]->getY())); points[0] = pointZero; - Ref pointOne(new OneDResultPoint(width - points[1]->getX() - 1, points[1]->getY())); + Ref pointOne(new OneDResultPoint(width - points[1]->getX() - 1, + points[1]->getY())); points[1] = pointOne; - result.reset(new Result(result->getText(),result->getRawBytes(),points,result->getBarcodeFormat())); + result.reset(new Result(result->getText(), result->getRawBytes(), points, + result->getBarcodeFormat())); } return result; } @@ -127,7 +130,8 @@ namespace zxing { throw ReaderException("doDecode() failed"); } - unsigned int OneDReader::patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance) { + unsigned int OneDReader::patternMatchVariance(int counters[], int countersSize, + const int pattern[], int maxIndividualVariance) { int numCounters = countersSize; unsigned int total = 0; unsigned int patternLength = 0; @@ -159,14 +163,14 @@ namespace zxing { return totalVariance / total; } - void OneDReader::recordPattern(Ref row, int start, int counters[], int countersCount){ + bool OneDReader::recordPattern(Ref row, int start, int counters[], int countersCount) { int numCounters = countersCount;//sizeof(counters) / sizeof(int); for (int i = 0; i < numCounters; i++) { counters[i] = 0; } int end = row->getSize(); if (start >= end) { - throw ReaderException("recordPattern: start >= end"); + return false; } bool isWhite = !row->get(start); int counterPosition = 0; @@ -189,8 +193,9 @@ namespace zxing { // If we read fully the last section of pixels and filled up our counters -- or filled // the last counter but ran off the side of the image, OK. Otherwise, a problem. if (!(counterPosition == numCounters || (counterPosition == numCounters - 1 && i == end))) { - throw ReaderException("recordPattern"); + return false; } + return true; } OneDReader::~OneDReader() { diff --git a/cpp/core/src/zxing/oned/OneDReader.h b/cpp/core/src/zxing/oned/OneDReader.h index bace9a81..fdd1d023 100644 --- a/cpp/core/src/zxing/oned/OneDReader.h +++ b/cpp/core/src/zxing/oned/OneDReader.h @@ -41,7 +41,7 @@ namespace zxing { static unsigned int patternMatchVariance(int counters[], int countersSize, const int pattern[], int maxIndividualVariance); - static void recordPattern(Ref row, int start, int counters[], int countersCount); + static bool recordPattern(Ref row, int start, int counters[], int countersCount); virtual ~OneDReader(); }; } diff --git a/cpp/core/src/zxing/oned/UPCEANReader.cpp b/cpp/core/src/zxing/oned/UPCEANReader.cpp index cec13e46..b8a66d6d 100644 --- a/cpp/core/src/zxing/oned/UPCEANReader.cpp +++ b/cpp/core/src/zxing/oned/UPCEANReader.cpp @@ -233,10 +233,11 @@ namespace zxing { sizeof(START_END_PATTERN) / sizeof(int)); } -// int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, int** patterns/*[][]*/, int paterns1Len, int paterns2Len) int UPCEANReader::decodeDigit(Ref row, int counters[], int countersLen, int rowOffset, UPC_EAN_PATTERNS patternType) { - recordPattern(row, rowOffset, counters, countersLen); + if (!recordPattern(row, rowOffset, counters, countersLen)) { + throw ReaderException(""); + } unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept int bestMatch = -1;