1 package net.mograsim.logic.core.components;
3 import java.util.Collection;
4 import java.util.HashSet;
7 import net.mograsim.logic.core.LogicObservable;
8 import net.mograsim.logic.core.LogicObserver;
9 import net.mograsim.logic.core.timeline.Timeline;
10 import net.mograsim.logic.core.timeline.TimelineEvent;
11 import net.mograsim.logic.core.timeline.TimelineEventHandler;
12 import net.mograsim.logic.core.types.Bit;
13 import net.mograsim.logic.core.wires.CoreWire;
14 import net.mograsim.logic.core.wires.CoreWire.ReadEnd;
15 import net.mograsim.logic.core.wires.CoreWire.ReadWriteEnd;
17 public class CoreClock extends CoreComponent implements TimelineEventHandler, LogicObservable
19 private Collection<LogicObserver> observers;
20 private boolean toggle = false;
21 private ReadWriteEnd out;
26 * @param out {@link CoreWire} the clock's impulses are fed into
27 * @param delta ticks between rising and falling edge
29 public CoreClock(Timeline timeline, ReadWriteEnd out, int delta)
34 this.observers = new HashSet<>();
39 public void handle(TimelineEvent e)
42 out.feedSignals(toggle ? Bit.ONE : Bit.ZERO);
47 public ReadWriteEnd getOut()
57 private void addToTimeline()
59 timeline.addEvent(this, delta);
63 public List<ReadEnd> getAllInputs()
69 public List<ReadWriteEnd> getAllOutputs()
75 public void registerObserver(LogicObserver ob)
81 public void deregisterObserver(LogicObserver ob)
87 public void notifyObservers()
89 observers.forEach(ob -> ob.update(this));