Remove all uses of tuples from the compiler and stdlib
This commit is contained in:
parent
e123366bff
commit
aea537779e
45 changed files with 759 additions and 723 deletions
|
|
@ -266,29 +266,29 @@ fn foldl[T, U](fn(&U, &T) -> U p, &U z, &vec[T] v) -> U {
|
|||
}
|
||||
}
|
||||
|
||||
fn unzip[T, U](&vec[tup(T, U)] v) -> tup(vec[T], vec[U]) {
|
||||
auto sz = len[tup(T, U)](v);
|
||||
fn unzip[T, U](&vec[rec(T _0, U _1)] v) -> rec(vec[T] _0, vec[U] _1) {
|
||||
auto sz = len(v);
|
||||
if (sz == 0u) {
|
||||
ret tup(alloc[T](0u), alloc[U](0u));
|
||||
ret rec(_0=alloc[T](0u), _1=alloc[U](0u));
|
||||
} else {
|
||||
auto rest = slice[tup(T, U)](v, 1u, sz);
|
||||
auto rest = slice(v, 1u, sz);
|
||||
auto tl = unzip[T, U](rest);
|
||||
auto a = [v.(0)._0];
|
||||
auto b = [v.(0)._1];
|
||||
ret tup(a + tl._0, b + tl._1);
|
||||
ret rec(_0=a + tl._0, _1=b + tl._1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// FIXME make the lengths being equal a constraint
|
||||
fn zip[T, U](&vec[T] v, &vec[U] u) -> vec[tup(T, U)] {
|
||||
auto sz = len[T](v);
|
||||
assert (sz == len[U](u));
|
||||
fn zip[T, U](&vec[T] v, &vec[U] u) -> vec[rec(T _0, U _1)] {
|
||||
auto sz = len(v);
|
||||
assert (sz == len(u));
|
||||
if (sz == 0u) {
|
||||
ret alloc[tup(T, U)](0u);
|
||||
ret alloc(0u);
|
||||
} else {
|
||||
auto rest = zip[T, U](slice[T](v, 1u, sz), slice[U](u, 1u, sz));
|
||||
vec::push(rest, tup(v.(0), u.(0)));
|
||||
auto rest = zip(slice(v, 1u, sz), slice(u, 1u, sz));
|
||||
vec::push(rest, rec(_0=v.(0), _1=u.(0)));
|
||||
ret rest;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue