{\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
+ setToValueOf(isOn ? Bit.ONE : Bit.ZERO);\r
+ }\r
+\r
+ public void setToValueOf(Bit bit)\r
+ {\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
- this.isOn = isOn;\r
- output.feedSignals(getValue());\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