Reformatted everything. Eclipse built-in Linewrapping/Comments 140 chars
[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         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(int processTime) {\r
23                 this.processTime = processTime > 0 ? processTime : 1;\r
24         }\r
25 \r
26         @Override\r
27         public void update(WireArray initiator, Bit[] oldValues) {\r
28                 Simulation.TIMELINE.addEvent((e) -> {\r
29                         compute();\r
30                 }, processTime);\r
31         }\r
32 \r
33         protected abstract void compute();\r
34 }\r