1 package era.mi.logic.components;
\r
3 import java.util.List;
\r
5 import era.mi.logic.Bit;
\r
6 import era.mi.logic.Simulation;
\r
7 import era.mi.logic.wires.WireArray;
\r
8 import era.mi.logic.wires.WireArray.WireArrayEnd;
\r
9 import era.mi.logic.wires.WireArrayObserver;
\r
11 public class Connector implements WireArrayObserver, Component
\r
13 private boolean connected;
\r
14 private final WireArray a;
\r
15 private final WireArray b;
\r
16 private final WireArrayEnd aI;
\r
17 private final WireArrayEnd bI;
\r
19 public Connector(WireArray a, WireArray b)
\r
21 if (a.length != b.length)
\r
22 throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length, b.length));
\r
25 a.addObserver(this);
\r
26 b.addObserver(this);
\r
27 aI = a.createInput();
\r
28 bI = b.createInput();
\r
31 public void connect()
\r
38 public void disconnect()
\r
45 public void setConnection(boolean connected)
\r
54 public void update(WireArray initiator, Bit[] oldValues)
\r
57 Simulation.TIMELINE.addEvent(e -> update(initiator), 1);
\r
60 private void update(WireArray initiator)
\r
63 bI.feedSignals(aI.wireValuesExcludingMe());
\r
65 aI.feedSignals(bI.wireValuesExcludingMe());
\r
69 public List<WireArray> getAllInputs()
\r
71 return List.of(a, b);
\r
75 public List<WireArray> getAllOutputs()
\r
77 return List.of(a, b);
\r