Timeline now passed via constructor
[Mograsim.git] / era.mi / src / era / mi / logic / components / BasicComponent.java
1 package era.mi.logic.components;
2
3 import era.mi.logic.timeline.Timeline;
4 import era.mi.logic.types.BitVector;
5 import era.mi.logic.wires.Wire.ReadEnd;
6 import era.mi.logic.wires.WireObserver;
7
8 /**
9  * A basic component that recomputes all outputs (with a delay), when it is updated.
10  * 
11  * @author Fabian Stemmler
12  */
13 public abstract class BasicComponent extends Component implements WireObserver
14 {
15         private int processTime;
16
17         /**
18          * 
19          * @param processTime Amount of time this component takes to update its outputs. Must be more than 0, otherwise 1 is assumed.
20          * 
21          * @author Fabian Stemmler
22          */
23         public BasicComponent(Timeline timeline, int processTime)
24         {
25                 super(timeline);
26                 this.processTime = processTime > 0 ? processTime : 1;
27         }
28
29         @Override
30         public void update(ReadEnd initiator, BitVector oldValues)
31         {
32                 timeline.addEvent(e -> compute(), processTime);
33         }
34
35         protected abstract void compute();
36 }