ArrayHolder<K, V> remove(int index) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() - 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); System.arraycopy(this.entries, index + 1, newEntries, index, entries.length - index - 1); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
ArrayHolder<K, V> insert(int index, COWEntry<K, V> newEntry) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() + 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); newEntries[index] = newEntry; System.arraycopy(this.entries, index, newEntries, index + 1, getLength() - index); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
ArrayHolder<K, V> remove(int index) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() - 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); System.arraycopy(this.entries, index + 1, newEntries, index, entries.length - index - 1); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
ArrayHolder<K, V> remove(int index) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() - 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); System.arraycopy(this.entries, index + 1, newEntries, index, entries.length - index - 1); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
ArrayHolder<K, V> replace(int index, COWEntry<K, V> newEntry) { // TODO should this restart the array back at start index 0 ? COWEntry<K, V>[] newEntries = entries.clone(); newEntries[index] = newEntry; return new ArrayHolder<>(newEntries, startIndex, endIndex, keyComparator, comparator); }
@Override public void clear() { throw new UnsupportedOperationException(); } }
ArrayHolder<K, V> remove(int index) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() - 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); System.arraycopy(this.entries, index + 1, newEntries, index, entries.length - index - 1); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
public CopyOnWriteArrayMap(final Comparator<? super K> keyComparator) { this.keyComparator = keyComparator; this.holder = new ArrayHolder<>(keyComparator, new Comparator<Entry<K, V>>() { @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { return keyComparator.compare(o1.getKey(), o2.getKey()); } }); }
ArrayHolder<K, V> insert(int index, COWEntry<K, V> newEntry) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() + 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); newEntries[index] = newEntry; System.arraycopy(this.entries, index, newEntries, index + 1, getLength() - index); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
ArrayHolder<K, V> replace(int index, COWEntry<K, V> newEntry) { // TODO should this restart the array back at start index 0 ? COWEntry<K, V>[] newEntries = entries.clone(); newEntries[index] = newEntry; return new ArrayHolder<>(newEntries, startIndex, endIndex, keyComparator, comparator); }
@Override public void clear() { throw new UnsupportedOperationException(); } }
public CopyOnWriteArrayMap(final Comparator<? super K> keyComparator) { this.keyComparator = keyComparator; this.holder = new ArrayHolder<>(keyComparator, new Comparator<Entry<K, V>>() { @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { return keyComparator.compare(o1.getKey(), o2.getKey()); } }); }
ArrayHolder<K, V> replace(int index, COWEntry<K, V> newEntry) { // TODO should this restart the array back at start index 0 ? COWEntry<K, V>[] newEntries = entries.clone(); newEntries[index] = newEntry; return new ArrayHolder<>(newEntries, startIndex, endIndex, keyComparator, comparator); }
ArrayHolder<K, V> insert(int index, COWEntry<K, V> newEntry) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() + 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); newEntries[index] = newEntry; System.arraycopy(this.entries, index, newEntries, index + 1, getLength() - index); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
ArrayHolder<K, V> insert(int index, COWEntry<K, V> newEntry) { COWEntry<K,V>[] newEntries = new COWEntry[getLength() + 1]; System.arraycopy(this.entries, startIndex, newEntries, 0, index - startIndex); newEntries[index] = newEntry; System.arraycopy(this.entries, index, newEntries, index + 1, getLength() - index); return new ArrayHolder<>(newEntries, 0, newEntries.length, keyComparator, comparator); }
public CopyOnWriteArrayMap(final Comparator<? super K> keyComparator) { this.keyComparator = keyComparator; this.holder = new ArrayHolder<>(keyComparator, new Comparator<Entry<K, V>>() { @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { return keyComparator.compare(o1.getKey(), o2.getKey()); } }); }
@Override public ConcurrentNavigableMap<K, V> tailMap(K fromKey, boolean inclusive) { ArrayHolder<K, V> current = this.holder; int index = current.find(fromKey); if (!inclusive && index >= 0) { index++; } else if (index < 0) { index = -(index + 1); } return new CopyOnWriteArrayMap<>( this.keyComparator, new ArrayHolder<>( current.entries, index, current.endIndex, current.keyComparator, current.comparator)); }
ArrayHolder<K, V> replace(int index, COWEntry<K, V> newEntry) { // TODO should this restart the array back at start index 0 ? COWEntry<K, V>[] newEntries = entries.clone(); newEntries[index] = newEntry; return new ArrayHolder<>(newEntries, startIndex, endIndex, keyComparator, comparator); }
@Override public void clear() { throw new UnsupportedOperationException(); } }
public CopyOnWriteArrayMap(final Comparator<? super K> keyComparator) { this.keyComparator = keyComparator; this.holder = new ArrayHolder<>(keyComparator, new Comparator<Entry<K, V>>() { @Override public int compare(Entry<K, V> o1, Entry<K, V> o2) { return keyComparator.compare(o1.getKey(), o2.getKey()); } }); }