4e56c347509ef2d2bea9b81d28236cc1105c53f6
[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 /**
9  * A basic component that recomputes all outputs (with a delay), when it is updated.
10  * @author Fabian Stemmler
11  */
12 public abstract class BasicComponent implements WireArrayObserver, Component
13 {
14         private int processTime;
15         
16         /**
17          * 
18          * @param processTime Amount of time this component takes to update its outputs. Must be more than 0, otherwise 1 is assumed.
19          * 
20          * @author Fabian Stemmler
21          */
22         public BasicComponent(int processTime)
23         {
24                 this.processTime = processTime > 0 ? processTime : 1;
25         }
26         
27         @Override
28         public void update(WireArray initiator, Bit[] oldValues)
29         {
30                 Simulation.TIMELINE.addEvent((e) -> {compute();}, processTime);
31         }
32         
33         protected abstract void compute();
34 }