Integrated new types, tests still work, not used yet
[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.types.Bit;\r
6 import era.mi.logic.wires.Wire.WireEnd;\r
7 \r
8 /**\r
9  * This class models a simple on/off (ONE/ZERO) switch for user interaction.\r
10  *\r
11  * @author Christian Femers\r
12  *\r
13  */\r
14 public class ManualSwitch implements Component\r
15 {\r
16         private WireEnd output;\r
17         private boolean isOn;\r
18 \r
19         public ManualSwitch(WireEnd output)\r
20         {\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         }\r
25 \r
26         public void switchOn()\r
27         {\r
28                 setState(true);\r
29         }\r
30 \r
31         public void switchOff()\r
32         {\r
33                 setState(false);\r
34         }\r
35 \r
36         public void toggle()\r
37         {\r
38                 setState(!isOn);\r
39         }\r
40 \r
41         public void setState(boolean isOn)\r
42         {\r
43                 if (this.isOn == isOn)\r
44                         return;\r
45                 this.isOn = isOn;\r
46                 output.feedSignals(getValue());\r
47         }\r
48 \r
49         public boolean isOn()\r
50         {\r
51                 return isOn;\r
52         }\r
53 \r
54         public Bit getValue()\r
55         {\r
56                 return isOn ? Bit.ONE : Bit.ZERO;\r
57         }\r
58 \r
59         @Override\r
60         public List<WireEnd> getAllInputs()\r
61         {\r
62                 return List.of();\r
63         }\r
64 \r
65         @Override\r
66         public List<WireEnd> getAllOutputs()\r
67         {\r
68                 return List.of(output);\r
69         }\r
70 \r
71 }\r