Added RegisterGroups for MachineDefinition
[Mograsim.git] / plugins / net.mograsim.machine / src / net / mograsim / machine / UnionRegisterGroup.java
1 package net.mograsim.machine;
2
3 import java.util.Collections;
4 import java.util.HashSet;
5 import java.util.List;
6 import java.util.Set;
7 import java.util.stream.Collectors;
8
9 public class UnionRegisterGroup implements RegisterGroup
10 {
11         private final String id;
12         private final Set<RegisterGroup> subGroups;
13         private final Set<Register> subGroupRegisters;
14
15         public UnionRegisterGroup(String id, RegisterGroup... subGroups)
16         {
17                 this.id = id;
18                 this.subGroups = Collections.unmodifiableSet(new HashSet<>(List.of(subGroups)));
19                 this.subGroupRegisters = this.subGroups.stream().flatMap(sg -> sg.getRegisters().stream()).distinct()
20                                 .collect(Collectors.toUnmodifiableSet());
21         }
22
23         @Override
24         public String id()
25         {
26                 return id;
27         }
28
29         @Override
30         public Set<Register> getRegisters()
31         {
32                 return subGroupRegisters;
33         }
34
35         @Override
36         public Set<RegisterGroup> getSubGroups()
37         {
38                 return subGroups;
39         }
40
41 }