In C++ version, added explicit casts from int/long to uint32_t for first argument of calls to BitBuffer.appendBits().

pull/65/head
Project Nayuki 6 years ago
parent 1e24fcf67a
commit c3479c0043

@ -96,8 +96,8 @@ QrCode QrCode::encodeSegments(const vector<QrSegment> &segs, Ecc ecl,
// Concatenate all segments to create the data bit string // Concatenate all segments to create the data bit string
BitBuffer bb; BitBuffer bb;
for (const QrSegment &seg : segs) { for (const QrSegment &seg : segs) {
bb.appendBits(seg.getMode().getModeBits(), 4); bb.appendBits(static_cast<uint32_t>(seg.getMode().getModeBits()), 4);
bb.appendBits(seg.getNumChars(), seg.getMode().numCharCountBits(version)); bb.appendBits(static_cast<uint32_t>(seg.getNumChars()), seg.getMode().numCharCountBits(version));
bb.insert(bb.end(), seg.getData().begin(), seg.getData().end()); bb.insert(bb.end(), seg.getData().begin(), seg.getData().end());
} }
if (bb.size() != static_cast<unsigned int>(dataUsedBits)) if (bb.size() != static_cast<unsigned int>(dataUsedBits))

@ -153,7 +153,7 @@ static void doSegmentDemo() {
}; };
qrcodegen::BitBuffer bb; qrcodegen::BitBuffer bb;
for (int c : kanjiChars) for (int c : kanjiChars)
bb.appendBits(c, 13); bb.appendBits(static_cast<std::uint32_t>(c), 13);
const QrCode qr5 = QrCode::encodeSegments( const QrCode qr5 = QrCode::encodeSegments(
{QrSegment(QrSegment::Mode::KANJI, kanjiChars.size(), bb)}, {QrSegment(QrSegment::Mode::KANJI, kanjiChars.size(), bb)},
QrCode::Ecc::LOW); QrCode::Ecc::LOW);

@ -81,13 +81,13 @@ QrSegment QrSegment::makeNumeric(const char *digits) {
accumData = accumData * 10 + (c - '0'); accumData = accumData * 10 + (c - '0');
accumCount++; accumCount++;
if (accumCount == 3) { if (accumCount == 3) {
bb.appendBits(accumData, 10); bb.appendBits(static_cast<uint32_t>(accumData), 10);
accumData = 0; accumData = 0;
accumCount = 0; accumCount = 0;
} }
} }
if (accumCount > 0) // 1 or 2 digits remaining if (accumCount > 0) // 1 or 2 digits remaining
bb.appendBits(accumData, accumCount * 3 + 1); bb.appendBits(static_cast<uint32_t>(accumData), accumCount * 3 + 1);
return QrSegment(Mode::NUMERIC, charCount, std::move(bb)); return QrSegment(Mode::NUMERIC, charCount, std::move(bb));
} }
@ -104,13 +104,13 @@ QrSegment QrSegment::makeAlphanumeric(const char *text) {
accumData = accumData * 45 + (temp - ALPHANUMERIC_CHARSET); accumData = accumData * 45 + (temp - ALPHANUMERIC_CHARSET);
accumCount++; accumCount++;
if (accumCount == 2) { if (accumCount == 2) {
bb.appendBits(accumData, 11); bb.appendBits(static_cast<uint32_t>(accumData), 11);
accumData = 0; accumData = 0;
accumCount = 0; accumCount = 0;
} }
} }
if (accumCount > 0) // 1 character remaining if (accumCount > 0) // 1 character remaining
bb.appendBits(accumData, 6); bb.appendBits(static_cast<uint32_t>(accumData), 6);
return QrSegment(Mode::ALPHANUMERIC, charCount, std::move(bb)); return QrSegment(Mode::ALPHANUMERIC, charCount, std::move(bb));
} }
@ -138,13 +138,13 @@ QrSegment QrSegment::makeEci(long assignVal) {
if (assignVal < 0) if (assignVal < 0)
throw std::domain_error("ECI assignment value out of range"); throw std::domain_error("ECI assignment value out of range");
else if (assignVal < (1 << 7)) else if (assignVal < (1 << 7))
bb.appendBits(assignVal, 8); bb.appendBits(static_cast<uint32_t>(assignVal), 8);
else if (assignVal < (1 << 14)) { else if (assignVal < (1 << 14)) {
bb.appendBits(2, 2); bb.appendBits(2, 2);
bb.appendBits(assignVal, 14); bb.appendBits(static_cast<uint32_t>(assignVal), 14);
} else if (assignVal < 1000000L) { } else if (assignVal < 1000000L) {
bb.appendBits(6, 3); bb.appendBits(6, 3);
bb.appendBits(assignVal, 21); bb.appendBits(static_cast<uint32_t>(assignVal), 21);
} else } else
throw std::domain_error("ECI assignment value out of range"); throw std::domain_error("ECI assignment value out of range");
return QrSegment(Mode::ECI, 0, std::move(bb)); return QrSegment(Mode::ECI, 0, std::move(bb));

Loading…
Cancel
Save