6fea551f33b153e88ed1863dfa9c3c16aa0f90a8
[Mograsim.git] / plugins / net.mograsim.machine / src / net / mograsim / machine / StandardRegister.java
1 package net.mograsim.machine;
2
3 import java.util.Collections;
4 import java.util.HashMap;
5 import java.util.HashSet;
6 import java.util.Map;
7 import java.util.Set;
8
9 public abstract class StandardRegister implements Register
10 {
11         private final String id;
12         private final Set<String> names;
13         private final int width;
14         private final Map<String, Integer> widthForAliases;
15
16         public StandardRegister(String id, Set<String> names, int width, Map<String, Integer> widthForAliases)
17         {
18                 this.id = id;
19                 this.names = Collections.unmodifiableSet(new HashSet<>(names));
20                 this.width = width;
21                 this.widthForAliases = Collections.unmodifiableMap(new HashMap<>(widthForAliases));
22         }
23
24         @Override
25         public String id()
26         {
27                 return id;
28         }
29
30         @Override
31         public Set<String> names()
32         {
33                 return names;
34         }
35
36         @Override
37         public int getWidth()
38         {
39                 return width;
40         }
41
42         @Override
43         public int getWidth(String name)
44         {
45                 return widthForAliases.getOrDefault(name, width);
46         }
47 }