package era.mi.logic.components;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
-import era.mi.logic.Bit;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArray.WireArrayEnd;
+import era.mi.logic.timeline.Timeline;
+import era.mi.logic.types.Bit;
+import era.mi.logic.wires.Wire.ReadEnd;
+import era.mi.logic.wires.Wire.ReadWriteEnd;
public class TriStateBuffer extends BasicComponent
{
- WireArray in, enable;
- WireArrayEnd outI;
+ ReadEnd in, enable;
+ ReadWriteEnd out;
- public TriStateBuffer(int processTime, WireArray in, WireArray out, WireArray enable)
+ public TriStateBuffer(Timeline timeline, int processTime, ReadEnd in, ReadWriteEnd out, ReadEnd enable)
{
- super(processTime);
- if (in.length != out.length)
+ super(timeline, processTime);
+ if (in.length() != out.length())
throw new IllegalArgumentException(
- "Tri-state output must have the same amount of bits as the input. Input: " + in.length + " Output: " + out.length);
- if (enable.length != 1)
- throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length + ".");
+ "Tri-state output must have the same amount of bits as the input. Input: " + in.length() + " Output: " + out.length());
+ if (enable.length() != 1)
+ throw new IllegalArgumentException("Tri-state enable must have exactly one bit, not " + enable.length() + ".");
this.in = in;
in.addObserver(this);
this.enable = enable;
enable.addObserver(this);
- outI = out.createInput();
+ this.out = out;
}
@Override
protected void compute()
{
if (enable.getValue() == Bit.ONE)
- outI.feedSignals(in.getValues());
+ out.feedSignals(in.getValues());
else
- outI.clearSignals();
+ out.clearSignals();
}
@Override
- public List<WireArray> getAllInputs()
+ public List<ReadEnd> getAllInputs()
{
- return Collections.unmodifiableList(Arrays.asList(in, enable));
+ return List.of(in, enable);
}
@Override
- public List<WireArray> getAllOutputs()
+ public List<ReadWriteEnd> getAllOutputs()
{
- return Collections.unmodifiableList(Arrays.asList(outI.owner));
+ return List.of(out);
}
}