diff --git a/src/dorkbox/collections/ArrayMap.kt b/src/dorkbox/collections/ArrayMap.kt index 8437c4b..a425578 100644 --- a/src/dorkbox/collections/ArrayMap.kt +++ b/src/dorkbox/collections/ArrayMap.kt @@ -32,10 +32,8 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.Collections.random import dorkbox.collections.ObjectMap.Companion.dummy -import java.lang.IllegalStateException import java.util.* import kotlin.math.max import kotlin.math.min @@ -54,6 +52,14 @@ class ArrayMap : MutableMap{ const val version = Collections.version } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + var keyTable: Array var valueTable: Array var size_ = 0 diff --git a/src/dorkbox/collections/Collections.kt b/src/dorkbox/collections/Collections.kt index 6b70e21..2286c51 100644 --- a/src/dorkbox/collections/Collections.kt +++ b/src/dorkbox/collections/Collections.kt @@ -46,13 +46,4 @@ object Collections { fun nextPowerOfTwo(value: Int): Int { return 1 shl 32 - Integer.numberOfLeadingZeros(value - 1) } - - /** - * When true, [Iterable.iterator] for [ObjectMap], and other collections will allocate a new - * iterator for each invocation. - * - * When false, the iterator is reused and nested use will throw an exception. Default is - * false. - */ - var allocateIterators = false } diff --git a/src/dorkbox/collections/ExpandingArray.kt b/src/dorkbox/collections/ExpandingArray.kt index 56829f8..53a0aae 100644 --- a/src/dorkbox/collections/ExpandingArray.kt +++ b/src/dorkbox/collections/ExpandingArray.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.Collections.random import dorkbox.collections.Predicate.PredicateIterable import java.util.* @@ -46,6 +45,14 @@ import kotlin.math.min * @author Nathan Sweet */ class ExpandingArray : MutableIterable { + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + /** * Provides direct access to the underlying array. If the Array's generic type is not Object, this field may only be accessed * if the [ExpandingArray.Array] constructor was used. @@ -813,7 +820,7 @@ class ExpandingArray : MutableIterable { * @see Collections.allocateIterators */ override fun iterator(): ArrayIterator { - if (allocateIterators) return ArrayIterator(array, allowRemove) + if (array.allocateIterators) return ArrayIterator(array, allowRemove) // lastAcquire.getBuffer().setLength(0); // new Throwable().printStackTrace(new java.io.PrintWriter(lastAcquire)); diff --git a/src/dorkbox/collections/IntFloatMap.kt b/src/dorkbox/collections/IntFloatMap.kt index add558c..ddac3a1 100644 --- a/src/dorkbox/collections/IntFloatMap.kt +++ b/src/dorkbox/collections/IntFloatMap.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -59,6 +58,14 @@ class IntFloatMap : MutableMap { const val version = Collections.version } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + private var size_ = 0 var keyTable: IntArray var valueTable: FloatArray diff --git a/src/dorkbox/collections/IntIntMap.kt b/src/dorkbox/collections/IntIntMap.kt index c649bd9..8a8f514 100644 --- a/src/dorkbox/collections/IntIntMap.kt +++ b/src/dorkbox/collections/IntIntMap.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -59,6 +58,14 @@ class IntIntMap : MutableMap { const val version = Collections.version } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + private var size_ = 0 var keyTable: IntArray var valueTable: IntArray diff --git a/src/dorkbox/collections/IntMap.kt b/src/dorkbox/collections/IntMap.kt index cff7c78..c78f62b 100644 --- a/src/dorkbox/collections/IntMap.kt +++ b/src/dorkbox/collections/IntMap.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -60,6 +59,14 @@ open class IntMap : MutableMap { const val version = Collections.version } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + private var size_ = 0 var keyTable: IntArray var valueTable: Array diff --git a/src/dorkbox/collections/IntSet.kt b/src/dorkbox/collections/IntSet.kt index 17eb18f..5285d5c 100644 --- a/src/dorkbox/collections/IntSet.kt +++ b/src/dorkbox/collections/IntSet.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -66,6 +65,14 @@ class IntSet: MutableSet { } } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + private var size_ = 0 var keyTable: IntArray var hasZeroValue = false diff --git a/src/dorkbox/collections/LongMap.kt b/src/dorkbox/collections/LongMap.kt index 2191bd3..79b6595 100644 --- a/src/dorkbox/collections/LongMap.kt +++ b/src/dorkbox/collections/LongMap.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -59,6 +58,14 @@ class LongMap : MutableMap { const val version = Collections.version } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + private var size_ = 0 var keyTable: LongArray var valueTable: Array diff --git a/src/dorkbox/collections/LongSet.kt b/src/dorkbox/collections/LongSet.kt index 6ca55d3..0cc3792 100644 --- a/src/dorkbox/collections/LongSet.kt +++ b/src/dorkbox/collections/LongSet.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -66,6 +65,14 @@ class LongSet: MutableSet { } } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + private var size_ = 0 var keyTable: LongArray var hasZeroValue = false diff --git a/src/dorkbox/collections/ObjectFloatMap.kt b/src/dorkbox/collections/ObjectFloatMap.kt index 8f51a72..676b1d5 100644 --- a/src/dorkbox/collections/ObjectFloatMap.kt +++ b/src/dorkbox/collections/ObjectFloatMap.kt @@ -34,9 +34,7 @@ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize -import java.lang.IllegalStateException import java.util.* /** @@ -68,6 +66,14 @@ open class ObjectFloatMap : MutableMap { internal val dummy = Any() } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + protected var mapSize = 0 var keyTable: Array diff --git a/src/dorkbox/collections/ObjectIntMap.kt b/src/dorkbox/collections/ObjectIntMap.kt index ab2d211..779600f 100644 --- a/src/dorkbox/collections/ObjectIntMap.kt +++ b/src/dorkbox/collections/ObjectIntMap.kt @@ -34,7 +34,6 @@ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize import java.util.* @@ -64,6 +63,14 @@ open class ObjectIntMap : MutableMap { const val version = Collections.version } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + protected var mapSize = 0 var keyTable: Array diff --git a/src/dorkbox/collections/ObjectMap.kt b/src/dorkbox/collections/ObjectMap.kt index d92b00b..dec1e09 100644 --- a/src/dorkbox/collections/ObjectMap.kt +++ b/src/dorkbox/collections/ObjectMap.kt @@ -34,9 +34,7 @@ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import dorkbox.collections.ObjectSet.Companion.tableSize -import java.lang.IllegalStateException import java.util.* /** @@ -68,6 +66,14 @@ open class ObjectMap : MutableMap { internal val dummy = Any() } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + protected var mapSize = 0 var keyTable: Array diff --git a/src/dorkbox/collections/ObjectSet.kt b/src/dorkbox/collections/ObjectSet.kt index 1a4638f..7d41a4e 100644 --- a/src/dorkbox/collections/ObjectSet.kt +++ b/src/dorkbox/collections/ObjectSet.kt @@ -79,6 +79,14 @@ open class ObjectSet : MutableSet { } } + /** + * When true, [Iterable.iterator] will allocate a new iterator for each invocation. + * + * When false, the iterator is reused and nested use will throw an exception. Default is + * false. + */ + var allocateIterators = false + override var size = 0 var keyTable: Array @@ -466,7 +474,7 @@ open class ObjectSet : MutableSet { * Use the [ObjectSetIterator] constructor for nested or multithreaded iteration. */ override fun iterator(): ObjectSetIterator { - if (Collections.allocateIterators) return ObjectSetIterator(this) + if (allocateIterators) return ObjectSetIterator(this) if (iterator1 == null) { iterator1 = ObjectSetIterator(this) iterator2 = ObjectSetIterator(this) diff --git a/src/dorkbox/collections/OrderedMap.kt b/src/dorkbox/collections/OrderedMap.kt index 8f18608..3d6ec52 100644 --- a/src/dorkbox/collections/OrderedMap.kt +++ b/src/dorkbox/collections/OrderedMap.kt @@ -32,10 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators - - - /** * An [ObjectMap] that also stores keys in an [ArrayList] using the insertion order. Null keys are not allowed. No * allocation is done except when growing the table size. diff --git a/src/dorkbox/collections/OrderedSet.kt b/src/dorkbox/collections/OrderedSet.kt index 6e0d67b..d7edee7 100644 --- a/src/dorkbox/collections/OrderedSet.kt +++ b/src/dorkbox/collections/OrderedSet.kt @@ -32,7 +32,6 @@ */ package dorkbox.collections -import dorkbox.collections.Collections.allocateIterators import java.util.Comparator /**