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