04a8d835770dca89a9b3eb2b1d04bdf971cc1704
[Mograsim.git] / era.mi / src / net / mograsim / logic / core / components / ManualSwitch.java
1 package net.mograsim.logic.core.components;\r
2 \r
3 import java.util.List;\r
4 \r
5 import net.mograsim.logic.core.timeline.Timeline;\r
6 import net.mograsim.logic.core.types.Bit;\r
7 import net.mograsim.logic.core.wires.Wire.ReadEnd;\r
8 import net.mograsim.logic.core.wires.Wire.ReadWriteEnd;\r
9 \r
10 /**\r
11  * This class models a simple on/off (ONE/ZERO) switch for user interaction.\r
12  *\r
13  * @author Christian Femers\r
14  *\r
15  */\r
16 public class ManualSwitch extends Component\r
17 {\r
18         private ReadWriteEnd output;\r
19         private boolean isOn;\r
20 \r
21         public ManualSwitch(Timeline timeline, ReadWriteEnd output)\r
22         {\r
23                 super(timeline);\r
24                 if (output.length() != 1)\r
25                         throw new IllegalArgumentException("Switch output can be only a single wire");\r
26                 this.output = output;\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                 output.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<ReadEnd> getAllInputs()\r
64         {\r
65                 return List.of();\r
66         }\r
67 \r
68         @Override\r
69         public List<ReadWriteEnd> getAllOutputs()\r
70         {\r
71                 return List.of(output);\r
72         }\r
73 \r
74 }\r