mirror of
https://github.com/BX-Team/DivineMC.git
synced 2025-12-21 07:49:18 +00:00
possible fix for new NPE
This commit is contained in:
@@ -0,0 +1,744 @@
|
||||
package org.bxteam.divinemc.util;
|
||||
|
||||
import it.unimi.dsi.fastutil.bytes.ByteIterator;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.IntCollection;
|
||||
import it.unimi.dsi.fastutil.ints.IntIterator;
|
||||
import it.unimi.dsi.fastutil.ints.IntSet;
|
||||
import it.unimi.dsi.fastutil.longs.LongIterator;
|
||||
import it.unimi.dsi.fastutil.longs.LongListIterator;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectCollection;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectIterator;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectSet;
|
||||
import it.unimi.dsi.fastutil.objects.ReferenceSet;
|
||||
import it.unimi.dsi.fastutil.shorts.ShortIterator;
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.ListIterator;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public final class CollectionWrapperUtil {
|
||||
private CollectionWrapperUtil() {
|
||||
throw new IllegalStateException("This class cannot be instantiated");
|
||||
}
|
||||
|
||||
private static <T> Int2ObjectMap.@NotNull Entry<T> intEntryForwards(Map.Entry<Integer, T> entry) {
|
||||
return new Int2ObjectMap.Entry<>() {
|
||||
@Override
|
||||
public T getValue() {
|
||||
return entry.getValue();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T setValue(T value) {
|
||||
return entry.setValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getIntKey() {
|
||||
return entry.getKey();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (obj == entry) {
|
||||
return true;
|
||||
}
|
||||
return super.equals(obj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return entry.hashCode();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private static <T> Map.Entry<Integer, T> intEntryBackwards(Int2ObjectMap.Entry<T> entry) {
|
||||
return entry;
|
||||
}
|
||||
|
||||
public static <T> ObjectSet<Int2ObjectMap.Entry<T>> entrySetIntWrap(Map<Integer, T> map) {
|
||||
return new ConvertingObjectSet<>(
|
||||
map.entrySet(),
|
||||
CollectionWrapperUtil::intEntryForwards,
|
||||
CollectionWrapperUtil::intEntryBackwards
|
||||
);
|
||||
}
|
||||
|
||||
public static IntSet wrapIntSet(Set<Integer> intset) {
|
||||
return new WrappingIntSet(intset);
|
||||
}
|
||||
|
||||
public static ByteIterator itrByteWrap(Iterator<Byte> backing) {
|
||||
return new WrappingByteIterator(backing);
|
||||
}
|
||||
|
||||
public static ByteIterator itrByteWrap(Iterable<Byte> backing) {
|
||||
return itrByteWrap(backing.iterator());
|
||||
}
|
||||
|
||||
public static IntIterator itrIntWrap(Iterator<Integer> backing) {
|
||||
return new WrappingIntIterator(backing);
|
||||
}
|
||||
|
||||
public static IntIterator itrIntWrap(Iterable<Integer> backing) {
|
||||
return itrIntWrap(backing.iterator());
|
||||
}
|
||||
|
||||
public static LongIterator itrLongWrap(Iterator<Long> backing) {
|
||||
return new WrappingLongIterator(backing);
|
||||
}
|
||||
|
||||
public static LongIterator itrLongWrap(Iterable<Long> backing) {
|
||||
return itrLongWrap(backing.iterator());
|
||||
}
|
||||
|
||||
public static ShortIterator itrShortWrap(Iterator<Short> backing) {
|
||||
return new WrappingShortIterator(backing);
|
||||
}
|
||||
|
||||
public static ShortIterator itrShortWrap(Iterable<Short> backing) {
|
||||
return itrShortWrap(backing.iterator());
|
||||
}
|
||||
|
||||
public static LongListIterator wrap(ListIterator<Long> c) {
|
||||
return new WrappingLongListIterator(c);
|
||||
}
|
||||
|
||||
public static LongListIterator wrap(Iterator<Long> c) {
|
||||
return new SlimWrappingLongListIterator(c);
|
||||
}
|
||||
|
||||
public static <K> ObjectCollection<K> wrap(Collection<K> c) {
|
||||
return new WrappingObjectCollection<>(c);
|
||||
}
|
||||
|
||||
public static <K> ReferenceSet<K> wrap(Set<K> s) {
|
||||
return new WrappingRefSet<>(s);
|
||||
}
|
||||
|
||||
public static <T> ObjectIterator<T> itrWrap(Iterable<T> in) {
|
||||
return new WrapperObjectIterator<>(in.iterator());
|
||||
}
|
||||
|
||||
public static class ConvertingObjectSet<E, T> implements ObjectSet<T> {
|
||||
private final Set<E> backing;
|
||||
private final Function<E, T> forward;
|
||||
private final Function<T, E> back;
|
||||
|
||||
public ConvertingObjectSet(Set<E> backing, Function<E, T> forward, Function<T, E> back) {
|
||||
this.backing = Objects.requireNonNull(backing, "Backing set cannot be null");
|
||||
this.forward = Objects.requireNonNull(forward, "Forward function cannot be null");
|
||||
this.back = Objects.requireNonNull(back, "Backward function cannot be null");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return backing.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return backing.isEmpty();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean contains(Object o) {
|
||||
try {
|
||||
return backing.contains(back.apply((T) o));
|
||||
} catch (ClassCastException cce) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return backing.stream().map(forward).toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R> R[] toArray(R[] a) {
|
||||
return backing.stream().map(forward).collect(Collectors.toSet()).toArray(a);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(T e) {
|
||||
return backing.add(back.apply(e));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean remove(Object o) {
|
||||
try {
|
||||
return backing.remove(back.apply((T) o));
|
||||
} catch (ClassCastException cce) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> c) {
|
||||
try {
|
||||
return backing.containsAll(c.stream()
|
||||
.map(i -> back.apply((T) i))
|
||||
.collect(Collectors.toSet()));
|
||||
} catch (ClassCastException cce) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends T> c) {
|
||||
return backing.addAll(c.stream().map(back).collect(Collectors.toSet()));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> c) {
|
||||
try {
|
||||
return backing.removeAll(c.stream()
|
||||
.map(i -> back.apply((T) i))
|
||||
.collect(Collectors.toSet()));
|
||||
} catch (ClassCastException cce) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> c) {
|
||||
try {
|
||||
return backing.retainAll(c.stream()
|
||||
.map(i -> back.apply((T) i))
|
||||
.collect(Collectors.toSet()));
|
||||
} catch (ClassCastException cce) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
backing.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIterator<T> iterator() {
|
||||
return new ObjectIterator<>() {
|
||||
private final Iterator<E> backg = backing.iterator();
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backg.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T next() {
|
||||
return forward.apply(backg.next());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backg.remove();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
static class WrappingIntIterator implements IntIterator {
|
||||
private final Iterator<Integer> backing;
|
||||
|
||||
WrappingIntIterator(Iterator<Integer> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backing.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int nextInt() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer next() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backing.remove();
|
||||
}
|
||||
}
|
||||
|
||||
static class WrappingLongIterator implements LongIterator {
|
||||
private final Iterator<Long> backing;
|
||||
|
||||
WrappingLongIterator(Iterator<Long> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backing.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long nextLong() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long next() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backing.remove();
|
||||
}
|
||||
}
|
||||
|
||||
static class WrappingShortIterator implements ShortIterator {
|
||||
private final Iterator<Short> backing;
|
||||
|
||||
WrappingShortIterator(Iterator<Short> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backing.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public short nextShort() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Short next() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backing.remove();
|
||||
}
|
||||
}
|
||||
|
||||
static class WrappingByteIterator implements ByteIterator {
|
||||
private final Iterator<Byte> backing;
|
||||
|
||||
WrappingByteIterator(Iterator<Byte> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backing.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte nextByte() {
|
||||
return next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Byte next() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backing.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WrappingIntSet implements IntSet {
|
||||
private final Set<Integer> backing;
|
||||
|
||||
public WrappingIntSet(Set<Integer> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(int key) {
|
||||
return backing.add(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(int key) {
|
||||
return backing.contains(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] toIntArray() {
|
||||
return backing.stream().mapToInt(Integer::intValue).toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] toArray(int[] a) {
|
||||
return ArrayUtils.toPrimitive(backing.toArray(new Integer[0]));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(IntCollection c) {
|
||||
return backing.addAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(IntCollection c) {
|
||||
return backing.containsAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(IntCollection c) {
|
||||
return backing.removeAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(IntCollection c) {
|
||||
return backing.retainAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return backing.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return backing.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return backing.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T[] toArray(T[] a) {
|
||||
return backing.toArray(a);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> c) {
|
||||
return backing.containsAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends Integer> c) {
|
||||
return backing.addAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> c) {
|
||||
return backing.removeAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> c) {
|
||||
return backing.retainAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
backing.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IntIterator iterator() {
|
||||
return new WrappingIntIterator(backing.iterator());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(int k) {
|
||||
return backing.remove(k);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WrappingRefSet<V> implements ReferenceSet<V> {
|
||||
private final Set<V> backing;
|
||||
|
||||
public WrappingRefSet(Set<V> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(V key) {
|
||||
return backing.add(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(final Object o) {
|
||||
return backing.remove(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(@NotNull final Collection<?> c) {
|
||||
return backing.containsAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(@NotNull final Collection<? extends V> c) {
|
||||
return backing.addAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(@NotNull final Collection<?> c) {
|
||||
return backing.removeAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(@NotNull final Collection<?> c) {
|
||||
return backing.retainAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.backing.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return backing.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return backing.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(final Object o) {
|
||||
return backing.contains(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIterator<V> iterator() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Object[] toArray() {
|
||||
return this.backing.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull <T> T[] toArray(@NotNull final T[] a) {
|
||||
return this.backing.toArray(a);
|
||||
}
|
||||
}
|
||||
|
||||
public static class WrappingLongListIterator implements LongListIterator {
|
||||
private final ListIterator<Long> backing;
|
||||
|
||||
WrappingLongListIterator(ListIterator<Long> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long previousLong() {
|
||||
return backing.previous();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long nextLong() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backing.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPrevious() {
|
||||
return backing.hasPrevious();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int nextIndex() {
|
||||
return backing.nextIndex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int previousIndex() {
|
||||
return backing.previousIndex();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(long k) {
|
||||
backing.add(k);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backing.remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(long k) {
|
||||
backing.set(k);
|
||||
}
|
||||
}
|
||||
|
||||
public static class SlimWrappingLongListIterator implements LongListIterator {
|
||||
private final Iterator<Long> backing;
|
||||
|
||||
SlimWrappingLongListIterator(Iterator<Long> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long previousLong() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long nextLong() {
|
||||
return backing.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return backing.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPrevious() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int nextIndex() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int previousIndex() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(long k) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
backing.remove();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(long k) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
public static class WrappingObjectCollection<V> implements ObjectCollection<V> {
|
||||
private final Collection<V> backing;
|
||||
|
||||
public WrappingObjectCollection(Collection<V> backing) {
|
||||
this.backing = Objects.requireNonNull(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return backing.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return backing.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean contains(Object o) {
|
||||
return backing.contains(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray() {
|
||||
return backing.toArray();
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T[] toArray(T[] a) {
|
||||
return backing.toArray(a);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean add(V e) {
|
||||
return backing.add(e);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(Object o) {
|
||||
return backing.remove(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsAll(Collection<?> c) {
|
||||
return backing.containsAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addAll(Collection<? extends V> c) {
|
||||
return backing.addAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeAll(Collection<?> c) {
|
||||
return backing.removeAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean retainAll(Collection<?> c) {
|
||||
return backing.retainAll(c);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
backing.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectIterator<V> iterator() {
|
||||
return itrWrap(backing);
|
||||
}
|
||||
}
|
||||
|
||||
private record WrapperObjectIterator<T>(Iterator<T> parent) implements ObjectIterator<T> {
|
||||
private WrapperObjectIterator(Iterator<T> parent) {
|
||||
this.parent = Objects.requireNonNull(parent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasNext() {
|
||||
return parent.hasNext();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T next() {
|
||||
return parent.next();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove() {
|
||||
parent.remove();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
package org.bxteam.divinemc.util.map;
|
||||
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import it.unimi.dsi.fastutil.ints.IntSet;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectCollection;
|
||||
import it.unimi.dsi.fastutil.objects.ObjectSet;
|
||||
import org.bxteam.divinemc.util.CollectionWrapperUtil;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
public final class Int2ObjectConcurrentHashMap<V> implements Int2ObjectMap<V> {
|
||||
private final ConcurrentHashMap<Integer, V> backing;
|
||||
private V defaultReturnValue;
|
||||
|
||||
public Int2ObjectConcurrentHashMap() {
|
||||
this(16);
|
||||
}
|
||||
|
||||
public Int2ObjectConcurrentHashMap(int initialCapacity) {
|
||||
if (initialCapacity < 0) {
|
||||
throw new IllegalArgumentException("Initial capacity cannot be negative: " + initialCapacity);
|
||||
}
|
||||
|
||||
this.backing = new ConcurrentHashMap<>(initialCapacity);
|
||||
}
|
||||
|
||||
public Int2ObjectConcurrentHashMap(Map<Integer, V> map) {
|
||||
this(Math.max(16, map.size()));
|
||||
putAll(Objects.requireNonNull(map, "Source map cannot be null"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public V get(int key) {
|
||||
V value = backing.get(key);
|
||||
return value != null ? value : defaultReturnValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public V get(Object key) {
|
||||
V value = backing.get(key);
|
||||
return value != null ? value : defaultReturnValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return backing.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsValue(Object value) {
|
||||
return backing.containsValue(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putAll(Map<? extends Integer, ? extends V> m) {
|
||||
Objects.requireNonNull(m, "Source map cannot be null");
|
||||
backing.putAll(m);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
return backing.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void defaultReturnValue(V rv) {
|
||||
this.defaultReturnValue = rv;
|
||||
}
|
||||
|
||||
@Override
|
||||
public V defaultReturnValue() {
|
||||
return defaultReturnValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectSet<Entry<V>> int2ObjectEntrySet() {
|
||||
return CollectionWrapperUtil.entrySetIntWrap(backing);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IntSet keySet() {
|
||||
return CollectionWrapperUtil.wrapIntSet(backing.keySet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectCollection<V> values() {
|
||||
return CollectionWrapperUtil.wrap(backing.values());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsKey(int key) {
|
||||
return backing.containsKey(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public V put(int key, V value) {
|
||||
return backing.put(key, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public V remove(int key) {
|
||||
return backing.remove(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
backing.clear();
|
||||
}
|
||||
|
||||
public V compute(int key, java.util.function.BiFunction<? super Integer, ? super V, ? extends V> remappingFunction) {
|
||||
Objects.requireNonNull(remappingFunction);
|
||||
return backing.compute(key, remappingFunction);
|
||||
}
|
||||
|
||||
public ConcurrentHashMap<Integer, V> concurrentView() {
|
||||
return backing;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof Int2ObjectMap<?> that)) return false;
|
||||
|
||||
if (size() != that.size()) return false;
|
||||
return int2ObjectEntrySet().containsAll(that.int2ObjectEntrySet());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return backing.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return backing.toString();
|
||||
}
|
||||
|
||||
public V getOrDefault(int key, V defaultValue) {
|
||||
V value = get(key);
|
||||
return value != null ? value : defaultValue;
|
||||
}
|
||||
|
||||
public V putIfAbsent(int key, V value) {
|
||||
return backing.putIfAbsent(key, value);
|
||||
}
|
||||
|
||||
public boolean remove(int key, Object value) {
|
||||
return backing.remove(key, value);
|
||||
}
|
||||
|
||||
public boolean replace(int key, V oldValue, V newValue) {
|
||||
return backing.replace(key, oldValue, newValue);
|
||||
}
|
||||
|
||||
public V replace(int key, V value) {
|
||||
return backing.replace(key, value);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user