*/
public class Wire
{
+ public final String name;
private BitVector values;
public final int travelTime;
- private List<ReadEnd> attached = new ArrayList<ReadEnd>();
+ private List<ReadEnd> attached = new ArrayList<>();
public final int length;
- private List<ReadWriteEnd> inputs = new ArrayList<ReadWriteEnd>();
- private Timeline timeline;
+ List<ReadWriteEnd> inputs = new ArrayList<>();
+ Timeline timeline;
public Wire(Timeline timeline, int length, int travelTime)
+ {
+ this(timeline, length, travelTime, null);
+ }
+
+ public Wire(Timeline timeline, int length, int travelTime, String name)
{
if (length < 1)
throw new IllegalArgumentException(
String.format("Tried to create an array of wires with length %d, but a length of less than 1 makes no sense.", length));
+ this.name = name;
this.timeline = timeline;
this.length = length;
this.travelTime = travelTime;
{
if (values.equals(newValues))
return;
- BitVector oldValues = values;
+// BitVector oldValues = values;
values = newValues;
- notifyObservers(oldValues);
+ notifyObservers();
}
- private void recalculate()
+ void recalculate()
{
switch (inputs.size())
{
*
* @author Fabian Stemmler
*/
- private void attachEnd(ReadEnd end)
+ void attachEnd(ReadEnd end)
{
attached.add(end);
}
- private void detachEnd(ReadEnd end)
+ void detachEnd(ReadEnd end)
{
attached.remove(end);
}
- private void notifyObservers(BitVector oldValues)
+ private void notifyObservers()
{
- for (ReadEnd o : attached)
- o.update(oldValues);
+ attached.forEach(r -> r.update());
}
/**
return new ReadEnd();
}
- private void registerInput(ReadWriteEnd toRegister)
+ void registerInput(ReadWriteEnd toRegister)
{
inputs.add(toRegister);
}
*/
public class ReadEnd implements LogicObservable
{
- private List<LogicObserver> observers = new ArrayList<LogicObserver>();
+ private List<LogicObserver> observers = new ArrayList<>();
- private ReadEnd()
+ ReadEnd()
{
super();
Wire.this.attachEnd(this);
}
- public void update(BitVector oldValues)
+ public void update()
{
notifyObservers();
}
observers.add(ob);
}
+ @Override
+ public void deregisterObserver(LogicObserver ob)
+ {
+ observers.remove(ob);
+ }
+
@Override
public void notifyObservers()
{
- for (LogicObserver ob : observers)
- ob.update(this);
+ observers.forEach(ob -> ob.update(this));
}
}
private boolean open;
private BitVector inputValues;
- private ReadWriteEnd()
+ ReadWriteEnd()
{
super();
open = true;
@Override
public String toString()
{
- return String.format("wire 0x%08x value: %s inputs: %s", hashCode(), values, inputs);
+ String name = this.name == null ? String.format("0x%08x", hashCode()) : this.name;
+ return String.format("wire %s value: %s inputs: %s", name, values, inputs);
}
public static ReadEnd[] extractEnds(Wire[] w)