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