up

A priority search queue and LRU cache.
git clone git://git.jtobin.io/up.git
Log | Files | Refs

up_qor_dew.c (3138B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_qor_dew(u3_noun a, u3_noun k)
      5 {
      6   if (u3_nul == a) {
      7     return u3_nul;
      8   }
      9 
     10   u3_noun n_a, t_a, m_a;
     11   u3x_trel(a, &n_a, &t_a, &m_a);
     12 
     13   if (u3_nul == t_a) {
     14     u3_noun kn_a, pn_a, vn_a;
     15     u3x_trel(n_a, &kn_a, &pn_a, &vn_a);
     16 
     17     if (c3n == u3r_sing(k, kn_a)) {
     18       return u3_nul;
     19     }
     20     else {
     21       return u3nq(u3_nul, u3k(pn_a), u3k(vn_a), u3_nul);
     22     }
     23   }
     24 
     25   u3_noun hot = u3h(t_a);
     26 
     27   if (c3n == u3ud(hot)) {
     28     return u3m_bail(c3__exit);
     29   }
     30   else switch ( hot ) {
     31     default:
     32       return u3m_bail(c3__exit);
     33 
     34     case c3__llos: {
     35       u3_noun b = u3t(u3t(t_a));
     36 
     37       u3_noun n_b, l_b, m_b, r_b;
     38       u3x_qual(b, &n_b, &l_b, &m_b, &r_b);
     39 
     40       u3_noun lel = u3nt(u3k(n_b), u3k(l_b), u3k(m_b));
     41       u3_noun rel = u3nt(u3k(n_a), u3k(r_b), u3k(m_a));
     42 
     43       if ( (c3y == u3r_sing(k, m_b)) || (c3y == u3qc_gor(k, m_b)) ) {
     44         u3_noun pat = u3qdu_qor_dew(lel, k);
     45 
     46         if (u3_nul == pat) {
     47           u3z(lel);
     48           u3z(rel);
     49 
     50           return u3_nul;
     51         }
     52         else {
     53           u3_noun pp, qp, rp;
     54           u3x_trel(u3t(pat), &pp, &qp, &rp);
     55 
     56           u3_noun pro = u3nq(u3_nul, u3k(pp), u3k(qp), u3qdu_qor_toy(rp, rel));
     57 
     58           u3z(lel);
     59           u3z(rel);
     60           u3z(pat);
     61 
     62           return pro;
     63         }
     64       }
     65       else {
     66         u3_noun pat = u3qdu_qor_dew(rel, k);
     67 
     68         if (u3_nul == pat) {
     69           u3z(lel);
     70           u3z(rel);
     71 
     72           return u3_nul;
     73         }
     74         else {
     75           u3_noun pp, qp, rp;
     76           u3x_trel(u3t(pat), &pp, &qp, &rp);
     77 
     78           u3_noun pro = u3nq(u3_nul, u3k(pp), u3k(qp), u3qdu_qor_toy(lel, rp));
     79 
     80           u3z(lel);
     81           u3z(rel);
     82           u3z(pat);
     83 
     84           return pro;
     85         }
     86       }
     87     }
     88 
     89     case c3__rlos: {
     90       u3_noun b = u3t(u3t(t_a));
     91 
     92       u3_noun n_b, l_b, m_b, r_b;
     93       u3x_qual(b, &n_b, &l_b, &m_b, &r_b);
     94 
     95       u3_noun lel = u3nt(u3k(n_a), u3k(l_b), u3k(m_b));
     96       u3_noun rel = u3nt(u3k(n_b), u3k(r_b), u3k(m_a));
     97 
     98       if ( (c3y == u3r_sing(k, m_b)) || (c3y == u3qc_gor(k, m_b)) ) {
     99         u3_noun pat = u3qdu_qor_dew(lel, k);
    100 
    101         if (u3_nul == pat) {
    102           u3z(lel);
    103           u3z(rel);
    104 
    105           return u3_nul;
    106         }
    107         else {
    108           u3_noun pp, qp, rp;
    109           u3x_trel(u3t(pat), &pp, &qp, &rp);
    110 
    111           u3_noun pro = u3nq(u3_nul, u3k(pp), u3k(qp), u3qdu_qor_toy(rp, rel));
    112 
    113           u3z(lel);
    114           u3z(rel);
    115           u3z(pat);
    116 
    117           return pro;
    118         }
    119       }
    120       else {
    121         u3_noun pat = u3qdu_qor_dew(rel, k);
    122 
    123         if (u3_nul == pat) {
    124           u3z(lel);
    125           u3z(rel);
    126 
    127           return u3_nul;
    128         }
    129         else {
    130           u3_noun pp, qp, rp;
    131           u3x_trel(u3t(pat), &pp, &qp, &rp);
    132 
    133           u3_noun pro = u3nq(u3_nul, u3k(pp), u3k(qp), u3qdu_qor_toy(lel, rp));
    134 
    135           u3z(lel);
    136           u3z(rel);
    137           u3z(pat);
    138 
    139           return pro;
    140         }
    141       }
    142     }
    143 
    144   }
    145 }
    146 
    147 u3_noun
    148 u3wdu_qor_dew(u3_noun cor)
    149 {
    150   u3_noun a, k;
    151 
    152   if (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &k, 0))
    153   {
    154     return u3m_bail(c3__exit);
    155   } else {
    156     return u3qdu_qor_dew(a, k);
    157   }
    158 }
    159