added demux; added getAllInputs() and getAllOutputs() for all components
[Mograsim.git] / era.mi / src / era / mi / logic / components / BasicComponent.java
1 package era.mi.logic.components;
2
3 import era.mi.logic.Bit;
4 import era.mi.logic.Simulation;
5 import era.mi.logic.wires.WireArray;
6 import era.mi.logic.wires.WireArrayObserver;
7
8 public abstract class BasicComponent implements WireArrayObserver, Component
9 {
10         private int processTime;
11         
12         /**
13          * 
14          * @param processTime Amount of time this component takes to update its outputs. Must be more than 0, otherwise 1 is assumed.
15          * 
16          * @author Fabian Stemmler
17          */
18         public BasicComponent(int processTime)
19         {
20                 this.processTime = processTime > 0 ? processTime : 1;
21         }
22         
23         @Override
24         public void update(WireArray initiator, Bit[] oldValues)
25         {
26                 Simulation.TIMELINE.addEvent((e) -> {compute();}, processTime);
27         }
28         
29         protected abstract void compute();
30 }