diff options
Diffstat (limited to 'std/arr.toc')
-rw-r--r-- | std/arr.toc | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/std/arr.toc b/std/arr.toc new file mode 100644 index 0000000..fcf6a45 --- /dev/null +++ b/std/arr.toc @@ -0,0 +1,27 @@ +// array package +pkg "arr"; + +#export Arr ::= fn (t :: Type) Type { + struct { + data : []t; + len, cap : int; + } +}; +#export arr_add ::= fn(t ::=, a : &Arr(t), x : t) { + if a.len >= a.cap { + a.cap = a.cap * 2 + 2; + new_data := new(t, a.cap); + each i := 0..a.len-1 { + new_data[i] = a.data[i]; + } + a.data = new_data; + } + a.data[a.len] = x; + a.len += 1; +}; + +#export arr_foreach ::= fn(t ::=, a : Arr(t), f : fn(&t)) { + each i := 0..a.len-1 { + f(&a.data[i]); + } +}; |