1    type [T; N]
2        def as_ptr = self as Ptr<T>
3        def as_mut_ptr @mut = self as MutPtr<T>
4    
5        def as_slice = Slice<T> as_ptr N
6        def as_mut_slice @mut = MutSlice<T> as_mut_ptr N
7    
8        def size = N
9    
10       fun get (i : u32) : T
11       fun get_ptr (i : u32) = as_ptr + i
12       fun get_mut_ptr @mut (i : u32) = as_mut_ptr + i
13       fun set @mut (i : u32) (value : T)
14   
15       def set_all @mut (value : T) =
16           for i = 0 until size do
17               self[i] = value
18   
19       def (==) rhs =
20           for i = 0 until N do
21               if self[i] <> rhs[i] then return false
22   
23           true
24   
25       def map<U> (f : T -> U) =
26           let mut array = [U; N]@zero
27           for i = 0 until size do
28               array[i] = f self[i]
29   
30           array
31