204f3a61207c1c16c7c75ad3f51749e4fec6ce7f
[Mograsim.git] / era.mi / src / era / mi / logic / components / BasicComponent.java
1 package era.mi.logic.components;\r
2 \r
3 import era.mi.logic.Bit;\r
4 import era.mi.logic.Simulation;\r
5 import era.mi.logic.wires.WireArray;\r
6 import era.mi.logic.wires.WireArrayObserver;\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 implements WireArrayObserver, Component\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(int processTime)\r
24         {\r
25                 this.processTime = processTime > 0 ? processTime : 1;\r
26         }\r
27 \r
28         @Override\r
29         public void update(WireArray initiator, Bit[] oldValues)\r
30         {\r
31                 Simulation.TIMELINE.addEvent((e) ->\r
32                 {\r
33                         compute();\r
34                 }, processTime);\r
35         }\r
36 \r
37         protected abstract void compute();\r
38 }\r