1 begin@ array 2 3 type Array<T> @abstract @byval = 4 val size : u32 5 local ptr @param = kedr/alloc<T> size 6 7 fun get (i : u32) = ptr[i] 8 fun get (i : i32) = 9 assert i >= 0 10 ptr[i] 11 12 fun get_ptr (i : u32) = ptr as Ptr<T> + i 13 fun get_ptr (i : i32) = 14 assert i >= 0 15 ptr as Ptr<T> + i 16 17 def as_ptr = ptr as Ptr<T> 18 def as_slice = Slice<T> ptr size 19 20 def is_empty = size == 0 21 def is_not_empty = size <> 0 22 23 def discard = 24 free@ ptr 25 26 type MutArray<T> @[mut_of Array] @byval = 27 inherit Array<T> 28 29 def as_mut_ptr = ptr 30 def as_mut_slice = MutSlice<T> ptr size 31 32 fun get_mut_ptr (i : u32) = ptr + i 33 fun get_mut_ptr (i : i32) = 34 assert i >= 0 35 ptr + i 36 37 fun set (i : u32) value = 38 ptr[i] = value 39 40 fun set (i : i32) value = 41 assert i >= 0 42 ptr[i] = value 43 44 def as_readonly = self as Array<T> 45 46 object Array<T> = 47 val empty = Array<T> 0 48