| interface ISized { |
| val size : Int |
| } |
| |
| interface javaUtilIterator<T> : Iterator<T> { |
| fun remove() : Unit { |
| throw UnsupportedOperationException() |
| } |
| } |
| |
| class MyIterator<T>(val array : ReadOnlyArray<T>) : javaUtilIterator<T> { |
| private var index = 0 |
| |
| override fun hasNext() : Boolean = index < array.size |
| |
| override fun next() : T = array.get(index++) |
| } |
| |
| interface ReadOnlyArray<out T> : ISized, Iterable<T> { |
| operator fun get(index : Int) : T |
| |
| override fun iterator() : Iterator<T> = MyIterator<T>(this) |
| } |
| |
| interface WriteOnlyArray<in T> : ISized { |
| operator fun set(index : Int, value : T) : Unit |
| |
| operator fun set(from: Int, count: Int, value: T) { |
| for(i in from..from+count-1) { |
| set(i, value) |
| } |
| } |
| } |
| |
| class MutableArray<T>(length: Int, init : (Int) -> T) : ReadOnlyArray<T>, WriteOnlyArray<T> { |
| private val array = Array<Any?>(length, init) |
| |
| override fun get(index : Int) : T = array[index] as T |
| override fun set(index : Int, value : T) : Unit { array[index] = value } |
| |
| override val size : Int |
| get() = array.size |
| } |
| |
| fun box() : String { |
| var a = MutableArray<Int> (4, {0}) |
| a [0] = 10 |
| a.set(1, 2, 13) |
| a [3] = 40 |
| a.iterator() |
| a.iterator().hasNext() |
| for(el in a) { |
| val fl = el |
| } |
| return "OK" |
| } |