From b65dad6f4179f3950ecdd5d8b6d09c5844e4e410 Mon Sep 17 00:00:00 2001 From: minsu4107 <32637512+minsu4107@users.noreply.github.com> Date: Fri, 5 Jun 2020 23:45:52 +0900 Subject: [PATCH] 1.Strategy Pattern 2. AlphanumericMode, ByteMode, EciMode, NumericMode, QrMode 3. Add java class for using Strategy Pattern --- .../io/nayuki/qrcodegen/AlphanumericMode.java | 25 +++++++++++ .../java/io/nayuki/qrcodegen/ByteMode.java | 25 +++++++++++ .../java/io/nayuki/qrcodegen/EciMode.java | 23 ++++++++++ .../java/io/nayuki/qrcodegen/NumericMode.java | 23 ++++++++++ .../main/java/io/nayuki/qrcodegen/QrMode.java | 43 +++++++++++++++++++ 5 files changed, 139 insertions(+) create mode 100644 java/src/main/java/io/nayuki/qrcodegen/AlphanumericMode.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/ByteMode.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/EciMode.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/NumericMode.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/QrMode.java diff --git a/java/src/main/java/io/nayuki/qrcodegen/AlphanumericMode.java b/java/src/main/java/io/nayuki/qrcodegen/AlphanumericMode.java new file mode 100644 index 0000000..f0d59ba --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/AlphanumericMode.java @@ -0,0 +1,25 @@ +package io.nayuki.qrcodegen; + +import java.nio.charset.StandardCharsets; + +public class AlphanumericMode extends QrMode { + protected AlphanumericMode(int mode, int... ccbits) { + modeBits = mode; + numBitsCharCount = ccbits; + } + + protected AlphanumericMode() { + modeBits = 0x2; + numBitsCharCount[0] = 9; + numBitsCharCount[1] = 11; + numBitsCharCount[2] = 13; + } + + public int getcost(int pre, int codePoint) { + return pre + 33; + } + + public QrSegment making(String str) { + return QrSegment.makeAlphanumeric(str); + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/ByteMode.java b/java/src/main/java/io/nayuki/qrcodegen/ByteMode.java new file mode 100644 index 0000000..1270381 --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/ByteMode.java @@ -0,0 +1,25 @@ +package io.nayuki.qrcodegen; + +import java.nio.charset.StandardCharsets; + +public class ByteMode extends QrMode { + protected ByteMode(int mode, int... ccbits) { + modeBits = mode; + numBitsCharCount = ccbits; + } + + protected ByteMode() { + modeBits = 0x4; + numBitsCharCount[0] = 8; + numBitsCharCount[1] = 16; + numBitsCharCount[2] = 16; + } + + public int getcost(int pre, int codePoint) { + return pre + QrSegmentAdvanced.countUtf8Bytes(codePoint) * 8 * 6; + } + + public QrSegment making(String str) { + return QrSegment.makeBytes(str.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/EciMode.java b/java/src/main/java/io/nayuki/qrcodegen/EciMode.java new file mode 100644 index 0000000..ce33fa9 --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/EciMode.java @@ -0,0 +1,23 @@ +package io.nayuki.qrcodegen; + +public class EciMode extends QrMode { + protected EciMode(int mode, int... ccbits) { + modeBits = mode; + numBitsCharCount = ccbits; + } + + protected EciMode() { + modeBits = 0x7; + numBitsCharCount[0] = 0; + numBitsCharCount[1] = 0; + numBitsCharCount[2] = 0; + } + + public QrSegment making(int prmt) { + return QrSegment.makeEci(prmt); + } + + public int getcost(int pre, int codePoint) { + return pre; + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/NumericMode.java b/java/src/main/java/io/nayuki/qrcodegen/NumericMode.java new file mode 100644 index 0000000..a8af039 --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/NumericMode.java @@ -0,0 +1,23 @@ +package io.nayuki.qrcodegen; + +public class NumericMode extends QrMode { + protected NumericMode(int mode, int... ccbits) { + modeBits = mode; + numBitsCharCount = ccbits; + } + + protected NumericMode() { + modeBits = 0x1; + numBitsCharCount[0] = 10; + numBitsCharCount[1] = 12; + numBitsCharCount[2] = 1; + } + + public int getcost(int pre, int codePoint) { + return pre + 20; + } + + public QrSegment making(String str) { + return QrSegment.makeNumeric(str); + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrMode.java b/java/src/main/java/io/nayuki/qrcodegen/QrMode.java new file mode 100644 index 0000000..3f0127f --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/QrMode.java @@ -0,0 +1,43 @@ +package io.nayuki.qrcodegen; + +public abstract class QrMode { + /*-- Fields --*/ + + // The mode indicator bits, which is a uint4 value (range 0 to 15). + int modeBits; + + // Number of character count bits for three different version ranges. + protected int[] numBitsCharCount; + + int headCost; + /*-- Method --*/ + + // Returns the bit width of the character count field for a segment in this mode + // in a QR Code at the given version number. The result is in the range [0, 16]. + int numCharCountBits(int ver) { + assert QrCode.MIN_VERSION <= ver && ver <= QrCode.MAX_VERSION; + return numBitsCharCount[(ver + 7) / 17]; + } + + protected QrMode() { + this.modeBits = 0; + this.numBitsCharCount = null; + } + + public void get(QrMode md) { + this.modeBits = md.modeBits; + this.numBitsCharCount = md.numBitsCharCount; + } + + public int whichMode() { + return modeBits; + } + + protected QrSegment making(String s) { + return null; + } + + public int getcost(int pre, int codePoint) { + return pre; + } +} \ No newline at end of file