1 package org.metricshub.jawk.intermediate;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import java.io.Serializable;
26 import java.util.HashMap;
27 import java.util.HashSet;
28 import java.util.Map;
29 import java.util.Set;
30
31
32
33
34
35 class AddressManager implements Serializable {
36
37 private static final long serialVersionUID = 1L;
38
39 private final Set<Address> unresolvedAddresses = new HashSet<Address>();
40 private final Map<Integer, Address> addressIndexes = new HashMap<Integer, Address>();
41 private final Map<String, Integer> addressLabelCounts = new HashMap<String, Integer>();
42
43 Address createAddress(String label) {
44 Integer count = addressLabelCounts.get(label);
45 if (count == null) {
46 count = 0;
47 } else {
48 count = count + 1;
49 }
50 addressLabelCounts.put(label, count);
51 Address address = new Address(label + "_" + count);
52 unresolvedAddresses.add(address);
53 return address;
54 }
55
56 void resolveAddress(Address address, int index) {
57 if (unresolvedAddresses.contains(address)) {
58 unresolvedAddresses.remove(address);
59 address.assignIndex(index);
60 addressIndexes.put(index, address);
61 } else {
62 throw new Error(address.toString() + " is already resolved, or unresolved from another scope.");
63 }
64 }
65
66 Address getAddress(int index) {
67 return addressIndexes.get(index);
68 }
69 }