C++ port: Hints infrastructure was added in r1499. This changeset implements reader...
[zxing.git] / cpp / core / src / zxing / oned / MultiFormatOneDReader.cpp
index ea44471..904601e 100644 (file)
 
 namespace zxing {
        namespace oned {
-               MultiFormatOneDReader::MultiFormatOneDReader() : readers() {
-                       readers.push_back(Ref<OneDReader>(new MultiFormatUPCEANReader()));
-                       readers.push_back(Ref<OneDReader>(new Code39Reader()));
-                       readers.push_back(Ref<OneDReader>(new Code128Reader()));
-                       readers.push_back(Ref<OneDReader>(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){