C++ port: Hints infrastructure was added in r1499. This changeset implements reader...
[zxing.git] / cpp / core / src / zxing / oned / MultiFormatOneDReader.cpp
index cfb4b10..904601e 100644 (file)
 
 namespace zxing {
        namespace oned {
-               MultiFormatOneDReader::MultiFormatOneDReader(){
-                       readers = new std::vector<OneDReader*>();
-                       readers->push_back(new MultiFormatUPCEANReader());
-                       readers->push_back(new Code39Reader());
-                       readers->push_back(new Code128Reader());
-                       readers->push_back(new ITFReader());
+               MultiFormatOneDReader::MultiFormatOneDReader(DecodeHints hints) : readers() {
+      if (hints.containsFormat(BarcodeFormat_EAN_13) ||
+          hints.containsFormat(BarcodeFormat_EAN_8) ||
+          hints.containsFormat(BarcodeFormat_UPC_A) ||
+          hints.containsFormat(BarcodeFormat_UPC_E)) {
+        readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader(hints)));
+      }
+      if (hints.containsFormat(BarcodeFormat_CODE_39)) {
+        readers.push_back(Ref<OneDReader>(new Code39Reader()));
+      }
+      if (hints.containsFormat(BarcodeFormat_CODE_128)) {
+        readers.push_back(Ref<OneDReader>(new Code128Reader()));
+      }
+      if (hints.containsFormat(BarcodeFormat_ITF)) {
+        readers.push_back(Ref<OneDReader>(new ITFReader()));
+      }
+      if (readers.size() == 0) {
+        readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader(hints)));
+        readers.push_back(Ref<OneDReader>(new Code39Reader()));
+        readers.push_back(Ref<OneDReader>(new Code128Reader()));
+        readers.push_back(Ref<OneDReader>(new ITFReader()));
+      }
                }
                
                Ref<Result> MultiFormatOneDReader::decodeRow(int rowNumber, Ref<BitArray> row){
-                       int size = readers->size();
+                       int size = readers.size();
                        for (int i = 0; i < size; i++) {
-                               OneDReader* reader = (*readers)[i];
+                               OneDReader* reader = readers[i];
                                try {
                                        return reader->decodeRow(rowNumber, row);
                                } catch (ReaderException re) {
@@ -48,12 +64,5 @@ namespace zxing {
                        }
                        throw ReaderException("No code detected");
                }
-               MultiFormatOneDReader::~MultiFormatOneDReader(){
-                       int size = readers->size();
-                       for (int i = 0; i < size; i++) {
-                               delete (*readers)[i];
-                       }
-                       delete readers;
-               }
        }
-}
\ No newline at end of file
+}