diff --git a/cpp/QrCode.cpp b/cpp/QrCode.cpp index d98d2de..5fda688 100644 --- a/cpp/QrCode.cpp +++ b/cpp/QrCode.cpp @@ -43,6 +43,16 @@ QrCode::Ecc::Ecc(int ord, int fb) : formatBits(fb) {} +int QrCode::Ecc::getOrdinal() const { + return ordinal; +} + + +int QrCode::Ecc::getFormatBits() const { + return formatBits; +} + + const QrCode::Ecc QrCode::Ecc::LOW (0, 1); const QrCode::Ecc QrCode::Ecc::MEDIUM (1, 0); const QrCode::Ecc QrCode::Ecc::QUARTILE(2, 3); @@ -224,7 +234,7 @@ void QrCode::drawFunctionPatterns() { void QrCode::drawFormatBits(int mask) { // Calculate error correction code and pack bits - int data = errorCorrectionLevel.formatBits << 3 | mask; // errCorrLvl is uint2, mask is uint3 + int data = errorCorrectionLevel.getFormatBits() << 3 | mask; // errCorrLvl is uint2, mask is uint3 int rem = data; for (int i = 0; i < 10; i++) rem = (rem << 1) ^ ((rem >> 9) * 0x537); @@ -309,8 +319,8 @@ vector QrCode::appendErrorCorrection(const vector &data) const throw "Invalid argument"; // Calculate parameter numbers - int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[errorCorrectionLevel.ordinal][version]; - int blockEccLen = ECC_CODEWORDS_PER_BLOCK[errorCorrectionLevel.ordinal][version]; + int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[errorCorrectionLevel.getOrdinal()][version]; + int blockEccLen = ECC_CODEWORDS_PER_BLOCK[errorCorrectionLevel.getOrdinal()][version]; int rawCodewords = getNumRawDataModules(version) / 8; int numShortBlocks = numBlocks - rawCodewords % numBlocks; int shortBlockLen = rawCodewords / numBlocks; @@ -537,8 +547,8 @@ int QrCode::getNumDataCodewords(int ver, const Ecc &ecl) { if (ver < 1 || ver > 40) throw "Version number out of range"; return getNumRawDataModules(ver) / 8 - - ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] - * NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver]; + - ECC_CODEWORDS_PER_BLOCK[ecl.getOrdinal()][ver] + * NUM_ERROR_CORRECTION_BLOCKS[ecl.getOrdinal()][ver]; } diff --git a/cpp/QrCode.hpp b/cpp/QrCode.hpp index 20f4129..10500b3 100644 --- a/cpp/QrCode.hpp +++ b/cpp/QrCode.hpp @@ -49,11 +49,17 @@ class QrCode final { public: const static Ecc LOW, MEDIUM, QUARTILE, HIGH; // Fields. - public: const int ordinal; // (Public) In the range 0 to 3 (unsigned 2-bit integer). - public: const int formatBits; // (Package-private) In the range 0 to 3 (unsigned 2-bit integer). + private: int ordinal; + private: int formatBits; // Constructor. private: Ecc(int ord, int fb); + + // (Public) Returns a value in the range 0 to 3 (unsigned 2-bit integer). + public: int getOrdinal() const; + + // (Package-private) Returns a value in the range 0 to 3 (unsigned 2-bit integer). + public: int getFormatBits() const; };