#include <zxing/ReaderException.h>
#include <math.h>
#include <string.h>
+#include <sstream>
namespace zxing {
namespace oned {
counters[counterPosition]++;
} else {
if (counterPosition == patternLength - 1) {
- int bestVariance = MAX_AVG_VARIANCE;
+ unsigned int bestVariance = MAX_AVG_VARIANCE;
int bestMatch = -1;
for (int startCode = CODE_START_A; startCode <= CODE_START_C; startCode++) {
- int variance = patternMatchVariance(counters, sizeof(counters)/sizeof(int), CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE);
+ unsigned int variance = patternMatchVariance(counters, sizeof(counters)/sizeof(int), CODE_PATTERNS[startCode], MAX_INDIVIDUAL_VARIANCE);
if (variance < bestVariance) {
bestVariance = variance;
bestMatch = startCode;
int Code128Reader::decodeCode(Ref<BitArray> row, int counters[], int countersCount, int rowOffset){
recordPattern(row, rowOffset, counters, countersCount);
- int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept
+ unsigned int bestVariance = MAX_AVG_VARIANCE; // worst variance we'll accept
int bestMatch = -1;
for (int d = 0; d < CODE_PATTERNS_LENGTH; d++) {
int pattern[countersLength];
pattern[ind] = CODE_PATTERNS[d][ind];
}
// memcpy(pattern, CODE_PATTERNS[d], countersLength);
- int variance = patternMatchVariance(counters, countersCount, pattern, MAX_INDIVIDUAL_VARIANCE);
+ unsigned int variance = patternMatchVariance(counters, countersCount, pattern, MAX_INDIVIDUAL_VARIANCE);
if (variance < bestVariance) {
bestVariance = variance;
bestMatch = d;
bool isNextShifted = false;
std::string tmpResultString;
-
+ std::stringstream tmpResultSStr; // used if its Code 128C
int lastStart = startPatternInfo[0];
int nextStart = startPatternInfo[1];
}
break;
case CODE_CODE_C:
+ // the code read in this case is the number encoded directly
if (code < 100) {
- if (code < 10) {
- tmpResultString.append(1, '0');
- }
- tmpResultString.append(1, code);
+ if (code < 10)
+ tmpResultSStr << '0';
+ tmpResultSStr << code;
} else {
if (code != CODE_STOP) {
lastCharacterWasPrintable = false;
throw ReaderException("");
}
+ if (codeSet == CODE_CODE_C)
+ tmpResultString.append(tmpResultSStr.str());
+
// Need to pull out the check digits from string
int resultLength = tmpResultString.length();
// Only bother if the result had at least one character, and if the checksum digit happened to