1    type Slice<T> @byval =
2        val ptr : Ptr<T>
3        val size : u32
4    
5        fun get (i : u32) = ptr[i]
6        fun get (i : i32) =
7            assert i >= 0
8            ptr[i]
9    
10       fun get_ptr (i : u32) = ptr + i
11       fun get_ptr (i : i32) =
12           assert i >= 0
13           ptr + i
14   
15       def contains (x : T) =
16           for i = 0 until size do
17               if self[i] == x then return true
18   
19           false
20   
21   type MutSlice<T> @byval @[mut_of Slice] =
22       val ptr : MutPtr<T> @impl
23   
24       inherit Slice<T>
25   
26       fun set (i : u32) (value : T) =
27           ptr[i] = value
28   
29       fun set (i : i32) (value : T) =
30           assert i >= 0
31           ptr[i] = value
32   
33   object Slice<T> =
34       val empty = Slice<T> null 0
35