Added project specific format; Default values in WireArray are now U
[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.WireArrayEnd;\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 {\r
17         private WireArray output;\r
18         private WireArrayEnd outputI;\r
19         private boolean isOn;\r
20 \r
21         public ManualSwitch(WireArray output)\r
22         {\r
23                 if (output.length != 1)\r
24                         throw new IllegalArgumentException("Switch output can be only a single wire");\r
25                 this.output = output;\r
26                 this.outputI = output.createInput();\r
27         }\r
28 \r
29         public void switchOn()\r
30         {\r
31                 setState(true);\r
32         }\r
33 \r
34         public void switchOff()\r
35         {\r
36                 setState(false);\r
37         }\r
38 \r
39         public void toggle()\r
40         {\r
41                 setState(!isOn);\r
42         }\r
43 \r
44         public void setState(boolean isOn)\r
45         {\r
46                 if (this.isOn == isOn)\r
47                         return;\r
48                 this.isOn = isOn;\r
49                 outputI.feedSignals(getValue());\r
50         }\r
51 \r
52         public boolean isOn()\r
53         {\r
54                 return isOn;\r
55         }\r
56 \r
57         public Bit getValue()\r
58         {\r
59                 return isOn ? Bit.ONE : Bit.ZERO;\r
60         }\r
61 \r
62         @Override\r
63         public List<WireArray> getAllInputs()\r
64         {\r
65                 return List.of();\r
66         }\r
67 \r
68         @Override\r
69         public List<WireArray> getAllOutputs()\r
70         {\r
71                 return List.of(output);\r
72         }\r
73 \r
74 }\r