import java.util.List;
-import era.mi.logic.Bit;
-import era.mi.logic.Simulation;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArray.WireArrayEnd;
-import era.mi.logic.wires.WireArrayObserver;
+import era.mi.logic.timeline.Timeline;
+import era.mi.logic.types.BitVector;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
+import era.mi.logic.wires.WireObserver;
-public class Connector implements WireArrayObserver, Component
+public class Connector extends Component implements WireObserver
{
private boolean connected;
- private final WireArray a;
- private final WireArray b;
- private final WireArrayEnd aI;
- private final WireArrayEnd bI;
+ private final ReadWriteEnd a;
+ private final ReadWriteEnd b;
- public Connector(WireArray a, WireArray b)
+ public Connector(Timeline timeline, ReadWriteEnd a, ReadWriteEnd b)
{
- if (a.length != b.length)
- throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length, b.length));
+ super(timeline);
+ if (a.length() != b.length())
+ throw new IllegalArgumentException(String.format("WireArray width does not match: %d, %d", a.length(), b.length()));
this.a = a;
this.b = b;
a.addObserver(this);
b.addObserver(this);
- aI = a.createInput();
- bI = b.createInput();
}
public void connect()
public void disconnect()
{
connected = false;
- aI.clearSignals();
- bI.clearSignals();
+ a.clearSignals();
+ b.clearSignals();
}
public void setConnection(boolean connected)
}
@Override
- public void update(WireArray initiator, Bit[] oldValues)
+ public void update(ReadEnd initiator, BitVector oldValues)
{
if (connected)
- Simulation.TIMELINE.addEvent(e -> update(initiator), 1);
+ timeline.addEvent(e -> update(initiator), 1);
}
- private void update(WireArray initiator)
+ private void update(ReadEnd initiator)
{
if (initiator == a)
- bI.feedSignals(aI.wireValuesExcludingMe());
+ b.feedSignals(a.wireValuesExcludingMe());
else
- aI.feedSignals(bI.wireValuesExcludingMe());
+ a.feedSignals(b.wireValuesExcludingMe());
}
@Override
- public List<WireArray> getAllInputs()
+ public List<ReadEnd> getAllInputs()
{
return List.of(a, b);
}
@Override
- public List<WireArray> getAllOutputs()
+ public List<ReadWriteEnd> getAllOutputs()
{
return List.of(a, b);
}