1.Strategy Pattern

2. AlphanumericMode, ByteMode, EciMode, NumericMode, QrMode
3. Add java class for using Strategy Pattern
pull/90/head
minsu4107 5 years ago
parent b63fa83f32
commit b65dad6f41

@ -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);
}
}

@ -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));
}
}

@ -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;
}
}

@ -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);
}
}

@ -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;
}
}
Loading…
Cancel
Save