X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=era.mi%2Fsrc%2Fera%2Fmi%2Flogic%2Fcomponents%2FMerger.java;h=ca441bacff6a600914e2976a059e87434f04a96f;hb=dcbba0b189fd37135adc4487f1b8b645e7045bc4;hp=da9b55e361b1302257486d76108a903d3296dbec;hpb=c18c04011cab0040c2287608eeefc9c3cc4536c2;p=Mograsim.git diff --git a/era.mi/src/era/mi/logic/components/Merger.java b/era.mi/src/era/mi/logic/components/Merger.java index da9b55e3..ca441bac 100644 --- a/era.mi/src/era/mi/logic/components/Merger.java +++ b/era.mi/src/era/mi/logic/components/Merger.java @@ -2,81 +2,81 @@ package era.mi.logic.components; 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.wires.WireArrayObserver; +import era.mi.logic.types.Bit; +import era.mi.logic.wires.Wire; +import era.mi.logic.wires.Wire.WireEnd; +import era.mi.logic.wires.WireObserver; -public class Merger implements WireArrayObserver, Component +public class Merger implements WireObserver, Component { - private WireArrayEnd outI; - private WireArray[] inputs; + private WireEnd out; + private WireEnd[] inputs; private int[] beginningIndex; /** * - * @param union The output of merging n {@link WireArray}s into one. Must have length = a1.length() + a2.length() + ... + an.length(). + * @param union The output of merging n {@link Wire}s into one. Must have length = a1.length() + a2.length() + ... + an.length(). * @param inputs The inputs to be merged into the union */ - public Merger(WireArray union, WireArray... inputs) + public Merger(WireEnd union, WireEnd... inputs) { this.inputs = inputs; - this.outI = union.createInput(); + this.out = union; this.beginningIndex = new int[inputs.length]; int length = 0; for (int i = 0; i < inputs.length; i++) { beginningIndex[i] = length; - length += inputs[i].length; + length += inputs[i].length(); inputs[i].addObserver(this); } - if (length != union.length) + if (length != union.length()) throw new IllegalArgumentException( "The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length()."); } - public WireArray getInput(int index) + public WireEnd getInput(int index) { return inputs[index]; } - public WireArray getUnion() + public WireEnd getUnion() { - return outI.owner; + return out; } @Override - public void update(WireArray initiator, Bit[] oldValues) + public void update(Wire initiator, Bit[] oldValues) { int index = find(initiator); int beginning = beginningIndex[index]; - outI.feedSignals(beginning, initiator.getValues()); + out.feedSignals(beginning, inputs[index].getValues()); } - private int find(WireArray w) + private int find(Wire w) { for (int i = 0; i < inputs.length; i++) - if (inputs[i] == w) + if (inputs[i].getWire() == w) return i; return -1; } - public WireArray[] getInputs() + public WireEnd[] getInputs() { return inputs.clone(); } @Override - public List getAllInputs() + public List getAllInputs() { return List.of(inputs); } @Override - public List getAllOutputs() + public List getAllOutputs() { - return List.of(outI.owner); + return List.of(out); } }