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