From 4261b2cee4cb6e5fe5d5149506cef50ba7d65468 Mon Sep 17 00:00:00 2001 From: shahraj Date: Thu, 6 Apr 2023 23:31:03 -0300 Subject: [PATCH 1/5] refactoring changes, added new Pin class and clockPinManager Class --- .../digital/builder/ClockPinManager.java | 14 +++++++ .../java/de/neemann/digital/builder/Pin.java | 21 +++++++++++ .../de/neemann/digital/builder/PinMap.java | 37 +++++-------------- 3 files changed, 45 insertions(+), 27 deletions(-) create mode 100644 src/main/java/de/neemann/digital/builder/ClockPinManager.java create mode 100644 src/main/java/de/neemann/digital/builder/Pin.java diff --git a/src/main/java/de/neemann/digital/builder/ClockPinManager.java b/src/main/java/de/neemann/digital/builder/ClockPinManager.java new file mode 100644 index 000000000..c412ef8a8 --- /dev/null +++ b/src/main/java/de/neemann/digital/builder/ClockPinManager.java @@ -0,0 +1,14 @@ +package de.neemann.digital.builder; + +public class ClockPinManager { + private int clockPin; + + public int getClockPin() { + return clockPin; + } + + public void setClockPin(int clockPin) { + if (clockPin > 0) + this.clockPin = clockPin; + } +} diff --git a/src/main/java/de/neemann/digital/builder/Pin.java b/src/main/java/de/neemann/digital/builder/Pin.java new file mode 100644 index 000000000..83516de1f --- /dev/null +++ b/src/main/java/de/neemann/digital/builder/Pin.java @@ -0,0 +1,21 @@ +package de.neemann.digital.builder; + +import de.neemann.digital.core.element.PinDescription; + +public class Pin { + private final int num; + private final PinDescription.Direction direction; + + public Pin(int num, PinDescription.Direction direction) { + this.num = num; + this.direction = direction; + } + + public int getNum() { + return num; + } + + public PinDescription.Direction getDirection() { + return direction; + } +} diff --git a/src/main/java/de/neemann/digital/builder/PinMap.java b/src/main/java/de/neemann/digital/builder/PinMap.java index ecf2af9b8..e93ab582d 100644 --- a/src/main/java/de/neemann/digital/builder/PinMap.java +++ b/src/main/java/de/neemann/digital/builder/PinMap.java @@ -16,11 +16,11 @@ * A PinMap. * Used to assign a symbolic name to a pin number */ -public class PinMap { +public class PinMap extends ClockPinManager{ private final HashMap pinMap; private final ArrayList availPins; private ArrayList> alias; - private int clockPin; + /** * Creates a new instance @@ -176,10 +176,10 @@ public PinMap addAll(Map pinMap) throws PinMapException { private Integer searchFirstFreePin(PinDescription.Direction direction, String name) { for (Pin pin : availPins) { - if (!pinMap.containsValue(pin.num)) - if (pin.direction.equals(direction) || pin.direction.equals(PinDescription.Direction.both)) { - pinMap.put(name, pin.num); - return pin.num; + if (!pinMap.containsValue(pin.getNum())) + if (pin.getDirection().equals(direction) || pin.getDirection().equals(PinDescription.Direction.both)) { + pinMap.put(name, pin.getNum()); + return pin.getNum(); } } return null; @@ -187,8 +187,8 @@ private Integer searchFirstFreePin(PinDescription.Direction direction, String na private boolean isAvailable(PinDescription.Direction direction, int p) { for (Pin pin : availPins) - if (pin.num == p) - return (pin.direction.equals(direction) || pin.direction.equals(PinDescription.Direction.both)); + if (pin.getNum() == p) + return (pin.getDirection().equals(direction) || pin.getDirection().equals(PinDescription.Direction.both)); return false; } @@ -273,32 +273,15 @@ public String toString() { return sb.toString(); } - /** - * @return the clock pin - */ - public int getClockPin() { - return clockPin; - } - /** * Sets the clock pin * * @param clockPin the clock pin * @return this for chained calls */ - public PinMap setClockPin(int clockPin) { + public void setClockPin(int clockPin) { if (clockPin > 0) - this.clockPin = clockPin; - return this; - } + this.setClockPin(clockPin); - private static final class Pin { - private final int num; - private final PinDescription.Direction direction; - - private Pin(int num, PinDescription.Direction direction) { - this.num = num; - this.direction = direction; - } } } From 430c2af24b05d74eb4ad1ed2bed34a749623f471 Mon Sep 17 00:00:00 2001 From: shahraj Date: Thu, 6 Apr 2023 23:45:24 -0300 Subject: [PATCH 2/5] added javadoc comments --- .../digital/builder/ClockPinManager.java | 13 +++++++++++++ .../java/de/neemann/digital/builder/Pin.java | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/main/java/de/neemann/digital/builder/ClockPinManager.java b/src/main/java/de/neemann/digital/builder/ClockPinManager.java index c412ef8a8..98dfe21f2 100644 --- a/src/main/java/de/neemann/digital/builder/ClockPinManager.java +++ b/src/main/java/de/neemann/digital/builder/ClockPinManager.java @@ -1,12 +1,25 @@ package de.neemann.digital.builder; +/** + * Manages the clock pin information. + */ public class ClockPinManager { private int clockPin; + /** + * Returns the clock pin number. + * + * @return the clock pin number + */ public int getClockPin() { return clockPin; } + /** + * Sets the clock pin number. + * + * @param clockPin the clock pin number + */ public void setClockPin(int clockPin) { if (clockPin > 0) this.clockPin = clockPin; diff --git a/src/main/java/de/neemann/digital/builder/Pin.java b/src/main/java/de/neemann/digital/builder/Pin.java index 83516de1f..d6269302f 100644 --- a/src/main/java/de/neemann/digital/builder/Pin.java +++ b/src/main/java/de/neemann/digital/builder/Pin.java @@ -2,19 +2,38 @@ import de.neemann.digital.core.element.PinDescription; +/** + * Represents a Pin with a number and a direction. + */ public class Pin { private final int num; private final PinDescription.Direction direction; + /** + * Constructs a new Pin with the given number and direction. + * + * @param num the pin number + * @param direction the pin direction + */ public Pin(int num, PinDescription.Direction direction) { this.num = num; this.direction = direction; } + /** + * Returns the pin number. + * + * @return the pin number + */ public int getNum() { return num; } + /** + * Returns the pin direction. + * + * @return the pin direction + */ public PinDescription.Direction getDirection() { return direction; } From 9530f6afcd692b9d287a2b9c8ba34a018932bf4b Mon Sep 17 00:00:00 2001 From: shahraj Date: Thu, 6 Apr 2023 23:53:22 -0300 Subject: [PATCH 3/5] added new interfaces, instead if using series of conditions created a CharacterFilter interface --- .../digital/builder/CleanNameBuilder.java | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java index 6f3cf5412..64b2cf383 100644 --- a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java +++ b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java @@ -116,19 +116,63 @@ public interface Filter { } private static final class SimpleFilter implements Filter { + private final CharacterFilter[] filters; + + public SimpleFilter() { + filters = new CharacterFilter[]{ // <-- + new RangeCharacterFilter('A', 'Z'), + new RangeCharacterFilter('a', 'z'), + new RangeCharacterFilter('0', '9'), + new SingleCharacterFilter('_') + }; + } @Override public String filter(String name) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < name.length(); i++) { char c = name.charAt(i); - if ((c >= 'A' && c <= 'Z') - || (c >= 'a' && c <= 'z') - || (c >= '0' && c <= '9') - || c == '_') - sb.append(c); + for (CharacterFilter filter : filters) { // <-- + if (filter.accept(c)) { // <-- + sb.append(c); + break; + } + } } return sb.toString(); } + + private interface CharacterFilter { + boolean accept(char c); + } + + private static class RangeCharacterFilter implements CharacterFilter { + private final char min; + private final char max; + + public RangeCharacterFilter(char min, char max) { + this.min = min; + this.max = max; + } + + @Override + public boolean accept(char c) { + return c >= min && c <= max; + } + } + + private static class SingleCharacterFilter implements CharacterFilter { + private final char target; + + public SingleCharacterFilter(char target) { + this.target = target; + } + + @Override + public boolean accept(char c) { + return c == target; + } + } + } } From 63a5a93a312923d5202cc7ea49430d13b37360fa Mon Sep 17 00:00:00 2001 From: shahraj Date: Fri, 7 Apr 2023 00:02:24 -0300 Subject: [PATCH 4/5] added new javadoc comemnts for new changes --- .../digital/builder/CleanNameBuilder.java | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java index 64b2cf383..4457695cf 100644 --- a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java +++ b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java @@ -115,9 +115,15 @@ public interface Filter { String filter(String name); } + /** + * The SimpleFilter class applies multiple CharacterFilter instances to filter the input string. + */ private static final class SimpleFilter implements Filter { private final CharacterFilter[] filters; + /** + * Creates a SimpleFilter instance with a predefined set of character filters. + */ public SimpleFilter() { filters = new CharacterFilter[]{ // <-- new RangeCharacterFilter('A', 'Z'), @@ -126,6 +132,13 @@ public SimpleFilter() { new SingleCharacterFilter('_') }; } + + /** + * Filters the input string by applying the CharacterFilter instances. + * + * @param name the input string to filter + * @return the filtered string containing only accepted characters + */ @Override public String filter(String name) { StringBuilder sb = new StringBuilder(); @@ -142,32 +155,70 @@ public String filter(String name) { return sb.toString(); } + /** + * The CharacterFilter interface defines a method to check if a character is accepted by the filter. + */ private interface CharacterFilter { + /** + * Checks if the given character is accepted by the filter. + * + * @param c the character to check + * @return true if the character is accepted, false otherwise + */ boolean accept(char c); } + /** + * The RangeCharacterFilter class accepts characters within a specified range. + */ private static class RangeCharacterFilter implements CharacterFilter { private final char min; private final char max; + /** + * Creates a RangeCharacterFilter instance with a specified character range. + * + * @param min the minimum character in the range (inclusive) + * @param max the maximum character in the range (inclusive) + */ public RangeCharacterFilter(char min, char max) { this.min = min; this.max = max; } + /** + * Checks if the given character is within the specified range. + * + * @param c the character to check + * @return true if the character is within the range, false otherwise + */ @Override public boolean accept(char c) { return c >= min && c <= max; } } + /** + * The SingleCharacterFilter class accepts a single specified character. + */ private static class SingleCharacterFilter implements CharacterFilter { private final char target; + /** + * Creates a SingleCharacterFilter instance with a specified character to accept. + * + * @param target the character to accept + */ public SingleCharacterFilter(char target) { this.target = target; } + /** + * Checks if the given character is equal to the specified target character. + * + * @param c the character to check + * @return true if the character is equal to the target character, false otherwise + */ @Override public boolean accept(char c) { return c == target; From a7689e7ac01ebedd6b78d264589c2b8e58687e26 Mon Sep 17 00:00:00 2001 From: shahraj Date: Fri, 7 Apr 2023 00:27:30 -0300 Subject: [PATCH 5/5] added javadoc comments, added liscence lines, fixed all issues for mvn install to run error free --- .../neemann/digital/builder/ATF150x/ATFDevice.java | 7 ++++--- .../de/neemann/digital/builder/CleanNameBuilder.java | 12 ++++++------ .../de/neemann/digital/builder/ClockPinManager.java | 5 +++++ src/main/java/de/neemann/digital/builder/Pin.java | 6 ++++++ src/main/java/de/neemann/digital/builder/PinMap.java | 11 ----------- .../de/neemann/digital/builder/tt2/TT2Exporter.java | 3 ++- 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/java/de/neemann/digital/builder/ATF150x/ATFDevice.java b/src/main/java/de/neemann/digital/builder/ATF150x/ATFDevice.java index 4ecfa00c0..1304aef43 100644 --- a/src/main/java/de/neemann/digital/builder/ATF150x/ATFDevice.java +++ b/src/main/java/de/neemann/digital/builder/ATF150x/ATFDevice.java @@ -6,6 +6,7 @@ package de.neemann.digital.builder.ATF150x; import de.neemann.digital.builder.ExpressionToFileExporter; +import de.neemann.digital.builder.PinMap; import de.neemann.digital.builder.tt2.StartATF150xFitter; import de.neemann.digital.builder.tt2.TT2Exporter; @@ -121,9 +122,9 @@ public String getMenuName() { private TT2Exporter getTT2Exporter(String projectName) { TT2Exporter tt2 = new TT2Exporter(projectName); - tt2.getPinMapping() - .setClockPin(clockPin) - .setAvailBidirectional(pins); + PinMap pinMap = tt2.getPinMapping(); + pinMap.setClockPin(clockPin); + pinMap.setAvailBidirectional(pins); tt2.setDevice(getTT2DevName()); return tt2; } diff --git a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java index 4457695cf..862ddf453 100644 --- a/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java +++ b/src/main/java/de/neemann/digital/builder/CleanNameBuilder.java @@ -124,8 +124,8 @@ private static final class SimpleFilter implements Filter { /** * Creates a SimpleFilter instance with a predefined set of character filters. */ - public SimpleFilter() { - filters = new CharacterFilter[]{ // <-- + SimpleFilter() { + filters = new CharacterFilter[]{ new RangeCharacterFilter('A', 'Z'), new RangeCharacterFilter('a', 'z'), new RangeCharacterFilter('0', '9'), @@ -144,8 +144,8 @@ public String filter(String name) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < name.length(); i++) { char c = name.charAt(i); - for (CharacterFilter filter : filters) { // <-- - if (filter.accept(c)) { // <-- + for (CharacterFilter filter : filters) { + if (filter.accept(c)) { sb.append(c); break; } @@ -181,7 +181,7 @@ private static class RangeCharacterFilter implements CharacterFilter { * @param min the minimum character in the range (inclusive) * @param max the maximum character in the range (inclusive) */ - public RangeCharacterFilter(char min, char max) { + RangeCharacterFilter(char min, char max) { this.min = min; this.max = max; } @@ -209,7 +209,7 @@ private static class SingleCharacterFilter implements CharacterFilter { * * @param target the character to accept */ - public SingleCharacterFilter(char target) { + SingleCharacterFilter(char target) { this.target = target; } diff --git a/src/main/java/de/neemann/digital/builder/ClockPinManager.java b/src/main/java/de/neemann/digital/builder/ClockPinManager.java index 98dfe21f2..7569564c7 100644 --- a/src/main/java/de/neemann/digital/builder/ClockPinManager.java +++ b/src/main/java/de/neemann/digital/builder/ClockPinManager.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2016 Helmut Neemann + * Use of this source code is governed by the GPL v3 license + * that can be found in the LICENSE file. + */ package de.neemann.digital.builder; /** diff --git a/src/main/java/de/neemann/digital/builder/Pin.java b/src/main/java/de/neemann/digital/builder/Pin.java index d6269302f..7ddbe9fbc 100644 --- a/src/main/java/de/neemann/digital/builder/Pin.java +++ b/src/main/java/de/neemann/digital/builder/Pin.java @@ -1,3 +1,9 @@ +/* + * Copyright (c) 2016 Helmut Neemann + * Use of this source code is governed by the GPL v3 license + * that can be found in the LICENSE file. + */ + package de.neemann.digital.builder; import de.neemann.digital.core.element.PinDescription; diff --git a/src/main/java/de/neemann/digital/builder/PinMap.java b/src/main/java/de/neemann/digital/builder/PinMap.java index e93ab582d..a874f6e51 100644 --- a/src/main/java/de/neemann/digital/builder/PinMap.java +++ b/src/main/java/de/neemann/digital/builder/PinMap.java @@ -273,15 +273,4 @@ public String toString() { return sb.toString(); } - /** - * Sets the clock pin - * - * @param clockPin the clock pin - * @return this for chained calls - */ - public void setClockPin(int clockPin) { - if (clockPin > 0) - this.setClockPin(clockPin); - - } } diff --git a/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java b/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java index d7abf10f5..ae6f17b5f 100644 --- a/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java +++ b/src/main/java/de/neemann/digital/builder/tt2/TT2Exporter.java @@ -43,7 +43,8 @@ public TT2Exporter(String projectName) { // if simple aliases are filtered out, a direct input to output connection isn't possible anymore builder = new BuilderCollector(); cleanNameBuilder = new CleanNameBuilder(builder); - pinMap = cleanNameBuilder.createPinMap().setClockPin(43); + pinMap = cleanNameBuilder.createPinMap(); + pinMap.setClockPin(43); device = "f1502ispplcc44"; this.projectName = projectName; }