module Std::Slice { extern func bux_bounds_check(index: uint, len: uint); struct Slice { data: *T, len: uint, } func Slice_FromArray(arr: *Array) -> Slice { var s: Slice; s.data = arr.data; s.len = arr.len; return s; } func Slice_Get(self: *Slice, idx: uint) -> T { bux_bounds_check(idx, self.len); return self.data[idx]; } func Slice_Set(self: *Slice, idx: uint, value: T) { bux_bounds_check(idx, self.len); self.data[idx] = value; } func Slice_Len(self: *Slice) -> uint { return self.len; } func Slice_operator_index_get(self: *Slice, idx: uint) -> T { return Slice_Get(self, idx); } func Slice_operator_index_set(self: *Slice, idx: uint, value: T) { Slice_Set(self, idx, value); } }