#include <zxing/oned/EAN13Reader.h>
#include <zxing/oned/EAN8Reader.h>
#include <zxing/oned/UPCEReader.h>
+#include <zxing/oned/UPCAReader.h>
#include <zxing/oned/OneDResultPoint.h>
#include <zxing/common/Array.h>
#include <zxing/ReaderException.h>
namespace zxing {
namespace oned {
- MultiFormatUPCEANReader::MultiFormatUPCEANReader(){
- readers = new std::vector<OneDReader*>();
- 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<OneDReader>(new EAN13Reader()));
+ } else if (hints.containsFormat(BarcodeFormat_UPC_A)) {
+ readers.push_back(Ref<OneDReader>(new UPCAReader()));
+ }
+ if (hints.containsFormat(BarcodeFormat_EAN_8)) {
+ readers.push_back(Ref<OneDReader>(new EAN8Reader()));
+ }
+ if (hints.containsFormat(BarcodeFormat_UPC_E)) {
+ readers.push_back(Ref<OneDReader>(new UPCEReader()));
+ }
+ if (readers.size() == 0) {
+ readers.push_back(Ref<OneDReader>(new EAN13Reader()));
+ // UPC-A is covered by EAN-13
+ readers.push_back(Ref<OneDReader>(new EAN8Reader()));
+ readers.push_back(Ref<OneDReader>(new UPCEReader()));
+ }
}
-
+
Ref<Result> MultiFormatUPCEANReader::decodeRow(int rowNumber, Ref<BitArray> 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<OneDReader> reader = readers[i];
Ref<Result> result;
try {
result = reader->decodeRow(rowNumber, row);//decodeRow(rowNumber, row, startGuardPattern);
// 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<String> resultString(new String(text.substr(1)));
Ref<Result> res(new Result(resultString, result->getRawBytes(), result->getResultPoints(), BarcodeFormat_UPC_A));
}
throw ReaderException("No EAN code detected");
}
-
- MultiFormatUPCEANReader::~MultiFormatUPCEANReader(){
- delete readers;
- }
}
-}
\ No newline at end of file
+}