- @SuppressWarnings("unchecked")
- protected MutableOffsetMap(final Collection<K> keySet) {
- if (!keySet.isEmpty()) {
- removed = keySet.size();
- offsets = OffsetMapCache.offsetsFor(keySet);
- objects = (V[])new Object[removed];
- } else {
- offsets = ImmutableMap.of();
- objects = (V[])EMPTY_ARRAY;
+ static final class Unordered<K, V> extends MutableOffsetMap<K, V> {
+ Unordered() {
+ }
+
+ Unordered(final Map<K, V> source) {
+ super(OffsetMapCache.unorderedOffsets(source.keySet()), source);
+ }
+
+ Unordered(final ImmutableMap<K, Integer> offsets, final V[] objects) {
+ super(offsets, objects);
+ }
+
+ @Override
+ Object removedObject() {
+ return null;
+ }
+
+ @Override
+ UnmodifiableMapPhase<K, V> modifiedMap(final List<K> keys, final V[] values) {
+ final ImmutableMap<K, Integer> offsets = OffsetMapCache.unorderedOffsets(keys);
+ return new ImmutableOffsetMap.Unordered<>(offsets, OffsetMapCache.adjustedArray(offsets, keys, values));
+ }
+
+ @Override
+ UnmodifiableMapPhase<K, V> unmodifiedMap(final ImmutableMap<K, Integer> offsetMap, final V[] values) {
+ return new ImmutableOffsetMap.Unordered<>(offsetMap, values);