From 889fc7d9d5ec65f7c7fe013e3e3483acb0fe2eb0 Mon Sep 17 00:00:00 2001 From: gerzees Date: Wed, 3 Jun 2020 10:30:39 +0900 Subject: [PATCH] 1. Move method, rename 2. bitBufferToCodewords in QrCode 3.Feature envy. It calls only BitBuffer method. Moved it to BitBuffer and renamed it. --- .../src/main/java/io/nayuki/qrcodegen/BitBuffer.java | 11 ++++++++++- java/src/main/java/io/nayuki/qrcodegen/QrCode.java | 12 ++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/java/src/main/java/io/nayuki/qrcodegen/BitBuffer.java b/java/src/main/java/io/nayuki/qrcodegen/BitBuffer.java index 807d988..ccebe37 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/BitBuffer.java +++ b/java/src/main/java/io/nayuki/qrcodegen/BitBuffer.java @@ -128,9 +128,18 @@ public final class BitBuffer implements Cloneable { // Pad with alternating bytes until data capacity is reached - void addPad(int dataCapacityBits) { + public void addPad(int dataCapacityBits) { for (int padByte = 0xEC; bitLength() < dataCapacityBits; padByte ^= 0xEC ^ 0x11) appendBits(padByte, 8); } + + + // Pack bits into bytes in big endian + public byte[] toCodewords() { + byte[] dataCodewords = new byte[bitLength() / 8]; + for (int i = 0; i < bitLength(); i++) + dataCodewords[i >>> 3] |= getBit(i) << (7 - (i & 7)); + return dataCodewords; + } } diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrCode.java b/java/src/main/java/io/nayuki/qrcodegen/QrCode.java index c652ab6..7b85539 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/QrCode.java +++ b/java/src/main/java/io/nayuki/qrcodegen/QrCode.java @@ -175,7 +175,7 @@ public final class QrCode { bitBuffer.addPad(dataCapacityBits); - byte[] dataCodewords = bitBufferToCodewords(bitBuffer); + byte[] dataCodewords = bitBuffer.toCodewords(); // Create the QR Code object return new QrCode(version, errorCorrectionLevel, dataCodewords, mask); @@ -183,15 +183,7 @@ public final class QrCode { /*---- Private helper methods for encodeSegments ----*/ - // Pack bits into bytes in big endian - private static byte[] bitBufferToCodewords(BitBuffer bitBuffer) { - byte[] dataCodewords = new byte[bitBuffer.bitLength() / 8]; - for (int i = 0; i < bitBuffer.bitLength(); i++) - dataCodewords[i >>> 3] |= bitBuffer.getBit(i) << (7 - (i & 7)); - return dataCodewords; - } - - + // Add terminator and pad up to a byte if applicable private static void addTerminator(BitBuffer bitBuffer, int dataCapacityBits) { bitBuffer.appendBits(0, Math.min(4, dataCapacityBits - bitBuffer.bitLength()));