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