Added era.mi; Project containing provisional simulator core
[Mograsim.git] / era.mi / src / era / mi / logic / components / BasicComponent.java
1 package era.mi.logic.components;
2
3 import era.mi.logic.Simulation;
4 import era.mi.logic.WireArray;
5 import era.mi.logic.WireArrayObserver;
6
7 public abstract class BasicComponent implements WireArrayObserver
8 {
9         private int processTime;
10         
11         /**
12          * 
13          * @param processTime Amount of time this component takes to update its outputs. Must be more than 0, otherwise 1 is assumed.
14          * 
15          * @author Fabian Stemmler
16          */
17         public BasicComponent(int processTime)
18         {
19                 this.processTime = processTime > 0 ? processTime : 1;
20         }
21         
22         @Override
23         public void update(WireArray initiator)
24         {
25                 Simulation.TIMELINE.addEvent((e) -> {compute();}, processTime);
26         }
27         
28         protected abstract void compute();
29 }