fixed Connector and added some useful methods to WireArray and Util
[Mograsim.git] / era.mi / src / era / mi / logic / tests / Connector.java
1 package era.mi.logic.tests;\r
2 \r
3 import era.mi.logic.Simulation;\r
4 import era.mi.logic.wires.WireArray;\r
5 import era.mi.logic.wires.WireArray.WireArrayInput;\r
6 import era.mi.logic.wires.WireArrayObserver;\r
7 \r
8 public class Connector implements WireArrayObserver\r
9 {\r
10         private final WireArray a;\r
11         private final WireArray b;\r
12         private final WireArrayInput aI;\r
13         private final WireArrayInput bI;\r
14 \r
15         public Connector(WireArray a, WireArray b)\r
16         {\r
17                 if (a.length != b.length)\r
18                         throw new IllegalArgumentException("WireArray width does not match: " + a.length + ", " + b.length);\r
19                 this.a = a;\r
20                 this.b = b;\r
21                 a.addObserver(this);\r
22                 b.addObserver(this);\r
23                 aI = a.createInput();\r
24                 bI = b.createInput();\r
25         }\r
26 \r
27         @Override\r
28         public void update(WireArray initiator)\r
29         {\r
30                 Simulation.TIMELINE.addEvent((e) ->\r
31                 {\r
32                         if (initiator == a)\r
33                                 bI.feedSignals(aI.wireValuesExcludingMe());\r
34                         else\r
35                                 aI.feedSignals(bI.wireValuesExcludingMe());\r
36                 }, 1);\r
37         }\r
38 }\r