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