{
private Collection<LogicObserver> observers;
private ReadWriteEnd output;
- private boolean isOn;
public ManualSwitch(Timeline timeline, ReadWriteEnd output)
{
public void toggle()
{
- setState(!isOn);
+ setState(!isOn());
}
public void setState(boolean isOn)
{
- if (this.isOn == isOn)
- return;
- this.isOn = isOn;
- output.feedSignals(getValue());
- notifyObservers();
+ setToValueOf(isOn ? Bit.ONE : Bit.ZERO);
}
public void setToValueOf(Bit bit)
{
- if (bit == Bit.ONE)
- switchOn();
- else if (bit == Bit.ZERO)
- switchOff();
- else
+ if (!bit.isBinary())
throw new IllegalArgumentException("Cannot set ManualSwitch to the value of Bit " + bit);
+ if (bit == output.getInputValue())
+ return;
+ output.feedSignals(bit);
+ notifyObservers();
}
public boolean isOn()
{
- return isOn;
+ return output.getInputValue() == Bit.ONE;
}
public Bit getValue()
{
- return isOn ? Bit.ONE : Bit.ZERO;
+ return output.getInputValue();
}
@Override