struct Arr { pub u64: size pub *T: data impl: inline fn Arr.size(Arr: arr) -> [u64] arr::size inline fn Arr.data(Arr: arr) -> [*T] arr::data fn Arr.set(T: value u64: idx Arr: arr) { idx arr::size >= if { "Cannot Set: Index out of bounds: " print idx println 1 exit } value arr::data idx ptr+_mut ! } fn Arr.get_ref(u64: idx Arr: arr) -> [&T] { idx arr::size >= if { "Cannot Get Ref: Index out of bounds: " print idx println 1 exit } arr::data idx ptr+ } fn Arr.get_ref_mut(u64: idx Arr: arr) -> [*T] { idx arr::size >= if { "Cannot Get Ref: Index out of bounds: " print idx println 1 exit } arr::data idx ptr+_mut } fn Arr.get(u64: idx Arr: arr) -> [T] { idx arr::size >= if { "Cannot Get: Index out of bounds: " print idx println 1 exit } arr::data idx ptr+ @ } fn Arr.rev(Arr: arr) { 0 arr::size 1 - while over over < do { as [start_idx end_idx] start_idx arr Arr.get end_idx arr Arr.get swap end_idx arr Arr.set start_idx arr Arr.set start_idx 1 + end_idx 1 - } drop drop } fn Arr.fill(T: item Arr: arr) { 0 while dup arr::size < do { item over arr Arr.set 1 + } drop } }