\r
import java.util.List;\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
+import era.mi.logic.timeline.Timeline;\r
+import era.mi.logic.types.BitVector;\r
+import era.mi.logic.wires.Wire.ReadEnd;\r
+import era.mi.logic.wires.Wire.ReadWriteEnd;\r
+import era.mi.logic.wires.WireObserver;\r
\r
-public class Connector implements WireArrayObserver, Component\r
+public class Connector extends Component implements WireObserver\r
{\r
private boolean connected;\r
- private final WireArray a;\r
- private final WireArray b;\r
- private final WireArrayEnd aI;\r
- private final WireArrayEnd bI;\r
+ private final ReadWriteEnd a;\r
+ private final ReadWriteEnd b;\r
\r
- public Connector(WireArray a, WireArray b)\r
+ public Connector(Timeline timeline, ReadWriteEnd a, ReadWriteEnd 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
+ super(timeline);\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
public void connect()\r
public void disconnect()\r
{\r
connected = false;\r
- aI.clearSignals();\r
- bI.clearSignals();\r
+ a.clearSignals();\r
+ b.clearSignals();\r
}\r
\r
public void setConnection(boolean connected)\r
}\r
\r
@Override\r
- public void update(WireArray initiator, Bit[] oldValues)\r
+ public void update(ReadEnd initiator, BitVector oldValues)\r
{\r
if (connected)\r
- Simulation.TIMELINE.addEvent(e -> update(initiator), 1);\r
+ timeline.addEvent(e -> update(initiator), 1);\r
}\r
\r
- private void update(WireArray initiator)\r
+ private void update(ReadEnd initiator)\r
{\r
if (initiator == a)\r
- bI.feedSignals(aI.wireValuesExcludingMe());\r
+ b.feedSignals(a.wireValuesExcludingMe());\r
else\r
- aI.feedSignals(bI.wireValuesExcludingMe());\r
+ a.feedSignals(b.wireValuesExcludingMe());\r
}\r
\r
@Override\r
- public List<WireArray> getAllInputs()\r
+ public List<ReadEnd> getAllInputs()\r
{\r
return List.of(a, b);\r
}\r
\r
@Override\r
- public List<WireArray> getAllOutputs()\r
+ public List<ReadWriteEnd> getAllOutputs()\r
{\r
return List.of(a, b);\r
}\r