Removed unused import
[Mograsim.git] / era.mi / src / era / mi / logic / components / Splitter.java
1 package era.mi.logic.components;
2
3 import era.mi.logic.Bit;
4 import era.mi.logic.wires.WireArray;
5 import era.mi.logic.wires.WireArray.WireArrayInput;
6 import era.mi.logic.wires.WireArrayObserver;
7
8 public class Splitter implements WireArrayObserver
9 {
10         private WireArray input;
11         private WireArrayInput[] outputs;
12         
13         public Splitter(WireArray input, WireArray... outputs)
14         {
15                 this.input = input;
16                 this.outputs = WireArray.extractInputs(outputs);
17                 input.addObserver(this);
18                 int length = 0;
19                 for(WireArray out : outputs)
20                         length += out.length;
21                 
22                 if(input.length != length)
23                         throw new IllegalArgumentException("The input of splitting one into n WireArrays must have length = a1.length() + a2.length() + ... + an.length().");
24         }
25
26         protected void compute()
27         {
28                 int startIndex = 0;
29                 Bit[] inputBits = input.getValues();
30                 for(int i = 0; i < outputs.length; i++)
31                 {
32                         Bit[] outputBits = new Bit[outputs[i].owner.length];
33                         System.arraycopy(inputBits, startIndex, outputBits, 0, outputs[i].owner.length);
34                         outputs[i].feedSignals(outputBits);
35                         startIndex += outputs[i].owner.length;
36                 }
37         }
38         
39         @Override
40         public void update(WireArray initiator, Bit[] oldValues)
41         {
42                 compute();
43         }
44 }