1 package net.mograsim.logic.model.verilog.helper;
3 import java.util.Collection;
4 import java.util.HashSet;
6 import java.util.function.Function;
8 public class IdentifierGenerator
10 private final Function<String, String> sanitizer;
11 private final Set<String> usedIdentifiers;
13 public IdentifierGenerator()
15 this(Function.identity());
18 public IdentifierGenerator(Function<String, String> sanitizer)
20 this.usedIdentifiers = new HashSet<>();
21 this.sanitizer = sanitizer;
24 public IdentifierGenerator(Collection<String> forbiddenIDs)
26 this(forbiddenIDs, Function.identity());
29 public IdentifierGenerator(Collection<String> forbiddenIDs, Function<String, String> sanitizer)
31 this.usedIdentifiers = new HashSet<>(forbiddenIDs);
32 this.sanitizer = sanitizer;
35 public String generateID(String hint)
37 String sanitized = sanitizer.apply(hint);
38 if (usedIdentifiers.add(sanitized))
41 String idBase = sanitized.isEmpty() ? "_" : sanitized;
43 if (usedIdentifiers.add(idBase + i))