import java.util.ArrayList;
import java.util.List;
+import net.mograsim.logic.core.LogicObservable;
+import net.mograsim.logic.core.LogicObserver;
import net.mograsim.logic.core.timeline.Timeline;
import net.mograsim.logic.core.types.Bit;
import net.mograsim.logic.core.types.BitVector;
}
/**
- * Adds an {@link WireObserver}, who will be notified when the value of the {@link Wire} is updated.
+ * Adds an {@link LogicObserver}, who will be notified when the value of the {@link Wire} is updated.
*
- * @param ob The {@link WireObserver} to be notified of changes.
- * @return true if the given {@link WireObserver} was not already registered, false otherwise
+ * @param ob The {@link LogicObserver} to be notified of changes.
+ * @return true if the given {@link LogicObserver} was not already registered, false otherwise
*
* @author Fabian Stemmler
*/
*
* @author Fabian Stemmler
*/
- public class ReadEnd
+ public class ReadEnd implements LogicObservable
{
- private List<WireObserver> observers = new ArrayList<WireObserver>();
+ private List<LogicObserver> observers = new ArrayList<LogicObserver>();
private ReadEnd()
{
public void update(BitVector oldValues)
{
- for (WireObserver ob : observers)
- ob.update(this, oldValues);
+ notifyObservers();
}
/**
return length;
}
- public boolean addObserver(WireObserver ob)
+ public Wire getWire()
{
- return observers.add(ob);
+ return Wire.this;
}
- public Wire getWire()
+ @Override
+ public void registerObserver(LogicObserver ob)
{
- return Wire.this;
+ observers.add(ob);
+ }
+
+ @Override
+ public void notifyObservers()
+ {
+ for (LogicObserver ob : observers)
+ ob.update(this);
}
}
public String toString()
{
return String.format("wire 0x%08x value: %s inputs: %s", hashCode(), values, inputs);
- // Arrays.toString(values), inputs.stream().map(i -> Arrays.toString(i.inputValues)).reduce((s1, s2) -> s1 + s2)
}
public static ReadEnd[] extractEnds(Wire[] w)