Did some clean up
[Mograsim.git] / era.mi / src / era / mi / logic / components / Clock.java
1 package era.mi.logic.components;
2
3 import java.util.List;
4
5 import era.mi.logic.Bit;
6 import era.mi.logic.Simulation;
7 import era.mi.logic.timeline.TimelineEvent;
8 import era.mi.logic.timeline.TimelineEventHandler;
9 import era.mi.logic.wires.WireArray;
10 import era.mi.logic.wires.WireArray.WireArrayEnd;
11
12 public class Clock implements TimelineEventHandler, Component
13 {
14         private boolean toggle = false;
15         private WireArrayEnd outI;
16         private int delta;
17
18         /**
19          * 
20          * @param out   {@link WireArray} the clock's impulses are fed into
21          * @param delta ticks between rising and falling edge
22          */
23         public Clock(WireArray out, int delta)
24         {
25                 this.delta = delta;
26                 this.outI = out.createInput();
27                 Simulation.TIMELINE.addEvent(this, delta);
28         }
29
30         @Override
31         public void handle(TimelineEvent e)
32         {
33                 addToTimeline();
34                 outI.feedSignals(toggle ? Bit.ONE : Bit.ZERO);
35                 toggle = !toggle;
36         }
37
38         public WireArray getOut()
39         {
40                 return outI.owner;
41         }
42
43         private void addToTimeline()
44         {
45                 Simulation.TIMELINE.addEvent(this, delta);
46         }
47
48         @Override
49         public List<WireArray> getAllInputs()
50         {
51                 return List.of();
52         }
53
54         @Override
55         public List<WireArray> getAllOutputs()
56         {
57                 return List.of(outI.owner);
58         }
59 }