diff options
author | janakr <janakr@google.com> | 2018-02-23 10:37:50 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-23 10:39:46 -0800 |
commit | 61aa6b7634394c7674d04da8206cf35f2aae976a (patch) | |
tree | c7341d7bcea5cdf16d53db67b0da3e274d014309 /src/main/java/com/google/devtools/build/lib/collect | |
parent | f33ac562114cd518a3f232e59e0b12186fe7e36d (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.java | 38 |
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); } } } |