1 package era.mi.logic.components;
\r
3 import java.util.List;
\r
5 import era.mi.logic.Simulation;
\r
6 import era.mi.logic.types.BitVector;
\r
7 import era.mi.logic.wires.Wire.ReadEnd;
\r
8 import era.mi.logic.wires.Wire.ReadWriteEnd;
\r
9 import era.mi.logic.wires.WireObserver;
\r
11 public class Connector implements WireObserver, Component
\r
13 private boolean connected;
\r
14 private final ReadWriteEnd a;
\r
15 private final ReadWriteEnd b;
\r
17 public Connector(ReadWriteEnd a, ReadWriteEnd b)
\r
19 if (a.length() != b.length())
\r
20 throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length(), b.length()));
\r
23 a.addObserver(this);
\r
24 b.addObserver(this);
\r
27 public void connect()
\r
34 public void disconnect()
\r
41 public void setConnection(boolean connected)
\r
50 public void update(ReadEnd initiator, BitVector oldValues)
\r
53 Simulation.TIMELINE.addEvent(e -> update(initiator), 1);
\r
56 private void update(ReadEnd initiator)
\r
59 b.feedSignals(a.wireValuesExcludingMe());
\r
61 a.feedSignals(b.wireValuesExcludingMe());
\r
65 public List<ReadEnd> getAllInputs()
\r
67 return List.of(a, b);
\r
71 public List<ReadWriteEnd> getAllOutputs()
\r
73 return List.of(a, b);
\r