separate compiler and plugin tests
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
class ArrayList<T> : IMutableList<T> {
|
||||
private var data = MutableArray(10)
|
||||
private var used = 0
|
||||
private var version = 0
|
||||
|
||||
override fun iterator() : IIterator<T> = mutableIterator()
|
||||
|
||||
override fun mutableIterator() : IMutableIterator<T> = object : IMutableIterator() { // T is inferred
|
||||
private val index = 0
|
||||
private var myVersion = version
|
||||
|
||||
private fun checkVersion() {
|
||||
if (version != myVersion)
|
||||
throw ConcurrentModificationException()
|
||||
}
|
||||
|
||||
override fun next() {
|
||||
checkVersion()
|
||||
if (hasNext)
|
||||
throw NoMoreElementsException()
|
||||
data[index++]
|
||||
}
|
||||
|
||||
override val hasNext
|
||||
get() = index < used
|
||||
|
||||
|
||||
override fun remove() {
|
||||
checkVersion()
|
||||
val result = ArrayList.this.remove(index - 1)
|
||||
myVersion = version
|
||||
result
|
||||
}
|
||||
}
|
||||
|
||||
override fun get(index : Int) {
|
||||
checkIndex(index)
|
||||
data[index]
|
||||
}
|
||||
|
||||
private fun checkIndex(index : Int) {
|
||||
if (index > used)
|
||||
throw IndexOutOfBoundsException(index)
|
||||
}
|
||||
|
||||
override val isEmpty
|
||||
get() = used == 0
|
||||
|
||||
|
||||
override val size
|
||||
get() = used
|
||||
|
||||
|
||||
override fun set(index : Int, value : T) {
|
||||
checkIndex(index)
|
||||
var result = data[index]
|
||||
data[index] = value
|
||||
result
|
||||
}
|
||||
|
||||
override fun add(index : Int, value : T) {
|
||||
ensureSize(used + 1)
|
||||
if (index == used) {
|
||||
data[used++] = value
|
||||
} else if (index < used) {
|
||||
for (i in used-1..index) // backwards, special operator... Need to optimize this to be a real indexed loop
|
||||
data[i + 1] = data[i]
|
||||
data[index] = value
|
||||
used++
|
||||
} else throw IndexOutOfBoundsException(index)
|
||||
}
|
||||
|
||||
override fun remove(index : Int) {
|
||||
for (i in index..used-1)
|
||||
data[i] = data[i + 1]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user