Reformatted everything. Eclipse built-in Linewrapping/Comments 140 chars
[Mograsim.git] / era.mi / src / era / mi / logic / components / ManualSwitch.java
1 package era.mi.logic.components;\r
2 \r
3 import java.util.List;\r
4 \r
5 import era.mi.logic.Bit;\r
6 import era.mi.logic.wires.WireArray;\r
7 import era.mi.logic.wires.WireArray.WireArrayInput;\r
8 \r
9 /**\r
10  * This class models a simple on/off (ONE/ZERO) switch for user interaction.\r
11  *\r
12  * @author Christian Femers\r
13  *\r
14  */\r
15 public class ManualSwitch implements Component {\r
16         private WireArray output;\r
17         private WireArrayInput outputI;\r
18         private boolean isOn;\r
19 \r
20         public ManualSwitch(WireArray output) {\r
21                 if (output.length != 1)\r
22                         throw new IllegalArgumentException("Switch output can be only a single wire");\r
23                 this.output = output;\r
24                 this.outputI = output.createInput();\r
25         }\r
26 \r
27         public void switchOn() {\r
28                 setState(true);\r
29         }\r
30 \r
31         public void switchOff() {\r
32                 setState(false);\r
33         }\r
34 \r
35         public void toggle() {\r
36                 setState(!isOn);\r
37         }\r
38 \r
39         public void setState(boolean isOn) {\r
40                 if (this.isOn == isOn)\r
41                         return;\r
42                 this.isOn = isOn;\r
43                 outputI.feedSignals(getValue());\r
44         }\r
45 \r
46         public boolean isOn() {\r
47                 return isOn;\r
48         }\r
49 \r
50         public Bit getValue() {\r
51                 return isOn ? Bit.ONE : Bit.ZERO;\r
52         }\r
53 \r
54         @Override\r
55         public List<WireArray> getAllInputs() {\r
56                 return List.of();\r
57         }\r
58 \r
59         @Override\r
60         public List<WireArray> getAllOutputs() {\r
61                 return List.of(output);\r
62         }\r
63 \r
64 }\r