}\r
\r
// @formatter:off\r
- private static Bit[][] JOIN_TABLE = \r
+ private static final Bit[][] JOIN_TABLE = \r
{ { U, U, U, U, U }, \r
{ U, X, X, X, X }, \r
{ U, X, ZERO, X, ZERO },\r
{ U, X, X, ONE, ONE }, \r
{ U, X, ZERO, ONE, Z } };\r
\r
- private static Bit[][] AND_TABLE = \r
+ private static final Bit[][] AND_TABLE = \r
{ { U, U, ZERO, U, U }, \r
{ U, X, ZERO, X, X },\r
{ ZERO, ZERO, ZERO, ZERO, ZERO }, \r
{ U, X, ZERO, ONE, X }, \r
{ U, X, ZERO, X, X } };\r
\r
- private static Bit[][] OR_TABLE =\r
+ private static final Bit[][] OR_TABLE =\r
{ { U, U, U, ONE, U }, \r
{ U, X, X, ONE, X }, \r
{ U, X, ZERO, ONE, X }, \r
{ ONE, ONE, ONE, ONE, ONE }, \r
{ U, X, X, ONE, X } };\r
\r
- private static Bit[][] XOR_TABLE =\r
+ private static final Bit[][] XOR_TABLE =\r
{ { U, U, U, U, U }, \r
{ U, X, X, X, X }, \r
{ U, X, ZERO, ONE, X }, \r
{\r
public final static Timeline TIMELINE = new Timeline(11);\r
\r
- public static void main(String[] args)\r
- {\r
- }\r
}
\ No newline at end of file
@Override\r
public void update(WireArray initiator, Bit[] oldValues)\r
{\r
- Simulation.TIMELINE.addEvent((e) ->\r
- {\r
- compute();\r
- }, processTime);\r
+ Simulation.TIMELINE.addEvent(e -> compute(), processTime);\r
}\r
\r
protected abstract void compute();\r
package era.mi.logic.components;\r
\r
-import java.util.ArrayList;\r
import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.Bit;\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(in));\r
+ return List.of(in);\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(new ArrayList<WireArray>());\r
+ return List.of();\r
}\r
}\r
package era.mi.logic.components;\r
\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.Bit;\r
{\r
this.delta = delta;\r
this.outI = out.createInput();\r
- Simulation.TIMELINE.addEvent(this, 50);\r
+ Simulation.TIMELINE.addEvent(this, delta);\r
}\r
\r
@Override\r
public void handle(TimelineEvent e)\r
{\r
addToTimeline();\r
- outI.feedSignals(new Bit[] { toggle ? Bit.ONE : Bit.ZERO });\r
+ outI.feedSignals(toggle ? Bit.ONE : Bit.ZERO);\r
toggle = !toggle;\r
}\r
\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList());\r
+ return List.of();\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
+ return List.of(outI.owner);\r
}\r
}\r
package era.mi.logic.components;\r
\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.wires.WireArray;\r
import era.mi.logic.wires.WireArray.WireArrayEnd;\r
\r
/**\r
- * Models a multiplexer. Takes an arbitrary amount of input {@link WireArray}s, one of which, as determined by select, is put through to the\r
- * output.\r
+ * Models a multiplexer. Takes an arbitrary amount of outputs {@link WireArray}s, one of which, as determined by select, receives the input\r
+ * signal.\r
* \r
* @author Fabian Stemmler\r
*\r
private int selected = -1;\r
\r
/**\r
- * Input {@link WireArray}s and out must be of uniform length\r
+ * Output {@link WireArray}s and in must be of uniform length\r
* \r
- * @param out Must be of uniform length with all inputs.\r
- * @param select Indexes the input array which is to be mapped to the output. Must have enough bits to index all inputs.\r
- * @param outputs One of these inputs is mapped to the output, depending on the select bits\r
+ * @param in Must be of uniform length with all outputs.\r
+ * @param select Indexes the output array to which the input is mapped. Must have enough bits to index all outputs.\r
+ * @param outputs One of these outputs receives the input signal, depending on the select bits\r
*/\r
public Demux(int processTime, WireArray in, WireArray select, WireArray... outputs)\r
{\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(in, select));\r
+ return List.of(in, select);\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(outputs));\r
+ return List.of(outputs);\r
}\r
}\r
package era.mi.logic.components;\r
\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.Bit;\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(inputs));\r
+ return List.of(inputs);\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
+ return List.of(outI.owner);\r
}\r
}\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
+ return List.of(outI.owner);\r
}\r
}\r
package era.mi.logic.components;\r
\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.Bit;\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(in, enable));\r
+ return List.of(in, enable);\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
+ return List.of(outI.owner);\r
}\r
\r
}\r
package era.mi.logic.components.gates;\r
\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.Bit;\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(in));\r
+ return List.of(in);\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(out));\r
+ return List.of(out);\r
}\r
\r
+ @Override\r
protected void compute()\r
{\r
Bit[] result = in[0].getValues();\r
package era.mi.logic.components.gates;\r
\r
-import java.util.Arrays;\r
-import java.util.Collections;\r
import java.util.List;\r
\r
import era.mi.logic.Util;\r
outI = out.createInput();\r
}\r
\r
+ @Override\r
public void compute()\r
{\r
outI.feedSignals(Util.not(in.getValues()));\r
@Override\r
public List<WireArray> getAllInputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(in));\r
+ return List.of(in);\r
}\r
\r
@Override\r
public List<WireArray> getAllOutputs()\r
{\r
- return Collections.unmodifiableList(Arrays.asList(out));\r
+ return List.of(out);\r
}\r
}\r
+++ /dev/null
-package era.mi.logic.tests;\r
-\r
-import era.mi.logic.Bit;\r
-import era.mi.logic.Simulation;\r
-import era.mi.logic.wires.WireArray;\r
-import era.mi.logic.wires.WireArray.WireArrayEnd;\r
-import era.mi.logic.wires.WireArrayObserver;\r
-\r
-public class Connector implements WireArrayObserver\r
-{\r
- private final WireArray a;\r
-// private final WireArray b;\r
- private final WireArrayEnd aI;\r
- private final WireArrayEnd bI;\r
-\r
- public Connector(WireArray a, WireArray b)\r
- {\r
- if (a.length != b.length)\r
- throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length, b.length));\r
- this.a = a;\r
-// this.b = b;\r
- a.addObserver(this);\r
- b.addObserver(this);\r
- aI = a.createInput();\r
- bI = b.createInput();\r
- }\r
-\r
- @Override\r
- public void update(WireArray initiator, Bit[] oldValues)\r
- {\r
- Simulation.TIMELINE.addEvent((e) ->\r
- {\r
- if (initiator == a)\r
- bI.feedSignals(aI.wireValuesExcludingMe());\r
- else\r
- aI.feedSignals(bI.wireValuesExcludingMe());\r
- }, 1);\r
- }\r
-}\r
g.setFont(g.getFont().deriveFont(Math.min(height, width) / 40f));\r
}\r
\r
- private void drawString(Graphics g, String s, int x, int y, double anchorX, double anchorY)\r
+ private static void drawString(Graphics g, String s, int x, int y, double anchorX, double anchorY)\r
{\r
int h = g.getFontMetrics().getAscent();\r
int w = g.getFontMetrics().stringWidth(s);\r
{\r
if (!hasNext())\r
return -1;\r
- else\r
- return events.peek().timing;\r
+ return events.peek().timing;\r
}\r
\r
public void reset()\r
private class InnerEvent\r
{\r
\r
- private final long timing;\r
+ final long timing;\r
private final TimelineEventHandler function;\r
private final TimelineEvent event;\r
\r
return timing;\r
}\r
\r
+ @Override\r
public String toString()\r
{\r
return "timestamp: " + timing;\r
public final int travelTime;\r
private List<WireArrayObserver> observers = new ArrayList<WireArrayObserver>();\r
public final int length;\r
- private List<WireArrayEnd> inputs = new ArrayList<WireArrayEnd>();\r
+ List<WireArrayEnd> inputs = new ArrayList<WireArrayEnd>();\r
\r
public WireArray(int length, int travelTime)\r
{\r
}\r
}\r
\r
- private void recalculate()\r
+ void recalculate()\r
{\r
switch (inputs.size())\r
{\r
return new WireArrayEnd(this);\r
}\r
\r
- private void registerInput(WireArrayEnd toRegister)\r
+ void registerInput(WireArrayEnd toRegister)\r
{\r
inputs.add(toRegister);\r
}\r
{\r
public final WireArray owner;\r
private boolean open;\r
- private Bit[] inputValues;\r
+ Bit[] inputValues;\r
\r
- private WireArrayEnd(WireArray owner)\r
+ WireArrayEnd(WireArray owner)\r
{\r
super();\r
this.owner = owner;\r
*/\r
public void feedSignals(Bit... newValues)\r
{\r
- if (newValues.length == length)\r
- {\r
- feedSignals(0, newValues);\r
- } else\r
+ if (newValues.length != length)\r
throw new IllegalArgumentException(\r
String.format("Attempted to input %d bits instead of %d bits.", newValues.length, length));\r
+ feedSignals(0, newValues);\r
+\r
}\r
\r
/**\r