From 1695977655b651e2df6175d8bf4b27455621eda3 Mon Sep 17 00:00:00 2001 From: Joe Bryan Date: Thu, 7 May 2020 15:48:48 -0700 Subject: [PATCH] u3: WIP refactors +uni:by jet --- pkg/urbit/jets/d/by_uni.c | 107 ++++++++++++++++++++------------------ 1 file changed, 55 insertions(+), 52 deletions(-) diff --git a/pkg/urbit/jets/d/by_uni.c b/pkg/urbit/jets/d/by_uni.c index 10e621dea4..574558a045 100644 --- a/pkg/urbit/jets/d/by_uni.c +++ b/pkg/urbit/jets/d/by_uni.c @@ -11,12 +11,12 @@ u3_noun u3qdb_uni(u3_noun a, u3_noun b) { - if ( u3_nul == a ) { - return u3k(b); - } - else if ( u3_nul == b ) { + if ( u3_nul == b ) { return u3k(a); } + else if ( u3_nul == a ) { + return u3k(b); + } else { u3_noun n_a, l_a, r_a; u3_noun n_b, l_b, r_b; @@ -27,59 +27,62 @@ u3qdb_uni(u3_noun a, u3x_cell(n_a, &p_n_a, &q_n_a); u3x_cell(n_b, &p_n_b, &q_n_b); - if ( c3y == u3qc_mor(p_n_a, p_n_b) ) { - if ( c3y == u3r_sing(p_n_a, p_n_b) ) { - return u3nt(u3k(n_b), - u3qdb_uni(u3k(l_a), - u3k(l_b)), - u3qdb_uni(u3k(r_a), - u3k(r_b))); - } - else if ( c3y == u3qc_gor(p_n_b, p_n_a) ) { - return u3qdb_uni( - u3nt(u3k(n_a), - u3qdb_uni(u3k(l_a), - u3nt(u3k(n_b), - u3k(l_b), - u3k(u3_nul))), - u3k(r_a)), - u3k(r_b)); + if ( c3y == u3r_sing(p_n_a, p_n_b) ) { + return u3nt(u3k(n_b), + u3qdb_uni(l_a, l_b), + u3qdb_uni(r_a, r_b)); + } + else if ( c3y == u3qc_mor(p_n_a, p_n_b) ) { + u3_noun new_a, old_b; + + if ( c3y == u3qc_gor(p_n_b, p_n_a) ) { + u3_noun new_b = u3nt(u3k(n_b), u3k(l_b), u3_nul); + u3_noun new_la = u3qdb_uni(l_a, new_b); + u3z(new_b); + + new_a = u3nt(u3k(n_a), new_la, u3k(r_a)); + old_b = r_b; } else { - return u3qdb_uni( - u3nt(u3k(n_a), - u3k(l_a), - u3qdb_uni(u3k(r_a), - u3nt(u3k(n_b), - u3k(u3_nul), - u3k(r_b)))), - u3k(l_b)); + u3_noun new_b = u3nt(u3k(n_b), u3_nul, u3k(r_b)); + u3_noun new_ra = u3qdb_uni(r_a, new_b); + u3z(new_b); + + new_a = u3nt(u3k(n_a), u3k(l_a), new_ra); + old_b = l_b; + } + + { + u3_noun pro = u3qdb_uni(new_a, old_b); + u3z(new_a); + return pro; } } - else if ( c3y == u3r_sing(p_n_b, p_n_a) ) { - return u3nt(u3k(n_b), - u3qdb_uni(u3k(r_b), u3k(r_a)), - u3qdb_uni(u3k(l_b), u3k(l_a))); - } - else if ( c3y == u3qc_gor(p_n_a, p_n_b) ) { - return u3qdb_uni( - u3k(r_a), - u3nt(u3k(n_b), - u3qdb_uni(u3nt(u3k(n_a), - u3k(l_a), - u3k(u3_nul)), - u3k(l_b)), - u3k(r_b))); - } else { - return u3qdb_uni( - u3k(l_a), - u3nt(u3k(n_b), - u3k(l_b), - u3qdb_uni(u3k(r_b), - u3nt(u3k(n_a), - u3k(u3_nul), - u3k(r_a))))); + u3_noun old_a, new_b; + + if ( c3y == u3qc_gor(p_n_a, p_n_b) ) { + u3_noun new_a = u3nt(u3k(n_a), u3k(l_a), u3_nul); + u3_noun new_lb = u3qdb_uni(new_a, l_b); + u3z(new_a); + + new_b = u3nt(u3k(n_b), new_lb, u3k(r_b)); + old_a = r_a; + } + else { + u3_noun new_a = u3nt(u3k(n_a), u3_nul, u3k(r_a)); + u3_noun new_rb = u3qdb_uni(new_a, r_b); + u3z(new_a); + + new_b = u3nt(u3k(n_b), u3k(l_b), new_rb); + old_a = l_a; + } + + { + u3_noun pro = u3qdb_uni(old_a, new_b); + u3z(new_b); + return pro; + } } } }