X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=cpp%2Fcore%2Fsrc%2Fzxing%2Foned%2FMultiFormatUPCEANReader.cpp;h=a11243c8d794c3edac4164a1fca08aeed1e6f785;hb=4c7d60a47387c3b95ce82e35a6c61ba3243f64f5;hp=43319110462dba052409478a04d1941a053ec0b6;hpb=d39dc833bf39314664b24470f2f572e8534b9379;p=zxing.git diff --git a/cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp b/cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp index 43319110..a11243c8 100644 --- a/cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp +++ b/cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -30,19 +31,31 @@ namespace zxing { namespace oned { - MultiFormatUPCEANReader::MultiFormatUPCEANReader(){ - readers = new std::vector(); - readers->push_back(new EAN13Reader()); - // UPC-A is covered by EAN-13 - readers->push_back(new EAN8Reader()); - readers->push_back(new UPCEReader()); + MultiFormatUPCEANReader::MultiFormatUPCEANReader(DecodeHints hints) : readers() { + if (hints.containsFormat(BarcodeFormat_EAN_13)) { + readers.push_back(Ref(new EAN13Reader())); + } else if (hints.containsFormat(BarcodeFormat_UPC_A)) { + readers.push_back(Ref(new UPCAReader())); + } + if (hints.containsFormat(BarcodeFormat_EAN_8)) { + readers.push_back(Ref(new EAN8Reader())); + } + if (hints.containsFormat(BarcodeFormat_UPC_E)) { + readers.push_back(Ref(new UPCEReader())); + } + if (readers.size() == 0) { + readers.push_back(Ref(new EAN13Reader())); + // UPC-A is covered by EAN-13 + readers.push_back(Ref(new EAN8Reader())); + readers.push_back(Ref(new UPCEReader())); + } } - + Ref MultiFormatUPCEANReader::decodeRow(int rowNumber, Ref row){ // Compute this location once and reuse it on multiple implementations - int size = readers->size(); + int size = readers.size(); for (int i = 0; i < size; i++) { - OneDReader* reader = (*readers)[i]; + Ref reader = readers[i]; Ref result; try { result = reader->decodeRow(rowNumber, row);//decodeRow(rowNumber, row, startGuardPattern); @@ -60,7 +73,7 @@ namespace zxing { // UPC-A. So we special case it here, and convert an EAN-13 result to a UPC-A // result if appropriate. if (result->getBarcodeFormat() == BarcodeFormat_EAN_13) { - std::string& text = (result->getText())->getText(); + const std::string& text = (result->getText())->getText(); if (text[0] == '0') { Ref resultString(new String(text.substr(1))); Ref res(new Result(resultString, result->getRawBytes(), result->getResultPoints(), BarcodeFormat_UPC_A)); @@ -71,13 +84,5 @@ namespace zxing { } throw ReaderException("No EAN code detected"); } - - MultiFormatUPCEANReader::~MultiFormatUPCEANReader(){ - int size = readers->size(); - for (int i = 0; i < size; i++) { - delete (*readers)[i]; - } - delete readers; - } } -} \ No newline at end of file +}