ExportAm2900 now prints module headers for "atomic" components
[Mograsim.git] / plugins / net.mograsim.logic.model.verilog / src / net / mograsim / logic / model / verilog / helper / IdentifierGenerator.java
1 package net.mograsim.logic.model.verilog.helper;
2
3 import java.util.Collection;
4 import java.util.HashSet;
5 import java.util.Set;
6 import java.util.function.Function;
7
8 public class IdentifierGenerator
9 {
10         private final Function<String, String> sanitizer;
11         private final Set<String> usedIdentifiers;
12
13         public IdentifierGenerator()
14         {
15                 this(Function.identity());
16         }
17
18         public IdentifierGenerator(Function<String, String> sanitizer)
19         {
20                 this.usedIdentifiers = new HashSet<>();
21                 this.sanitizer = sanitizer;
22         }
23
24         public IdentifierGenerator(Collection<String> forbiddenIDs)
25         {
26                 this(forbiddenIDs, Function.identity());
27         }
28
29         public IdentifierGenerator(Collection<String> forbiddenIDs, Function<String, String> sanitizer)
30         {
31                 this.usedIdentifiers = new HashSet<>(forbiddenIDs);
32                 this.sanitizer = sanitizer;
33         }
34
35         public String generateID(String hint)
36         {
37                 String sanitized = sanitizer.apply(hint);
38                 if (usedIdentifiers.add(sanitized))
39                         return sanitized;
40
41                 String idBase = sanitized.isEmpty() ? "_" : sanitized;
42                 for (int i = 0;; i++)
43                         if (usedIdentifiers.add(idBase + i))
44                                 return idBase + i;
45         }
46 }