53 lines
1.2 KiB
Plaintext
53 lines
1.2 KiB
Plaintext
trait ISized {
|
|
val size : Int
|
|
}
|
|
|
|
trait ReadOnlyArray<out T> : ISized, java.lang.Iterable<T> {
|
|
fun get(index : Int) : T
|
|
|
|
class MyIterator() : java.util.Iterator<T> {
|
|
private var index = 0
|
|
|
|
override fun hasNext() : Boolean = index < size
|
|
|
|
override fun next() : T = get(index++)
|
|
|
|
override fun remove () : Unit {}
|
|
}
|
|
|
|
override fun iterator() : java.util.Iterator<T> = MyIterator()
|
|
}
|
|
|
|
trait WriteOnlyArray<in T> : ISized {
|
|
fun set(index : Int, value : T) : Unit
|
|
|
|
fun set(from: Int, count: Int, value: T) {
|
|
for(i in 0..(count-1)) {
|
|
set(i, value)
|
|
}
|
|
}
|
|
}
|
|
|
|
class MutableArray<T>(length: Int) : ReadOnlyArray<T>, WriteOnlyArray<T> {
|
|
private val array = Array<T>(length)
|
|
|
|
override fun get(index : Int) : T = array[index]
|
|
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)
|
|
a [0] = 10
|
|
a.set(1, 2, 13)
|
|
a [3] = 40
|
|
System.out?.println(a.iterator())
|
|
System.out?.println(a.iterator().hasNext())
|
|
// if(a.iterator() !is Iterator<Int>) return "fail";
|
|
// for(el in a) {
|
|
// System.out?.println(el)
|
|
// }
|
|
return "OK"
|
|
} |