Converted tabs to spaces.
authordswitkin@google.com <dswitkin@google.com@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Wed, 25 Aug 2010 18:39:14 +0000 (18:39 +0000)
committerdswitkin@google.com <dswitkin@google.com@59b500cc-1b3d-0410-9834-0bbf25fbcc57>
Wed, 25 Aug 2010 18:39:14 +0000 (18:39 +0000)
git-svn-id: http://zxing.googlecode.com/svn/trunk@1561 59b500cc-1b3d-0410-9834-0bbf25fbcc57

cpp/core/src/zxing/oned/EAN13Reader.h
cpp/core/src/zxing/oned/EAN8Reader.h
cpp/core/src/zxing/oned/MultiFormatOneDReader.cpp
cpp/core/src/zxing/oned/MultiFormatOneDReader.h
cpp/core/src/zxing/oned/MultiFormatUPCEANReader.cpp
cpp/core/src/zxing/oned/MultiFormatUPCEANReader.h
cpp/core/src/zxing/oned/UPCAReader.cpp
cpp/core/src/zxing/oned/UPCAReader.h
cpp/core/src/zxing/oned/UPCEReader.cpp
cpp/core/src/zxing/oned/UPCEReader.h

index fa7b7e8..3942643 100644 (file)
 #include <zxing/Result.h>
 
 namespace zxing {
-       namespace oned {
-               class EAN13Reader : public UPCEANReader {
+  namespace oned {
+    class EAN13Reader : public UPCEANReader {
 
-               private:
-                       static bool determineFirstDigit(std::string& resultString, int lgPatternFound);
+    private:
+      static bool determineFirstDigit(std::string& resultString, int lgPatternFound);
 
-               public:
-                       EAN13Reader();
+    public:
+      EAN13Reader();
 
-                       int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
-                           std::string& resultString);
+      int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
+          std::string& resultString);
 
-                       BarcodeFormat getBarcodeFormat();
-               };
-       }
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
 }
 
 #endif
index 7d3e8c5..5709a6b 100644 (file)
 #include <zxing/Result.h>
 
 namespace zxing {
-       namespace oned {
-               class EAN8Reader : public UPCEANReader {
+  namespace oned {
+    class EAN8Reader : public UPCEANReader {
 
-               public:
-                       EAN8Reader();
+    public:
+      EAN8Reader();
 
-                       int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
-                           std::string& resultString);
+      int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
+          std::string& resultString);
 
-                       BarcodeFormat getBarcodeFormat();
-               };
-       }
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
 }
 
 #endif
index b5f3010..0179206 100644 (file)
@@ -26,8 +26,8 @@
 #include <zxing/ReaderException.h>
 
 namespace zxing {
-       namespace oned {
-               MultiFormatOneDReader::MultiFormatOneDReader(DecodeHints hints) : readers() {
+  namespace oned {
+    MultiFormatOneDReader::MultiFormatOneDReader(DecodeHints hints) : readers() {
       if (hints.containsFormat(BarcodeFormat_EAN_13) ||
           hints.containsFormat(BarcodeFormat_EAN_8) ||
           hints.containsFormat(BarcodeFormat_UPC_A) ||
@@ -49,18 +49,18 @@ namespace zxing {
         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();
-                       for (int i = 0; i < size; i++) {
-                               OneDReader* reader = readers[i];
-                               Ref<Result> result = reader->decodeRow(rowNumber, row);
-                               if (!result.empty()) {
-                                 return result;
-                               }
-                       }
-                       return Ref<Result>();
-               }
-       }
+    Ref<Result> MultiFormatOneDReader::decodeRow(int rowNumber, Ref<BitArray> row) {
+      int size = readers.size();
+      for (int i = 0; i < size; i++) {
+        OneDReader* reader = readers[i];
+        Ref<Result> result = reader->decodeRow(rowNumber, row);
+        if (!result.empty()) {
+          return result;
+        }
+      }
+      return Ref<Result>();
+    }
+  }
 }
index 3342112..c939f66 100644 (file)
 #include <zxing/oned/OneDReader.h>
 
 namespace zxing {
-       namespace oned {
-               class MultiFormatOneDReader : public OneDReader {
-                       
-               private:
-                       std::vector<Ref<OneDReader> > readers;
-               public:
-                       MultiFormatOneDReader(DecodeHints hints);
-                       
-                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);                        
-               };
-       }
+  namespace oned {
+    class MultiFormatOneDReader : public OneDReader {
+
+    private:
+      std::vector<Ref<OneDReader> > readers;
+    public:
+      MultiFormatOneDReader(DecodeHints hints);
+
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+    };
+  }
 }
 
 #endif
index eaa7ed6..a5582f0 100644 (file)
 #include <math.h>
 
 namespace zxing {
-       namespace oned {
+  namespace oned {
 
-               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()));
-                 }
-               }
+    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();
-                       for (int i = 0; i < size; i++) {
-                               Ref<OneDReader> reader = readers[i];
-                               Ref<Result> result = reader->decodeRow(rowNumber, row);
-                               if (result.empty()) {
-                                 continue;
-                               }
+    Ref<Result> MultiFormatUPCEANReader::decodeRow(int rowNumber, Ref<BitArray> row) {
+      // Compute this location once and reuse it on multiple implementations
+      int size = readers.size();
+      for (int i = 0; i < size; i++) {
+        Ref<OneDReader> reader = readers[i];
+        Ref<Result> result = reader->decodeRow(rowNumber, row);
+        if (result.empty()) {
+          continue;
+        }
 
-                               // Special case: a 12-digit code encoded in UPC-A is identical to a "0"
-                               // followed by those 12 digits encoded as EAN-13. Each will recognize such a code,
-                               // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with "0".
-                               // Individually these are correct and their readers will both read such a code
-                               // and correctly call it EAN-13, or UPC-A, respectively.
-                               //
-                               // In this case, if we've been looking for both types, we'd like to call it
-                               // a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read
-                               // 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) {
-                                       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));
-                                               return res;
-                                       }
-                               }
-                               return result;
-                       }
-                       return Ref<Result>();
-               }
-       }
+        // Special case: a 12-digit code encoded in UPC-A is identical to a "0"
+        // followed by those 12 digits encoded as EAN-13. Each will recognize such a code,
+        // UPC-A as a 12-digit string and EAN-13 as a 13-digit string starting with "0".
+        // Individually these are correct and their readers will both read such a code
+        // and correctly call it EAN-13, or UPC-A, respectively.
+        //
+        // In this case, if we've been looking for both types, we'd like to call it
+        // a UPC-A code. But for efficiency we only run the EAN-13 decoder to also read
+        // 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) {
+          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));
+            return res;
+          }
+        }
+        return result;
+      }
+      return Ref<Result>();
+    }
+  }
 }
index b0bae4f..30e5c4d 100644 (file)
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
 #include <zxing/oned/OneDReader.h>
 
 namespace zxing {
-       namespace oned {
-               class MultiFormatUPCEANReader : public OneDReader {
-                       
-               private:
-                       std::vector<Ref<OneDReader> > readers;
-               public:
-                       MultiFormatUPCEANReader(DecodeHints hints);
-                       
-                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+  namespace oned {
+    class MultiFormatUPCEANReader : public OneDReader {
+
+    private:
+      std::vector<Ref<OneDReader> > readers;
+    public:
+      MultiFormatUPCEANReader(DecodeHints hints);
+
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
     };
-       }
+  }
 }
 
 #endif
index e2075c1..cc379a7 100644 (file)
 #include <zxing/ReaderException.h>
 
 namespace zxing {
-       namespace oned {
-               UPCAReader::UPCAReader() : ean13Reader() {
-               }
-
-               Ref<Result> UPCAReader::decodeRow(int rowNumber, Ref<BitArray> row) {
-                       return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row));
-               }
-
-               Ref<Result> UPCAReader::decodeRow(int rowNumber, Ref<BitArray> row, int startGuardRange[]) {
-                       return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row, startGuardRange));
-               }
-
-               Ref<Result> UPCAReader::decode(Ref<BinaryBitmap> image, DecodeHints hints) {
-                       return maybeReturnResult(ean13Reader.decode(image, hints));
-               }
-
-               int UPCAReader::decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
-                   std::string& resultString) {
-                       return ean13Reader.decodeMiddle(row, startRange, startRangeLen, resultString);
-               }
-
-               Ref<Result> UPCAReader::maybeReturnResult(Ref<Result> result) {
-                 if (result.empty()) {
-                   return result;
-                 }
-                       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));
-                               return res;
-                       }
-                       return Ref<Result>();
-               }
-
-               BarcodeFormat UPCAReader::getBarcodeFormat(){
-                       return BarcodeFormat_UPC_A;
-               }
-       }
+  namespace oned {
+    UPCAReader::UPCAReader() : ean13Reader() {
+    }
+
+    Ref<Result> UPCAReader::decodeRow(int rowNumber, Ref<BitArray> row) {
+      return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row));
+    }
+
+    Ref<Result> UPCAReader::decodeRow(int rowNumber, Ref<BitArray> row, int startGuardRange[]) {
+      return maybeReturnResult(ean13Reader.decodeRow(rowNumber, row, startGuardRange));
+    }
+
+    Ref<Result> UPCAReader::decode(Ref<BinaryBitmap> image, DecodeHints hints) {
+      return maybeReturnResult(ean13Reader.decode(image, hints));
+    }
+
+    int UPCAReader::decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
+        std::string& resultString) {
+      return ean13Reader.decodeMiddle(row, startRange, startRangeLen, resultString);
+    }
+
+    Ref<Result> UPCAReader::maybeReturnResult(Ref<Result> result) {
+      if (result.empty()) {
+        return result;
+      }
+      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));
+        return res;
+      }
+      return Ref<Result>();
+    }
+
+    BarcodeFormat UPCAReader::getBarcodeFormat(){
+      return BarcodeFormat_UPC_A;
+    }
+  }
 }
index d0d794f..4a06afd 100644 (file)
 #include <zxing/DecodeHints.h>
 
 namespace zxing {
-       namespace oned {
-               class UPCAReader : public UPCEANReader {
+  namespace oned {
+    class UPCAReader : public UPCEANReader {
 
-               private:
-                       EAN13Reader ean13Reader;
-                       static Ref<Result> maybeReturnResult(Ref<Result> result);
+    private:
+      EAN13Reader ean13Reader;
+      static Ref<Result> maybeReturnResult(Ref<Result> result);
 
-               public:
-                       UPCAReader();
+    public:
+      UPCAReader();
 
-                       int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
-                           std::string& resultString);
+      int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
+          std::string& resultString);
 
-                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
-                       Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row, int startGuardRange[]);
-                       Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row);
+      Ref<Result> decodeRow(int rowNumber, Ref<BitArray> row, int startGuardRange[]);
+      Ref<Result> decode(Ref<BinaryBitmap> image, DecodeHints hints);
 
-                       BarcodeFormat getBarcodeFormat();
-               };
-       }
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
 }
 
 #endif
index 7772ed9..cd36492 100644 (file)
 #include <zxing/ReaderException.h>
 
 namespace zxing {
-       namespace oned {
-
-               /**
-                * The pattern that marks the middle, and end, of a UPC-E pattern.
-                * There is no "second half" to a UPC-E barcode.
-                */
-               static const int MIDDLE_END_PATTERN[6] = {1, 1, 1, 1, 1, 1};
-
-               /**
-                * See {@link #L_AND_G_PATTERNS}; these values similarly represent patterns of
-                * even-odd parity encodings of digits that imply both the number system (0 or 1)
-                * used, and the check digit.
-                */
-               static const int NUMSYS_AND_CHECK_DIGIT_PATTERNS[2][10] = {
-                       {0x38, 0x34, 0x32, 0x31, 0x2C, 0x26, 0x23, 0x2A, 0x29, 0x25},
-                       {0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A}
-               };
-
-               UPCEReader::UPCEReader() {
-               }
-
-               int UPCEReader::decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
-                   std::string& resultString) {
-                       const int countersLen = 4;
-                       int counters[countersLen] = { 0, 0, 0, 0 };
-
-                       int end = row->getSize();
-                       int rowOffset = startRange[1];
-                       int lgPatternFound = 0;
-
-                       for (int x = 0; x < 6 && rowOffset < end; x++) {
-                               int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
-                                   UPC_EAN_PATTERNS_L_AND_G_PATTERNS);
-                               if (bestMatch < 0) {
+  namespace oned {
+
+    /**
+     * The pattern that marks the middle, and end, of a UPC-E pattern.
+     * There is no "second half" to a UPC-E barcode.
+     */
+    static const int MIDDLE_END_PATTERN[6] = {1, 1, 1, 1, 1, 1};
+
+    /**
+     * See {@link #L_AND_G_PATTERNS}; these values similarly represent patterns of
+     * even-odd parity encodings of digits that imply both the number system (0 or 1)
+     * used, and the check digit.
+     */
+    static const int NUMSYS_AND_CHECK_DIGIT_PATTERNS[2][10] = {
+      {0x38, 0x34, 0x32, 0x31, 0x2C, 0x26, 0x23, 0x2A, 0x29, 0x25},
+      {0x07, 0x0B, 0x0D, 0x0E, 0x13, 0x19, 0x1C, 0x15, 0x16, 0x1A}
+    };
+
+    UPCEReader::UPCEReader() {
+    }
+
+    int UPCEReader::decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
+        std::string& resultString) {
+      const int countersLen = 4;
+      int counters[countersLen] = { 0, 0, 0, 0 };
+
+      int end = row->getSize();
+      int rowOffset = startRange[1];
+      int lgPatternFound = 0;
+
+      for (int x = 0; x < 6 && rowOffset < end; x++) {
+        int bestMatch = decodeDigit(row, counters, countersLen, rowOffset,
+            UPC_EAN_PATTERNS_L_AND_G_PATTERNS);
+        if (bestMatch < 0) {
           return -1;
         }
-                               resultString.append(1, (char) ('0' + bestMatch % 10));
-                               for (int i = 0; i < countersLen; i++) {
-                                       rowOffset += counters[i];
-                               }
-                               if (bestMatch >= 10) {
-                                       lgPatternFound |= 1 << (5 - x);
-                               }
-                       }
-
-                       if (!determineNumSysAndCheckDigit(resultString, lgPatternFound)) {
+        resultString.append(1, (char) ('0' + bestMatch % 10));
+        for (int i = 0; i < countersLen; i++) {
+          rowOffset += counters[i];
+        }
+        if (bestMatch >= 10) {
+          lgPatternFound |= 1 << (5 - x);
+        }
+      }
+
+      if (!determineNumSysAndCheckDigit(resultString, lgPatternFound)) {
         return -1;
       }
-                       return rowOffset;
-               }
-
-               int* UPCEReader::decodeEnd(Ref<BitArray> row, int endStart) {
-                       return findGuardPattern(row, endStart, true, MIDDLE_END_PATTERN,
-                           sizeof(MIDDLE_END_PATTERN) / sizeof(int));
-               }
-
-               bool UPCEReader::checkChecksum(std::string s){
-                       return UPCEANReader::checkChecksum(convertUPCEtoUPCA(s));
-               }
-
-
-               bool UPCEReader::determineNumSysAndCheckDigit(std::string& resultString, int lgPatternFound) {
-                       for (int numSys = 0; numSys <= 1; numSys++) {
-                               for (int d = 0; d < 10; d++) {
-                                       if (lgPatternFound == NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {
-                                               resultString.insert(0, 1, (char) ('0' + numSys));
-                                               resultString.append(1, (char) ('0' + d));
-                                               return true;
-                                       }
-                               }
-                       }
-                       return false;
-               }
-
-               /**
-                * Expands a UPC-E value back into its full, equivalent UPC-A code value.
-                *
-                * @param upce UPC-E code as string of digits
-                * @return equivalent UPC-A code as string of digits
-                */
-               std::string UPCEReader::convertUPCEtoUPCA(std::string upce) {
-                       std::string result;
-                       result.append(1, upce[0]);
-                       char lastChar = upce[6];
-                       switch (lastChar) {
-                               case '0':
-                               case '1':
-                               case '2':
-                                       result.append(upce.substr(1,2));
-                                       result.append(1, lastChar);
-                                       result.append("0000");
-                                       result.append(upce.substr(3,3));
-                                       break;
-                               case '3':
-                                       result.append(upce.substr(1,3));
-                                       result.append("00000");
-                                       result.append(upce.substr(4,2));
-                                       break;
-                               case '4':
-                                       result.append(upce.substr(1,4));
-                                       result.append("00000");
-                                       result.append(1, upce[5]);
-                                       break;
-                               default:
-                                       result.append(upce.substr(1,5));
-                                       result.append("0000");
-                                       result.append(1, lastChar);
-                                       break;
-                       }
-                       result.append(1, upce[7]);
-                       return result;
-               }
-
-
-               BarcodeFormat UPCEReader::getBarcodeFormat() {
-                       return BarcodeFormat_UPC_E;
-               }
-       }
+      return rowOffset;
+    }
+
+    int* UPCEReader::decodeEnd(Ref<BitArray> row, int endStart) {
+      return findGuardPattern(row, endStart, true, MIDDLE_END_PATTERN,
+          sizeof(MIDDLE_END_PATTERN) / sizeof(int));
+    }
+
+    bool UPCEReader::checkChecksum(std::string s){
+      return UPCEANReader::checkChecksum(convertUPCEtoUPCA(s));
+    }
+
+
+    bool UPCEReader::determineNumSysAndCheckDigit(std::string& resultString, int lgPatternFound) {
+      for (int numSys = 0; numSys <= 1; numSys++) {
+        for (int d = 0; d < 10; d++) {
+          if (lgPatternFound == NUMSYS_AND_CHECK_DIGIT_PATTERNS[numSys][d]) {
+            resultString.insert(0, 1, (char) ('0' + numSys));
+            resultString.append(1, (char) ('0' + d));
+            return true;
+          }
+        }
+      }
+      return false;
+    }
+
+    /**
+     * Expands a UPC-E value back into its full, equivalent UPC-A code value.
+     *
+     * @param upce UPC-E code as string of digits
+     * @return equivalent UPC-A code as string of digits
+     */
+    std::string UPCEReader::convertUPCEtoUPCA(std::string upce) {
+      std::string result;
+      result.append(1, upce[0]);
+      char lastChar = upce[6];
+      switch (lastChar) {
+        case '0':
+        case '1':
+        case '2':
+          result.append(upce.substr(1,2));
+          result.append(1, lastChar);
+          result.append("0000");
+          result.append(upce.substr(3,3));
+          break;
+        case '3':
+          result.append(upce.substr(1,3));
+          result.append("00000");
+          result.append(upce.substr(4,2));
+          break;
+        case '4':
+          result.append(upce.substr(1,4));
+          result.append("00000");
+          result.append(1, upce[5]);
+          break;
+        default:
+          result.append(upce.substr(1,5));
+          result.append("0000");
+          result.append(1, lastChar);
+          break;
+      }
+      result.append(1, upce[7]);
+      return result;
+    }
+
+
+    BarcodeFormat UPCEReader::getBarcodeFormat() {
+      return BarcodeFormat_UPC_E;
+    }
+  }
 }
index a42f29f..42a4fd0 100644 (file)
 #include <zxing/Result.h>
 
 namespace zxing {
-       namespace oned {
-               class UPCEReader : public UPCEANReader {
+  namespace oned {
+    class UPCEReader : public UPCEANReader {
 
-               private:
-                       static bool determineNumSysAndCheckDigit(std::string& resultString, int lgPatternFound);
-               protected:
-                       int* decodeEnd(Ref<BitArray> row, int endStart);
-                       bool checkChecksum(std::string s);
-               public:
-                       UPCEReader();
+    private:
+      static bool determineNumSysAndCheckDigit(std::string& resultString, int lgPatternFound);
+    protected:
+      int* decodeEnd(Ref<BitArray> row, int endStart);
+      bool checkChecksum(std::string s);
+    public:
+      UPCEReader();
 
-                       int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
-                           std::string& resultString);
-                       static std::string convertUPCEtoUPCA(std::string upce);
+      int decodeMiddle(Ref<BitArray> row, int startRange[], int startRangeLen,
+          std::string& resultString);
+      static std::string convertUPCEtoUPCA(std::string upce);
 
-                       BarcodeFormat getBarcodeFormat();
-               };
-       }
+      BarcodeFormat getBarcodeFormat();
+    };
+  }
 }
 
 #endif