e6036f04a274beecf3263c008efbe627aa3e0502
[Mograsim.git] / plugins / net.mograsim.logic.model.verilog / src / net / mograsim / logic / model / verilog / model / statements / Assign.java
1 package net.mograsim.logic.model.verilog.model.statements;
2
3 import java.util.Objects;
4 import java.util.Set;
5
6 import net.mograsim.logic.model.verilog.model.expressions.Expression;
7 import net.mograsim.logic.model.verilog.model.signals.NamedSignal;
8 import net.mograsim.logic.model.verilog.model.signals.Signal;
9 import net.mograsim.logic.model.verilog.utils.CollectionsUtils;
10
11 public class Assign extends Statement
12 {
13         private final NamedSignal target;
14         private final Expression source;
15
16         public Assign(NamedSignal target, Expression source)
17         {
18                 this.target = Objects.requireNonNull(target);
19                 this.source = Objects.requireNonNull(source);
20
21                 check();
22         }
23
24         private void check()
25         {
26                 if (source.getWidth() != target.getWidth())
27                         throw new IllegalArgumentException("Signal widthes don't match");
28         }
29
30         public Signal getTarget()
31         {
32                 return target;
33         }
34
35         public Expression getSource()
36         {
37                 return source;
38         }
39
40         @Override
41         public String toVerilogCode()
42         {
43                 return "assign " + target.toReferenceVerilogCode() + " = " + source.toVerilogCode() + ";";
44         }
45
46         @Override
47         public Set<String> getDefinedNames()
48         {
49                 return Set.of();
50         }
51
52         @Override
53         public Set<Signal> getDefinedSignals()
54         {
55                 return Set.of();
56         }
57
58         @Override
59         public Set<Signal> getReferencedSignals()
60         {
61                 return CollectionsUtils.union(Set.of(target), source.getReferencedSignals());
62         }
63
64         @Override
65         public String toString()
66         {
67                 return target.getName() + " = " + source;
68         }
69
70         @Override
71         public int hashCode()
72         {
73                 final int prime = 31;
74                 int result = 1;
75                 result = prime * result + ((source == null) ? 0 : source.hashCode());
76                 result = prime * result + ((target == null) ? 0 : target.hashCode());
77                 return result;
78         }
79
80         @Override
81         public boolean equals(Object obj)
82         {
83                 if (this == obj)
84                         return true;
85                 if (obj == null)
86                         return false;
87                 if (getClass() != obj.getClass())
88                         return false;
89                 Assign other = (Assign) obj;
90                 if (source == null)
91                 {
92                         if (other.source != null)
93                                 return false;
94                 } else if (!source.equals(other.source))
95                         return false;
96                 if (target == null)
97                 {
98                         if (other.target != null)
99                                 return false;
100                 } else if (!target.equals(other.target))
101                         return false;
102                 return true;
103         }
104 }