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