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;
2
3 import era.mi.logic.Simulation;
4 import era.mi.logic.wires.WireArray;
5 import era.mi.logic.wires.WireArray.WireArrayInput;
6 import era.mi.logic.wires.WireArrayObserver;
7
8 public class Connector implements WireArrayObserver
9 {
10         private final WireArray a;
11         private final WireArray b;
12         private final WireArrayInput aI;
13         private final WireArrayInput bI;
14
15         public Connector(WireArray a, WireArray b)
16         {
17                 if (a.length != b.length)
18                         throw new IllegalArgumentException("WireArray width does not match: " + a.length + ", " + b.length);
19                 this.a = a;
20                 this.b = b;
21                 a.addObserver(this);
22                 b.addObserver(this);
23                 aI = a.createInput();
24                 bI = b.createInput();
25         }
26
27         @Override
28         public void update(WireArray initiator)
29         {
30                 Simulation.TIMELINE.addEvent((e) ->
31                 {
32                         if (initiator == a)
33                                 bI.feedSignals(aI.wireValuesExcludingMe());
34                         else
35                                 aI.feedSignals(bI.wireValuesExcludingMe());
36                 }, 1);
37         }
38 }