From 5dc8f476f782ebc712f4d0a49a081cfb88b84d5b Mon Sep 17 00:00:00 2001 From: wslbal Date: Mon, 1 Jun 2020 10:25:18 +0900 Subject: [PATCH] 1) Command pattern 2) applyMask 3) switch statement --- .../main/java/io/nayuki/qrcodegen/Button.java | 17 +++++++++++++++++ .../main/java/io/nayuki/qrcodegen/Command.java | 5 +++++ .../src/main/java/io/nayuki/qrcodegen/Msk0.java | 7 +++++++ .../main/java/io/nayuki/qrcodegen/QrCode.java | 9 ++++++++- .../java/io/nayuki/qrcodegen/msk0Command.java | 13 +++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 java/src/main/java/io/nayuki/qrcodegen/Button.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/Command.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/Msk0.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/msk0Command.java diff --git a/java/src/main/java/io/nayuki/qrcodegen/Button.java b/java/src/main/java/io/nayuki/qrcodegen/Button.java new file mode 100644 index 0000000..66fca4e --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/Button.java @@ -0,0 +1,17 @@ +package io.nayuki.qrcodegen; + +public class Button { + public Command theCommand; + + public Button(Command theCommand) { + setCommand(theCommand); + } + + public void setCommand(Command newCommand) { + this.theCommand = newCommand; + } + + public boolean pressed(int y, int x, int msk) { + return theCommand.excute(y, x, msk); + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/Command.java b/java/src/main/java/io/nayuki/qrcodegen/Command.java new file mode 100644 index 0000000..b12845e --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/Command.java @@ -0,0 +1,5 @@ +package io.nayuki.qrcodegen; + +public interface Command { + public abstract boolean excute(int y, int x, int msk); +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/Msk0.java b/java/src/main/java/io/nayuki/qrcodegen/Msk0.java new file mode 100644 index 0000000..a125577 --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/Msk0.java @@ -0,0 +1,7 @@ +package io.nayuki.qrcodegen; + +public class Msk0 { + public boolean operation(int y, int x, int msk) { + return ((x + y) % 2 == 0); + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrCode.java b/java/src/main/java/io/nayuki/qrcodegen/QrCode.java index 437a16c..a2cdbc2 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/QrCode.java +++ b/java/src/main/java/io/nayuki/qrcodegen/QrCode.java @@ -546,9 +546,15 @@ public final class QrCode { private void applyMask(int msk) { if (msk < 0 || msk > 7) throw new IllegalArgumentException("Mask value out of range"); - for (int y = 0; y < size; y++) { + for (int y = 0; y < size; y++) { for (int x = 0; x < size; x++) { boolean invert; + Msk0 msk0 = new Msk0(); + Command mskCommand = new msk0Command(msk0); + + Button button = new Button(mskCommand); + invert = button.pressed(y, x, msk); + /* switch (msk) { case 0: invert = (x + y) % 2 == 0; break; case 1: invert = y % 2 == 0; break; @@ -560,6 +566,7 @@ public final class QrCode { case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break; default: throw new AssertionError(); } + */ modules[y][x] ^= invert & !isFunction[y][x]; } } diff --git a/java/src/main/java/io/nayuki/qrcodegen/msk0Command.java b/java/src/main/java/io/nayuki/qrcodegen/msk0Command.java new file mode 100644 index 0000000..357bcdc --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/msk0Command.java @@ -0,0 +1,13 @@ +package io.nayuki.qrcodegen; + +public class msk0Command implements Command{ + private Msk0 theMsk0; + + public msk0Command(Msk0 theMsk0) { + this.theMsk0 = theMsk0; + } + + public boolean excute(int y, int x, int msk) { + return theMsk0.operation(y, x, msk); + } +}