1 package era.mi.logic.components;
3 import era.mi.logic.Bit;
4 import era.mi.logic.wires.WireArray;
5 import era.mi.logic.wires.WireArrayObserver;
7 public class Splitter implements WireArrayObserver
9 private WireArray input;
10 private WireArray[] outputs;
12 public Splitter(WireArray input, WireArray... outputs)
15 this.outputs = outputs;
16 input.addObserver(this);
18 for(WireArray out : outputs)
21 if(input.length != length)
22 throw new IllegalArgumentException("The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length().");
25 protected void compute()
28 Bit[] inputBits = input.getValues();
29 for(int i = 0; i < outputs.length; i++)
31 Bit[] outputBits = new Bit[outputs[i].length];
32 System.arraycopy(inputBits, startIndex, outputBits, 0, outputs[i].length);
33 outputs[i].feedSignals(outputBits);
34 startIndex += outputs[i].length;
38 public WireArray getInput()
43 public WireArray[] getOutputs()
45 return outputs.clone();
49 public void update(WireArray initiator)