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