1 package era.mi.logic.components;
3 import era.mi.logic.WireArray;
4 import era.mi.logic.WireArrayObserver;
6 public class Merger2 implements WireArrayObserver
9 private WireArray[] inputs;
10 private int[] beginningIndex;
14 * @param union The output of merging n {@link WireArray}s into one. Must have length = a1.length() + a2.length() + ... + an.length().
15 * @param inputs The inputs to be merged into the union
17 public Merger2(WireArray union, WireArray... inputs)
21 this.beginningIndex = new int[inputs.length];
24 for(int i = 0; i < inputs.length; i++)
26 beginningIndex[i] = length;
27 length += inputs[i].length();
28 inputs[i].addObserver(this);
31 if(length != union.length())
32 throw new IllegalArgumentException("The output of merging n WireArrays into one must have length = a1.length() + a2.length() + ... + an.length().");
35 public WireArray getInput(int index)
40 public WireArray getUnion()
46 public void update(WireArray initiator)
48 int index = find(initiator);
49 int beginning = beginningIndex[index];
50 out.feedSignals(beginning, initiator.getValues());
53 private int find(WireArray w)
55 for(int i = 0; i < inputs.length; i++)
61 public WireArray getOut()
66 public WireArray[] getInputs()
68 return inputs.clone();