aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/collect
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-02-23 10:37:50 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-23 10:39:46 -0800
commit61aa6b7634394c7674d04da8206cf35f2aae976a (patch)
treec7341d7bcea5cdf16d53db67b0da3e274d014309 /src/main/java/com/google/devtools/build/lib/collect
parentf33ac562114cd518a3f232e59e0b12186fe7e36d (diff)
@AutoCodec TransitiveInfoProviderMapImpl and JavaInfo.
PiperOrigin-RevId: 186789569
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/collect')
-rw-r--r--src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java38
1 files changed, 14 insertions, 24 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
index 3fdde7fbfe..42a7af8723 100644
--- a/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
+++ b/src/main/java/com/google/devtools/build/lib/collect/ImmutableSharedKeyMap.java
@@ -22,7 +22,6 @@ import com.google.devtools.build.lib.concurrent.BlazeInterners;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import java.util.Map;
import javax.annotation.concurrent.Immutable;
/**
@@ -43,10 +42,16 @@ import javax.annotation.concurrent.Immutable;
public class ImmutableSharedKeyMap<K, V> extends CompactImmutableMap<K, V> {
private static final Interner<OffsetTable> offsetTables = BlazeInterners.newWeakInterner();
- private final OffsetTable<K> offsetTable;
- private final Object[] values;
+ // Visible only for serialization.
+ protected final OffsetTable<K> offsetTable;
+ protected final Object[] values;
- private static final class OffsetTable<K> {
+ /**
+ * Table storing {@code keys} compactly as an array, with an index lookup map for speed.
+ *
+ * <p>Only externally visible for serialization purposes.
+ */
+ public static final class OffsetTable<K> {
private final Object[] keys;
// Keep a map around to speed up get lookups for larger maps.
// We make this value lazy to avoid computing for values that end up being thrown away
@@ -99,29 +104,14 @@ public class ImmutableSharedKeyMap<K, V> extends CompactImmutableMap<K, V> {
}
}
- protected ImmutableSharedKeyMap(Object[] keys, Object[] values) {
- Preconditions.checkArgument(keys.length == values.length);
+ protected ImmutableSharedKeyMap(OffsetTable<K> offsetTable, Object[] values) {
+ Preconditions.checkArgument(offsetTable.keys.length == values.length);
+ this.offsetTable = offsetTable;
this.values = values;
- this.offsetTable = createOffsetTable(keys);
- }
-
- protected ImmutableSharedKeyMap(Map<K, V> map) {
- int count = map.size();
- Object[] keys = new Object[count];
- Object[] values = new Object[count];
- int i = 0;
- for (Map.Entry<K, V> entry : map.entrySet()) {
- keys[i] = entry.getKey();
- values[i] = entry.getValue();
- ++i;
- }
- Preconditions.checkArgument(keys.length == values.length);
- this.values = values;
- this.offsetTable = createOffsetTable(keys);
}
@SuppressWarnings("unchecked")
- private static <K> OffsetTable<K> createOffsetTable(Object[] keys) {
+ protected static <K> OffsetTable<K> createOffsetTable(Object[] keys) {
OffsetTable<K> offsetTable = new OffsetTable<>(keys);
OffsetTable<K> internedTable = (OffsetTable<K>) offsetTables.intern(offsetTable);
internedTable.initIndexMap();
@@ -197,7 +187,7 @@ public class ImmutableSharedKeyMap<K, V> extends CompactImmutableMap<K, V> {
keys[i] = entries.get(entryIndex++);
values[i] = entries.get(entryIndex++);
}
- return new ImmutableSharedKeyMap<>(keys, values);
+ return new ImmutableSharedKeyMap<>(createOffsetTable(keys), values);
}
}
}