Suppressed generics/rawtypes/etc warnings, since these aren't my files, I shouldn't change them too much (as they work, as-is)

This commit is contained in:
nathan 2020-08-18 22:01:47 +02:00
parent 9adfc35908
commit 6270168430
17 changed files with 221 additions and 85 deletions

View File

@ -28,6 +28,7 @@ import dorkbox.util.RandomUtil;
/** A resizable, ordered or unordered array of objects. If unordered, this class avoids a memory copy when removing elements (the
* last element is moved to the removed element's position).
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "rawtypes", "SuspiciousSystemArraycopy", "unused", "NullableProblems", "DuplicatedCode"})
public class Array<T> implements Iterable<T> {
/** Provides direct access to the underlying array. If the Array's generic type is not Object, this field may only be accessed
* if the {@link Array#Array(boolean, int, Class)} constructor was used. */
@ -261,7 +262,7 @@ public class Array<T> implements Iterable<T> {
public T removeIndex (int index) {
if (index >= size) throw new IndexOutOfBoundsException("index can't be >= size: " + index + " >= " + size);
T[] items = this.items;
T value = (T)items[index];
T value = items[index];
size--;
if (ordered)
System.arraycopy(items, index + 1, items, index, size - index);
@ -448,6 +449,7 @@ public class Array<T> implements Iterable<T> {
/** Returns an iterator for the items in the array. Remove is supported. Note that the same iterator instance is returned each
* time this method is called. Use the {@link ArrayIterator} constructor for nested or multithreaded iteration. */
@Override
public Iterator<T> iterator () {
if (iterable == null) iterable = new ArrayIterable(this);
return iterable.iterator();
@ -492,6 +494,7 @@ public class Array<T> implements Iterable<T> {
return result;
}
@Override
public int hashCode () {
if (!ordered) return super.hashCode();
Object[] items = this.items;
@ -504,6 +507,7 @@ public class Array<T> implements Iterable<T> {
return h;
}
@Override
public boolean equals (Object object) {
if (object == this) return true;
if (!ordered) return false;
@ -522,6 +526,7 @@ public class Array<T> implements Iterable<T> {
return true;
}
@Override
public String toString () {
if (size == 0) return "[]";
T[] items = this.items;
@ -563,6 +568,7 @@ public class Array<T> implements Iterable<T> {
return new Array(array);
}
@SuppressWarnings("NullableProblems")
static public class ArrayIterator<T> implements Iterator<T>, Iterable<T> {
private final Array<T> array;
private final boolean allowRemove;
@ -580,6 +586,7 @@ public class Array<T> implements Iterable<T> {
this.allowRemove = allowRemove;
}
@Override
public boolean hasNext () {
if (!valid) {
// System.out.println(iterable.lastAcquire);
@ -588,6 +595,7 @@ public class Array<T> implements Iterable<T> {
return index < array.size;
}
@Override
public T next () {
if (index >= array.size) throw new NoSuchElementException(String.valueOf(index));
if (!valid) {
@ -597,6 +605,7 @@ public class Array<T> implements Iterable<T> {
return array.items[index++];
}
@Override
public void remove () {
if (!allowRemove) throw new RuntimeException("Remove not allowed.");
index--;
@ -607,11 +616,13 @@ public class Array<T> implements Iterable<T> {
index = 0;
}
@Override
public Iterator<T> iterator () {
return this;
}
}
@SuppressWarnings({"unchecked", "NullableProblems"})
static public class ArrayIterable<T> implements Iterable<T> {
private final Array<T> array;
private final boolean allowRemove;
@ -628,6 +639,7 @@ public class Array<T> implements Iterable<T> {
this.allowRemove = allowRemove;
}
@Override
public Iterator<T> iterator () {
// lastAcquire.getBuffer().setLength(0);
// new Throwable().printStackTrace(new java.io.PrintWriter(lastAcquire));

View File

@ -26,6 +26,7 @@ import dorkbox.util.Property;
/**
* @author dorkbox, llc
*/
@SuppressWarnings("unchecked")
public
class ConcurrentIterator<T> {
/**

View File

@ -32,6 +32,7 @@ import dorkbox.util.RandomUtil;
* depending on hash collisions. Load factors greater than 0.91 greatly increase the chances the map will have to rehash to the
* next higher POT size.
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "rawtypes", "NullableProblems"})
public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -510,6 +511,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return (h ^ h >>> hashShift) & mask;
}
@Override
public int hashCode () {
int h = 0;
K[] keyTable = this.keyTable;
@ -528,6 +530,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return h;
}
@Override
public boolean equals (Object obj) {
if (obj == this) return true;
if (!(obj instanceof IdentityMap)) return false;
@ -553,6 +556,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return true;
}
@Override
public String toString () {
if (size == 0) return "[]";
StringBuilder buffer = new StringBuilder(32);
@ -580,6 +584,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return buffer.toString();
}
@Override
public Iterator<Entry<K, V>> iterator () {
return entries();
}
@ -645,11 +650,13 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
public K key;
public V value;
@Override
public String toString () {
return key + "=" + value;
}
}
@SuppressWarnings("DuplicatedCode")
static private abstract class MapIterator<K, V, I> implements Iterable<I>, Iterator<I> {
public boolean hasNext;
@ -679,6 +686,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
}
}
@Override
public void remove () {
if (currentIndex < 0) throw new IllegalStateException("next must be called before remove.");
if (currentIndex >= map.capacity) {
@ -694,6 +702,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
}
}
@SuppressWarnings({"NullableProblems", "DuplicatedCode", "unchecked", "FieldMayBeFinal"})
static public class Entries<K, V> extends MapIterator<K, V, Entry<K, V>> {
private Entry<K, V> entry = new Entry();
@ -702,6 +711,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
}
/** Note the same entry instance is returned each time this method is called. */
@Override
public Entry<K, V> next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -713,26 +723,31 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return entry;
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public Iterator<Entry<K, V>> iterator () {
return this;
}
}
@SuppressWarnings({"rawtypes", "NullableProblems"})
static public class Values<V> extends MapIterator<Object, V, V> {
public Values (IdentityMap<?, V> map) {
super((IdentityMap<Object, V>)map);
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public V next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -742,6 +757,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return value;
}
@Override
public Iterator<V> iterator () {
return this;
}
@ -761,16 +777,19 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
}
}
@SuppressWarnings("unchecked")
static public class Keys<K> extends MapIterator<K, Object, K> {
public Keys (IdentityMap<K, ?> map) {
super((IdentityMap<K, Object>)map);
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public K next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -780,6 +799,7 @@ public class IdentityMap<K, V> implements Iterable<IdentityMap.Entry<K, V>> {
return key;
}
@Override
public Iterator<K> iterator () {
return this;
}

View File

@ -31,6 +31,7 @@ import dorkbox.util.RandomUtil;
* depending on hash collisions. Load factors greater than 0.91 greatly increase the chances the map will have to rehash to the
* next higher POT size.
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "rawtypes"})
public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -556,6 +557,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return (h ^ h >>> hashShift) & mask;
}
@Override
public int hashCode () {
int h = 0;
if (hasZeroValue && zeroValue != null) {
@ -577,6 +579,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return h;
}
@Override
public boolean equals (Object obj) {
if (obj == this) return true;
if (!(obj instanceof IntMap)) return false;
@ -606,6 +609,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return true;
}
@Override
public String toString () {
if (size == 0) return "[]";
StringBuilder buffer = new StringBuilder(32);
@ -638,6 +642,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return buffer.toString();
}
@Override
public Iterator<Entry<V>> iterator () {
return entries();
}
@ -703,6 +708,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
public int key;
public V value;
@Override
public String toString () {
return key + "=" + value;
}
@ -762,6 +768,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
}
}
@SuppressWarnings("rawtypes")
static public class Entries<V> extends MapIterator<V> implements Iterable<Entry<V>>, Iterator<Entry<V>> {
private Entry<V> entry = new Entry();
@ -770,6 +777,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
}
/** Note the same entry instance is returned each time this method is called. */
@Override
public Entry<V> next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -786,30 +794,36 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return entry;
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public Iterator<Entry<V>> iterator () {
return this;
}
@Override
public void remove () {
super.remove();
}
}
@SuppressWarnings("unchecked")
static public class Values<V> extends MapIterator<V> implements Iterable<V>, Iterator<V> {
public Values (IntMap<V> map) {
super(map);
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public V next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -823,6 +837,7 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return value;
}
@Override
public Iterator<V> iterator () {
return this;
}
@ -835,12 +850,15 @@ public class IntMap<V> implements Iterable<IntMap.Entry<V>> {
return array;
}
@Override
public void remove () {
super.remove();
}
}
@SuppressWarnings("unchecked")
static public class Keys extends MapIterator {
@SuppressWarnings("rawtypes")
public Keys (IntMap map) {
super(map);
}

View File

@ -16,7 +16,11 @@
package dorkbox.util.collections;
import java.io.Serializable;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
/**
@ -137,6 +141,7 @@ class LockFreeHashMap<K, V> implements Map<K, V>, Cloneable, Serializable {
.containsValue(value);
}
@SuppressWarnings("unchecked")
@Override
public
V get(final Object key) {

View File

@ -373,6 +373,7 @@ class LockFreeIntBiMap<V> {
* Returns an iterator for the values in the map. Remove is supported. Note that the same iterator instance is returned each
* time this method is called. Use the {@link Entries} constructor for nested or multithreaded iteration.
*/
@SuppressWarnings("unchecked")
public
Values<V> values() {
return forwardREF.get(this)

View File

@ -37,6 +37,7 @@ import com.esotericsoftware.kryo.util.ObjectMap.Values;
* <p>
* This data structure is for many-read/few-write scenarios
*/
@SuppressWarnings("unchecked")
public final
class LockFreeObjectMap<K, V> implements Cloneable, Serializable {
// Recommended for best performance while adhering to the "single writer principle". Must be static-final

View File

@ -15,7 +15,11 @@
*/
package dorkbox.util.collections;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
/**
@ -31,6 +35,7 @@ import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
* <p>
* This data structure is for many-read/few-write scenarios
*/
@SuppressWarnings("unchecked")
public final
class LockFreeSet<E> implements Set<E>, Cloneable, java.io.Serializable {
// Recommended for best performance while adhering to the "single writer principle". Must be static-final

View File

@ -31,6 +31,7 @@ import dorkbox.util.RandomUtil;
* depending on hash collisions. Load factors greater than 0.91 greatly increase the chances the map will have to rehash to the
* next higher POT size.
* @author Nathan Sweet */
@SuppressWarnings({"NullableProblems", "rawtypes", "unchecked"})
public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -553,6 +554,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return (int)((h ^ h >>> hashShift) & mask);
}
@Override
public int hashCode () {
int h = 0;
if (hasZeroValue && zeroValue != null) {
@ -574,6 +576,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return h;
}
@Override
public boolean equals (Object obj) {
if (obj == this) return true;
if (!(obj instanceof LongMap)) return false;
@ -603,6 +606,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return true;
}
@Override
public String toString () {
if (size == 0) return "[]";
StringBuilder buffer = new StringBuilder(32);
@ -630,6 +634,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return buffer.toString();
}
@Override
public Iterator<Entry<V>> iterator () {
return entries();
}
@ -695,6 +700,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
public long key;
public V value;
@Override
public String toString () {
return key + "=" + value;
}
@ -754,6 +760,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
}
}
@SuppressWarnings("NullableProblems")
static public class Entries<V> extends MapIterator<V> implements Iterable<Entry<V>>, Iterator<Entry<V>> {
private Entry<V> entry = new Entry();
@ -762,6 +769,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
}
/** Note the same entry instance is returned each time this method is called. */
@Override
public Entry<V> next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -778,30 +786,36 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return entry;
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public Iterator<Entry<V>> iterator () {
return this;
}
@Override
public void remove () {
super.remove();
}
}
@SuppressWarnings("rawtypes")
static public class Values<V> extends MapIterator<V> implements Iterable<V>, Iterator<V> {
public Values (LongMap<V> map) {
super(map);
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public V next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -815,6 +829,7 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return value;
}
@Override
public Iterator<V> iterator () {
return this;
}
@ -827,11 +842,13 @@ public class LongMap<V> implements Iterable<LongMap.Entry<V>> {
return array;
}
@Override
public void remove () {
super.remove();
}
}
@SuppressWarnings("rawtypes")
static public class Keys extends MapIterator {
public Keys (LongMap map) {
super(map);

View File

@ -32,6 +32,7 @@ import dorkbox.util.RandomUtil;
* depending on hash collisions. Load factors greater than 0.91 greatly increase the chances the map will have to rehash to the
* next higher POT size.
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "NullableProblems", "rawtypes"})
public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -66,6 +67,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
/** Creates a new map with the specified initial capacity and load factor. This map will hold initialCapacity items before
* growing the backing table.
* @param initialCapacity If not a power of two, it is increased to the next nearest power of two. */
@SuppressWarnings("unchecked")
public ObjectFloatMap (int initialCapacity, float loadFactor) {
if (initialCapacity < 0) throw new IllegalArgumentException("initialCapacity must be >= 0: " + initialCapacity);
initialCapacity = MathUtil.nextPowerOfTwo((int)Math.ceil(initialCapacity / loadFactor));
@ -500,6 +502,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return (h ^ h >>> hashShift) & mask;
}
@Override
public int hashCode () {
int h = 0;
K[] keyTable = this.keyTable;
@ -516,6 +519,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return h;
}
@Override
public boolean equals (Object obj) {
if (obj == this) return true;
if (!(obj instanceof ObjectFloatMap)) return false;
@ -535,6 +539,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return true;
}
@Override
public String toString () {
if (size == 0) return "{}";
StringBuilder buffer = new StringBuilder(32);
@ -562,6 +567,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return buffer.toString();
}
@Override
public Entries<K> iterator () {
return entries();
}
@ -627,6 +633,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
public K key;
public float value;
@Override
public String toString () {
return key + "=" + value;
}
@ -683,6 +690,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
}
/** Note the same entry instance is returned each time this method is called. */
@Override
public Entry<K> next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -694,15 +702,18 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return entry;
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public Entries<K> iterator () {
return this;
}
@Override
public void remove () {
super.remove();
}
@ -736,16 +747,19 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
}
}
@SuppressWarnings("unchecked")
static public class Keys<K> extends MapIterator<K> implements Iterable<K>, Iterator<K> {
public Keys (ObjectFloatMap<K> map) {
super((ObjectFloatMap<K>)map);
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public K next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -755,6 +769,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return key;
}
@Override
public Keys<K> iterator () {
return this;
}
@ -774,6 +789,7 @@ public class ObjectFloatMap<K> implements Iterable<ObjectFloatMap.Entry<K>> {
return array;
}
@Override
public void remove () {
super.remove();
}

View File

@ -32,6 +32,7 @@ import dorkbox.util.RandomUtil;
* depending on hash collisions. Load factors greater than 0.91 greatly increase the chances the map will have to rehash to the
* next higher POT size.
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "NullableProblems"})
public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -501,6 +502,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return (h ^ h >>> hashShift) & mask;
}
@Override
public int hashCode () {
int h = 0;
K[] keyTable = this.keyTable;
@ -517,6 +519,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return h;
}
@Override
public boolean equals (Object obj) {
if (obj == this) return true;
if (!(obj instanceof ObjectIntMap)) return false;
@ -536,6 +539,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return true;
}
@Override
public String toString () {
if (size == 0) return "{}";
StringBuilder buffer = new StringBuilder(32);
@ -563,6 +567,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return buffer.toString();
}
@Override
public Entries<K> iterator () {
return entries();
}
@ -628,6 +633,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
public K key;
public int value;
@Override
public String toString () {
return key + "=" + value;
}
@ -684,6 +690,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
}
/** Note the same entry instance is returned each time this method is called. */
@Override
public Entry<K> next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -695,15 +702,18 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return entry;
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public Entries<K> iterator () {
return this;
}
@Override
public void remove () {
super.remove();
}
@ -742,11 +752,13 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
super((ObjectIntMap<K>)map);
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public K next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -756,6 +768,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return key;
}
@Override
public Keys<K> iterator () {
return this;
}
@ -775,6 +788,7 @@ public class ObjectIntMap<K> implements Iterable<ObjectIntMap.Entry<K>> {
return array;
}
@Override
public void remove () {
super.remove();
}

View File

@ -34,6 +34,7 @@ import dorkbox.util.RandomUtil;
* Iteration can be very slow for a map with a large capacity. {@link #clear(int)} and {@link #shrink(int)} can be used to reduce
* the capacity. {@link OrderedMap} provides much faster iteration.
* @author Nathan Sweet */
@SuppressWarnings("unchecked")
public class ObjectMap<K, V> implements Iterable<ObjectMap.Entry<K, V>> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -722,6 +723,7 @@ public class ObjectMap<K, V> implements Iterable<ObjectMap.Entry<K, V>> {
}
}
@SuppressWarnings("NullableProblems")
static public class Entries<K, V> extends MapIterator<K, V, Entry<K, V>> {
Entry<K, V> entry = new Entry();
@ -754,7 +756,7 @@ public class ObjectMap<K, V> implements Iterable<ObjectMap.Entry<K, V>> {
}
}
@SuppressWarnings("NullableProblems")
@SuppressWarnings({"NullableProblems", "unchecked", "rawtypes"})
static public class Values<V> extends MapIterator<Object, V, V> {
public Values (ObjectMap<?, V> map) {
super((ObjectMap<Object, V>)map);
@ -794,6 +796,7 @@ public class ObjectMap<K, V> implements Iterable<ObjectMap.Entry<K, V>> {
}
}
@SuppressWarnings({"unchecked", "NullableProblems", "rawtypes"})
static public class Keys<K> extends MapIterator<K, Object, K> {
public Keys (ObjectMap<K, ?> map) {
super((ObjectMap<K, Object>)map);

View File

@ -34,6 +34,7 @@ import dorkbox.util.RandomUtil;
* Iteration can be very slow for a set with a large capacity. {@link #clear(int)} and {@link #shrink(int)} can be used to reduce
* the capacity. {@link OrderedSet} provides much faster iteration.
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "rawtypes", "NullableProblems", "SuspiciousSystemArraycopy"})
public class ObjectSet<T> implements Iterable<T> {
private static final int PRIME1 = 0xbe1f14b1;
private static final int PRIME2 = 0xb4b82e39;
@ -440,6 +441,7 @@ public class ObjectSet<T> implements Iterable<T> {
return (h ^ h >>> hashShift) & mask;
}
@Override
public int hashCode () {
int h = 0;
for (int i = 0, n = capacity + stashSize; i < n; i++)
@ -447,6 +449,7 @@ public class ObjectSet<T> implements Iterable<T> {
return h;
}
@Override
public boolean equals (Object obj) {
if (!(obj instanceof ObjectSet)) return false;
ObjectSet other = (ObjectSet)obj;
@ -457,6 +460,7 @@ public class ObjectSet<T> implements Iterable<T> {
return true;
}
@Override
public String toString () {
return '{' + toString(", ") + '}';
}
@ -483,6 +487,7 @@ public class ObjectSet<T> implements Iterable<T> {
/** Returns an iterator for the keys in the set. Remove is supported. Note that the same iterator instance is returned each
* time this method is called. Use the {@link ObjectSetIterator} constructor for nested or multithreaded iteration. */
@Override
public ObjectSetIterator<T> iterator () {
if (iterator1 == null) {
iterator1 = new ObjectSetIterator(this);
@ -535,6 +540,7 @@ public class ObjectSet<T> implements Iterable<T> {
}
}
@Override
public void remove () {
if (currentIndex < 0) throw new IllegalStateException("next must be called before remove.");
if (currentIndex >= set.capacity) {
@ -548,11 +554,13 @@ public class ObjectSet<T> implements Iterable<T> {
set.size--;
}
@Override
public boolean hasNext () {
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
return hasNext;
}
@Override
public K next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -562,6 +570,7 @@ public class ObjectSet<T> implements Iterable<T> {
return key;
}
@Override
public ObjectSetIterator<K> iterator () {
return this;
}

View File

@ -26,6 +26,7 @@ import java.util.NoSuchElementException;
* matter, copying during remove can be greatly reduced by setting {@link Array#ordered} to false for
* {@link OrderedSet#orderedItems()}.
* @author Nathan Sweet */
@SuppressWarnings({"unchecked", "rawtypes"})
public class OrderedSet<T> extends ObjectSet<T> {
final Array<T> items;
OrderedSetIterator iterator1, iterator2;
@ -50,6 +51,7 @@ public class OrderedSet<T> extends ObjectSet<T> {
items.addAll(set.items);
}
@Override
public boolean add (T key) {
if (!super.add(key)) return false;
items.add(key);
@ -66,6 +68,7 @@ public class OrderedSet<T> extends ObjectSet<T> {
return true;
}
@Override
public boolean remove (T key) {
if (!super.remove(key)) return false;
items.removeValue(key, false);
@ -78,11 +81,13 @@ public class OrderedSet<T> extends ObjectSet<T> {
return key;
}
@Override
public void clear (int maximumCapacity) {
items.clear();
super.clear(maximumCapacity);
}
@Override
public void clear () {
items.clear();
super.clear();
@ -92,6 +97,7 @@ public class OrderedSet<T> extends ObjectSet<T> {
return items;
}
@Override
public OrderedSetIterator<T> iterator () {
if (iterator1 == null) {
iterator1 = new OrderedSetIterator(this);
@ -109,6 +115,7 @@ public class OrderedSet<T> extends ObjectSet<T> {
return iterator2;
}
@Override
public String toString () {
if (size == 0) return "{}";
T[] items = this.items.items;
@ -123,6 +130,7 @@ public class OrderedSet<T> extends ObjectSet<T> {
return buffer.toString();
}
@Override
public String toString (String separator) {
return items.toString(separator);
}
@ -135,11 +143,13 @@ public class OrderedSet<T> extends ObjectSet<T> {
items = set.items;
}
@Override
public void reset () {
nextIndex = 0;
hasNext = set.size > 0;
}
@Override
public T next () {
if (!hasNext) throw new NoSuchElementException();
if (!valid) throw new RuntimeException("#iterator() cannot be used nested.");
@ -149,6 +159,7 @@ public class OrderedSet<T> extends ObjectSet<T> {
return key;
}
@Override
public void remove () {
if (nextIndex < 0) throw new IllegalStateException("next must be called before remove.");
nextIndex--;

View File

@ -32,6 +32,7 @@ import java.util.Comparator;
* single-pass for k=min and k=max, and Hoare's quickselect for values in between.
* </p>
* @author Jon Renner */
@SuppressWarnings("unchecked")
public class Select {
private static Select instance;
private QuickSelect quickSelect;

View File

@ -21,6 +21,7 @@ import java.util.Comparator;
* Note that sorting primitive arrays with the Arrays.sort methods does not allocate memory (unless sorting large arrays of char,
* short, or byte).
* @author Nathan Sweet */
@SuppressWarnings({"RedundantCast", "unchecked", "rawtypes"})
public class Sort {
static private Sort instance;

View File

@ -37,6 +37,7 @@ import java.util.Comparator;
* While the API to this class consists solely of static methods, it is (privately) instantiable; a TimSort instance holds the
* state of an ongoing sort, assuming the input array is large enough to warrant the full-blown TimSort. Small arrays are sorted
* in place, using a binary insertion sort. */
@SuppressWarnings("unchecked")
class TimSort<T> {
/** This is the minimum sized sequence that will be merged. Shorter sequences will be lengthened by calling binarySort. If the
* entire array is less than this length, no merges will be performed.