1 package net.mograsim.logic.core.components;
\r
3 import java.util.List;
\r
5 import net.mograsim.logic.core.LogicObservable;
\r
6 import net.mograsim.logic.core.LogicObserver;
\r
7 import net.mograsim.logic.core.timeline.Timeline;
\r
8 import net.mograsim.logic.core.wires.Wire.ReadEnd;
\r
9 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;
\r
11 public class Connector extends Component implements LogicObserver
\r
13 private boolean connected;
\r
14 private final ReadWriteEnd a;
\r
15 private final ReadWriteEnd b;
\r
17 public Connector(Timeline timeline, ReadWriteEnd a, ReadWriteEnd b)
\r
20 if (a.length() != b.length())
\r
21 throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length(), b.length()));
\r
24 a.registerObserver(this);
\r
25 b.registerObserver(this);
\r
28 public void connect()
\r
35 public void disconnect()
\r
42 public void setConnection(boolean connected)
\r
51 public void update(LogicObservable initiator)
\r
54 timeline.addEvent(e -> innerUpdate(initiator), 1);
\r
57 private void innerUpdate(LogicObservable initiator)
\r
60 b.feedSignals(a.wireValuesExcludingMe());
\r
62 a.feedSignals(b.wireValuesExcludingMe());
\r
66 public List<ReadEnd> getAllInputs()
\r
68 return List.of(a, b);
\r
72 public List<ReadWriteEnd> getAllOutputs()
\r
74 return List.of(a, b);
\r