From 751708bd7a94ef7981286cdbe2cfbd1de6a8ecf5 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 16 Apr 2016 10:31:35 +0200 Subject: [PATCH] added some documentation --- .../de/neemann/digital/core/basic/And.java | 10 +++++ .../de/neemann/digital/core/basic/FanIn.java | 41 +++++++++++++------ .../neemann/digital/core/basic/Function.java | 9 ++-- .../de/neemann/digital/core/basic/NAnd.java | 9 ++++ .../de/neemann/digital/core/basic/NOr.java | 9 ++++ .../de/neemann/digital/core/basic/Not.java | 14 +++++-- .../de/neemann/digital/core/basic/Or.java | 9 ++++ .../de/neemann/digital/core/basic/XNOr.java | 9 ++++ .../de/neemann/digital/core/basic/XOr.java | 8 ++++ .../digital/core/basic/package-info.java | 6 +++ .../digital/core/wiring/Multiplexer.java | 4 +- .../de/neemann/digital/FlipFlopsTest.java | 4 +- 12 files changed, 107 insertions(+), 25 deletions(-) create mode 100644 src/main/java/de/neemann/digital/core/basic/package-info.java diff --git a/src/main/java/de/neemann/digital/core/basic/And.java b/src/main/java/de/neemann/digital/core/basic/And.java index bc7c832ef..7f2999e65 100644 --- a/src/main/java/de/neemann/digital/core/basic/And.java +++ b/src/main/java/de/neemann/digital/core/basic/And.java @@ -9,12 +9,22 @@ import de.neemann.digital.core.element.ElementTypeDescription; import java.util.ArrayList; /** + * The And gate + * * @author hneemann */ public class And extends Function { + /** + * The And description + */ public static final ElementTypeDescription DESCRIPTION = new FanInDescription(And.class); + /** + * Creates a new instance + * + * @param attributes the attributes + */ public And(ElementAttributes attributes) { super(attributes.get(AttributeKey.Bits)); } diff --git a/src/main/java/de/neemann/digital/core/basic/FanIn.java b/src/main/java/de/neemann/digital/core/basic/FanIn.java index e7c87abb1..7f4ca40c4 100644 --- a/src/main/java/de/neemann/digital/core/basic/FanIn.java +++ b/src/main/java/de/neemann/digital/core/basic/FanIn.java @@ -10,46 +10,61 @@ import java.util.ArrayList; import static de.neemann.digital.core.element.PinInfo.input; /** + * A fan in. Used as base class for the simple bool operations + * * @author hneemann */ public abstract class FanIn extends Node implements Element { - protected final ArrayList inputs; - protected final ObservableValue output; + private final ArrayList inputs; + private final ObservableValue output; private final int bits; + /** + * Creates a new instance + * + * @param bits the number of bits + */ public FanIn(int bits) { this.bits = bits; inputs = new ArrayList<>(); output = new ObservableValue("out", bits); } - public ObservableValue getOutput() { - return output; - } - @Override public void setInputs(ObservableValue... in) throws NodeException { for (ObservableValue v : in) inputs.add(v.checkBits(bits, this).addObserverToValue(this)); } + /** + * @return the outputs + */ + public ObservableValue getOutput() { + return output; + } + + /** + * @return the outputs + */ + public ArrayList getInputs() { + return inputs; + } + @Override public ObservableValue[] getOutputs() { return new ObservableValue[]{output}; } - public static class FanInDescription extends ElementTypeDescription { - public FanInDescription(Class clazz) { + /** + * The fan in description + */ + static class FanInDescription extends ElementTypeDescription { + FanInDescription(Class clazz) { super(clazz); addAttributes(); } - public FanInDescription(String name, ElementFactory elementFactory) { - super(name, elementFactory); - addAttributes(); - } - private void addAttributes() { addAttribute(AttributeKey.Rotate); addAttribute(AttributeKey.Bits); diff --git a/src/main/java/de/neemann/digital/core/basic/Function.java b/src/main/java/de/neemann/digital/core/basic/Function.java index fb4a40832..dfe880295 100644 --- a/src/main/java/de/neemann/digital/core/basic/Function.java +++ b/src/main/java/de/neemann/digital/core/basic/Function.java @@ -8,23 +8,24 @@ import java.util.ArrayList; /** * @author hneemann */ -public abstract class Function extends FanIn { +abstract class Function extends FanIn { private long value; - public Function(int bits) { + Function(int bits) { super(bits); } @Override public void readInputs() throws NodeException { - value = calculate(inputs); + value = calculate(getInputs()); } @Override public void writeOutputs() throws NodeException { - output.setValue(value); + getOutput().setValue(value); } protected abstract int calculate(ArrayList inputs) throws NodeException; + } diff --git a/src/main/java/de/neemann/digital/core/basic/NAnd.java b/src/main/java/de/neemann/digital/core/basic/NAnd.java index 94e7ddde9..0380481a3 100644 --- a/src/main/java/de/neemann/digital/core/basic/NAnd.java +++ b/src/main/java/de/neemann/digital/core/basic/NAnd.java @@ -9,12 +9,21 @@ import de.neemann.digital.core.element.ElementTypeDescription; import java.util.ArrayList; /** + * The NAnd * @author hneemann */ public class NAnd extends Function { + /** + * The NAnd description + */ public static final ElementTypeDescription DESCRIPTION = new FanInDescription(NAnd.class); + /** + * Creates a new instance + * + * @param attributes the attributes + */ public NAnd(ElementAttributes attributes) { super(attributes.get(AttributeKey.Bits)); } diff --git a/src/main/java/de/neemann/digital/core/basic/NOr.java b/src/main/java/de/neemann/digital/core/basic/NOr.java index 01e75e019..692045b7d 100644 --- a/src/main/java/de/neemann/digital/core/basic/NOr.java +++ b/src/main/java/de/neemann/digital/core/basic/NOr.java @@ -9,12 +9,21 @@ import de.neemann.digital.core.element.ElementTypeDescription; import java.util.ArrayList; /** + * The NOr * @author hneemann */ public class NOr extends Function { + /** + * The NOr description + */ public static final ElementTypeDescription DESCRIPTION = new FanInDescription(NOr.class); + /** + * Creates a new instance + * + * @param attributes the attributes + */ public NOr(ElementAttributes attributes) { super(attributes.get(AttributeKey.Bits)); } diff --git a/src/main/java/de/neemann/digital/core/basic/Not.java b/src/main/java/de/neemann/digital/core/basic/Not.java index a6d5d73da..ef3954dff 100644 --- a/src/main/java/de/neemann/digital/core/basic/Not.java +++ b/src/main/java/de/neemann/digital/core/basic/Not.java @@ -11,10 +11,15 @@ import de.neemann.digital.core.element.ElementTypeDescription; import static de.neemann.digital.core.element.PinInfo.input; /** + * The Not + * * @author hneemann */ public class Not extends Node implements Element { + /** + * The Not description + */ public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(Not.class, input("in")) .addAttribute(AttributeKey.Rotate) .addAttribute(AttributeKey.Bits); @@ -24,6 +29,11 @@ public class Not extends Node implements Element { private ObservableValue input; private long value; + /** + * Creates a new instance + * + * @param attributes the attributes + */ public Not(ElementAttributes attributes) { bits = attributes.get(AttributeKey.Bits); output = new ObservableValue("out", bits); @@ -39,10 +49,6 @@ public class Not extends Node implements Element { output.setValue(~value); } - public ObservableValue getOutput() { - return output; - } - @Override public void setInputs(ObservableValue... inputs) throws NodeException { input = inputs[0].addObserverToValue(this).checkBits(bits, this); diff --git a/src/main/java/de/neemann/digital/core/basic/Or.java b/src/main/java/de/neemann/digital/core/basic/Or.java index 859bd2544..c3c2266be 100644 --- a/src/main/java/de/neemann/digital/core/basic/Or.java +++ b/src/main/java/de/neemann/digital/core/basic/Or.java @@ -9,12 +9,21 @@ import de.neemann.digital.core.element.ElementTypeDescription; import java.util.ArrayList; /** + * The Or * @author hneemann */ public class Or extends Function { + /** + * The And description + */ public static final ElementTypeDescription DESCRIPTION = new FanInDescription(Or.class); + /** + * Creates a new instance + * + * @param attributes the attributes + */ public Or(ElementAttributes attributes) { super(attributes.get(AttributeKey.Bits)); } diff --git a/src/main/java/de/neemann/digital/core/basic/XNOr.java b/src/main/java/de/neemann/digital/core/basic/XNOr.java index 5e45000c9..5d05d4edb 100644 --- a/src/main/java/de/neemann/digital/core/basic/XNOr.java +++ b/src/main/java/de/neemann/digital/core/basic/XNOr.java @@ -8,15 +8,24 @@ import de.neemann.digital.core.element.ElementTypeDescription; import static de.neemann.digital.core.element.PinInfo.input; /** + * The XNOr * @author hneemann */ public class XNOr extends XOr { + /** + * The XNOr description + */ public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(XNOr.class, input("a"), input("b")) .addAttribute(AttributeKey.Rotate) .addAttribute(AttributeKey.Bits); + /** + * Creates a new instance + * + * @param attributes the attributes + */ public XNOr(ElementAttributes attributes) { super(attributes); } diff --git a/src/main/java/de/neemann/digital/core/basic/XOr.java b/src/main/java/de/neemann/digital/core/basic/XOr.java index 687b2ff65..92f419843 100644 --- a/src/main/java/de/neemann/digital/core/basic/XOr.java +++ b/src/main/java/de/neemann/digital/core/basic/XOr.java @@ -16,6 +16,9 @@ import static de.neemann.digital.core.element.PinInfo.input; */ public class XOr extends Node implements Element { + /** + * The XOr description + */ public static final ElementTypeDescription DESCRIPTION = new ElementTypeDescription(XOr.class, input("a"), input("b")) .addAttribute(AttributeKey.Rotate) @@ -27,6 +30,11 @@ public class XOr extends Node implements Element { protected ObservableValue b; protected long value; + /** + * Creates a new instance + * + * @param attributes the attributes + */ public XOr(ElementAttributes attributes) { bits = attributes.get(AttributeKey.Bits); this.out = new ObservableValue("out", bits); diff --git a/src/main/java/de/neemann/digital/core/basic/package-info.java b/src/main/java/de/neemann/digital/core/basic/package-info.java new file mode 100644 index 000000000..e48230dc7 --- /dev/null +++ b/src/main/java/de/neemann/digital/core/basic/package-info.java @@ -0,0 +1,6 @@ +/** + * The simple boolean operation like and, or and not + * + * @author hneemann + */ +package de.neemann.digital.core.basic; diff --git a/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java b/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java index decba9707..8ea1f279f 100644 --- a/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java +++ b/src/main/java/de/neemann/digital/core/wiring/Multiplexer.java @@ -47,12 +47,12 @@ public class Multiplexer extends FanIn { @Override public void readInputs() throws NodeException { int n = (int) selector.getValue(); - value = inputs.get(n).getValue(); + value = getInputs().get(n).getValue(); } @Override public void writeOutputs() throws NodeException { - output.setValue(value); + getOutput().setValue(value); } @Override diff --git a/src/test/java/de/neemann/digital/FlipFlopsTest.java b/src/test/java/de/neemann/digital/FlipFlopsTest.java index 744631be4..0eb468c15 100644 --- a/src/test/java/de/neemann/digital/FlipFlopsTest.java +++ b/src/test/java/de/neemann/digital/FlipFlopsTest.java @@ -85,9 +85,9 @@ public class FlipFlopsTest extends TestCase { FanIn a3 = model.add(new And(attr)); - a3.setInputs(nor1.getOutput(), not.getOutput()); + a3.setInputs(nor1.getOutput(), not.getOutputs()[0]); FanIn a4 = model.add(new And(attr)); - a4.setInputs(nor2.getOutput(), not.getOutput()); + a4.setInputs(nor2.getOutput(), not.getOutputs()[0]); nor3.setInputs(a3.getOutput(), nor4.getOutput()); nor4.setInputs(a4.getOutput(), nor3.getOutput());