diff --git a/src/zxing/zxing/common/reedsolomon/ReedSolomonEncoder.cpp b/src/zxing/zxing/common/reedsolomon/ReedSolomonEncoder.cpp index 3607cb6..85fa1e9 100644 --- a/src/zxing/zxing/common/reedsolomon/ReedSolomonEncoder.cpp +++ b/src/zxing/zxing/common/reedsolomon/ReedSolomonEncoder.cpp @@ -38,7 +38,7 @@ void ReedSolomonEncoder::encode(std::vector &toEncode, int ecBytes) if (ecBytes == 0) { throw Exception("No error correction bytes"); } - //int dataBytes = toEncode.size() - ecBytes; + int dataBytes = toEncode.size();// - ecBytes; toEncode.resize(toEncode.size()+ecBytes); if (dataBytes <= 0) { @@ -46,7 +46,7 @@ void ReedSolomonEncoder::encode(std::vector &toEncode, int ecBytes) } Ref generator = buildGenerator(ecBytes); ArrayRef infoCoefficients(dataBytes); - //memcpy(infoCoefficients.operator ->(), toEncode.data(), dataBytes); + //to-do optimize the following loop for(int i=0; i< dataBytes; i++) infoCoefficients[i] = toEncode[i]; @@ -60,15 +60,6 @@ void ReedSolomonEncoder::encode(std::vector &toEncode, int ecBytes) toEncode[dataBytes + i] = 0; } - //original kept for future checks - //System.arraycopy(coefficients, 0, toEncode, dataBytes + numZeroCoefficients, coefficients.length); - - //toEncode.insert(toEncode.begin() + (dataBytes-1) + numZeroCoefficients, - // coefficients.array_->values().begin(), - // coefficients.array_->values().end()); - - //toEncode.resize(toEncode.size() + numZeroCoefficients + coefficients->size()); - for (size_t i = 0; i < coefficients->size(); i++) toEncode[dataBytes + numZeroCoefficients + i] = coefficients[i]; } diff --git a/src/zxing/zxing/qrcode/encoder/Encoder.h b/src/zxing/zxing/qrcode/encoder/Encoder.h index 20e622c..39b0a44 100644 --- a/src/zxing/zxing/qrcode/encoder/Encoder.h +++ b/src/zxing/zxing/qrcode/encoder/Encoder.h @@ -77,7 +77,7 @@ protected: int numDataBytes, int numRSBlocks); - static ArrayRef generateECBytes(std::vector &dataBytes, int numEcBytesInBlock); + static ArrayRef generateECBytes(const std::vector &dataBytes, int numEcBytesInBlock); static void appendNumericBytes(const QString& content, BitArray& bits); diff --git a/src/zxing/zxing/qrcode/encoder/QREncoder.cpp b/src/zxing/zxing/qrcode/encoder/QREncoder.cpp index 396e2c0..cb78d3a 100644 --- a/src/zxing/zxing/qrcode/encoder/QREncoder.cpp +++ b/src/zxing/zxing/qrcode/encoder/QREncoder.cpp @@ -423,20 +423,17 @@ BitArray* Encoder::interleaveWithECBytes(const BitArray& bits, return result; } -ArrayRef Encoder::generateECBytes(std::vector& dataBytes, int numEcBytesInBlock) +ArrayRef Encoder::generateECBytes(const std::vector& dataBytes, int numEcBytesInBlock) { int numDataBytes = dataBytes.size(); -// std::vector toEncode(numDataBytes); - //toEncode.resize(numDataBytes + numEcBytesInBlock); -// for (int i = 0; i < numDataBytes; i++) -// toEncode[i] = dataBytes[i]; + std::vector dataBytesCopy(dataBytes); zxing::ReedSolomonEncoder encoder(GenericGF::QR_CODE_FIELD_256); - encoder.encode(dataBytes, numEcBytesInBlock); + encoder.encode(dataBytesCopy, numEcBytesInBlock); ArrayRef ecBytes(numEcBytesInBlock); for (int i = 0; i < numEcBytesInBlock; i++) { - ecBytes[i] = dataBytes[numDataBytes + i]; + ecBytes[i] = dataBytesCopy[numDataBytes + i]; } return ecBytes; } diff --git a/tests/src/QZXingTests/zxing/qrcode/encoder/EncoderTests.cpp b/tests/src/QZXingTests/zxing/qrcode/encoder/EncoderTests.cpp index 1df9621..3089ab1 100644 --- a/tests/src/QZXingTests/zxing/qrcode/encoder/EncoderTests.cpp +++ b/tests/src/QZXingTests/zxing/qrcode/encoder/EncoderTests.cpp @@ -364,7 +364,7 @@ void EncoderTests::testGenerateECBytes() const byte expected[] = { 42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61 }; - assertEquals( getArrayLength(expected), ecBytes.count()); + assertEquals( getArrayLength(expected), ecBytes->size()); for (int x = 0; x < getArrayLength(expected); x++) { assertEquals(expected[x], ecBytes[x]); }