509c662b7f108bf79d78ea0f86326a52d37fd73a
[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) ->
32                 {
33                         compute();
34                 }, processTime);
35         }
36
37         protected abstract void compute();
38 }