-package era.mi.logic.components;
-
-import era.mi.logic.Bit;
-import era.mi.logic.Simulation;
-import era.mi.logic.timeline.TimelineEvent;
-import era.mi.logic.timeline.TimelineEventHandler;
-import era.mi.logic.wires.WireArray;
-import era.mi.logic.wires.WireArray.WireArrayInput;
-
-public class Clock implements TimelineEventHandler
-{
- private boolean toggle = false;
- private WireArrayInput outI;
-
- public Clock(WireArray out)
- {
- this.outI = out.createInput();
- }
-
- @Override
- public void handle(TimelineEvent e)
- {
- Simulation.TIMELINE.addEvent(this, 50);
- outI.feedSignals(new Bit[] { toggle ? Bit.ONE : Bit.ZERO });
- toggle = !toggle;
- }
-
- public WireArray getOut()
- {
- return outI.owner;
- }
-}
+package era.mi.logic.components;\r
+\r
+import java.util.Arrays;\r
+import java.util.Collections;\r
+import java.util.List;\r
+\r
+import era.mi.logic.Bit;\r
+import era.mi.logic.Simulation;\r
+import era.mi.logic.timeline.TimelineEvent;\r
+import era.mi.logic.timeline.TimelineEventHandler;\r
+import era.mi.logic.wires.WireArray;\r
+import era.mi.logic.wires.WireArray.WireArrayInput;\r
+\r
+public class Clock implements TimelineEventHandler, Component {\r
+ private boolean toggle = false;\r
+ private WireArrayInput outI;\r
+ private int delta;\r
+\r
+ /**\r
+ * \r
+ * @param out {@link WireArray} the clock's impulses are fed into\r
+ * @param delta ticks between rising and falling edge\r
+ */\r
+ public Clock(WireArray out, int delta) {\r
+ this.delta = delta;\r
+ this.outI = out.createInput();\r
+ Simulation.TIMELINE.addEvent(this, 50);\r
+ }\r
+\r
+ @Override\r
+ public void handle(TimelineEvent e) {\r
+ addToTimeline();\r
+ outI.feedSignals(new Bit[] { toggle ? Bit.ONE : Bit.ZERO });\r
+ toggle = !toggle;\r
+ }\r
+\r
+ public WireArray getOut() {\r
+ return outI.owner;\r
+ }\r
+\r
+ private void addToTimeline() {\r
+ Simulation.TIMELINE.addEvent(this, delta);\r
+ }\r
+\r
+ @Override\r
+ public List<WireArray> getAllInputs() {\r
+ return Collections.unmodifiableList(Arrays.asList());\r
+ }\r
+\r
+ @Override\r
+ public List<WireArray> getAllOutputs() {\r
+ return Collections.unmodifiableList(Arrays.asList(outI.owner));\r
+ }\r
+}\r