Renamed project folders to match the respective project name
[Mograsim.git] / net.mograsim.logic.core / src / net / mograsim / logic / core / components / BasicComponent.java
1 package net.mograsim.logic.core.components;
2
3 import net.mograsim.logic.core.timeline.Timeline;
4 import net.mograsim.logic.core.types.BitVector;
5 import net.mograsim.logic.core.wires.WireObserver;
6 import net.mograsim.logic.core.wires.Wire.ReadEnd;
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 }