up

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

up_dew.c (1421B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_dew(u3_noun a, u3_noun k)
      5 {
      6   u3_noun ded = u3qdu_qat_dew(a, k);
      7 
      8   if (u3_nul == ded) {
      9     return u3_nul;
     10   }
     11   else {
     12     u3_noun pv, qv, rv, sv;
     13     u3_noun vrv, trv;
     14 
     15     u3x_qual(u3t(ded), &pv, &qv, &rv, &sv);
     16     u3x_cell(rv, &vrv, &trv);
     17 
     18     if (c3y == u3r_sing(k, pv)) {
     19       u3_noun low = u3qdu_qor_bot(trv);
     20 
     21       if (u3_nul == low) {
     22         u3_noun pro = u3nq(u3_nul, u3k(qv), u3k(vrv), u3k(sv));
     23 
     24         u3z(ded);
     25 
     26         return pro;
     27       }
     28       else {
     29         u3_noun kl, pl, vl;
     30         u3x_trel(u3t(low), &kl, &pl, &vl);
     31 
     32         u3_noun pro = u3nq(u3_nul, u3k(qv), u3k(vrv),
     33                         u3qdu_qat_raw(sv, kl, pl, vl));
     34 
     35         u3z(ded);
     36         u3z(low);
     37 
     38         return pro;
     39       }
     40     }
     41     else {
     42       u3_noun low = u3qdu_qor_dew(trv, k);
     43 
     44       if (u3_nul == low) {
     45         u3z(ded);
     46 
     47         return u3_nul;
     48       }
     49       else {
     50         u3_noun pl, ql, rl;
     51         u3x_trel(u3t(low), &pl, &ql, &rl);
     52 
     53         u3_noun buc = u3nc(u3k(vrv), u3k(rl));
     54         u3_noun pro = u3nq(u3_nul, u3k(pl), u3k(ql),
     55                         u3qdu_qat_raw(sv, pv, qv, buc));
     56 
     57         u3z(ded);
     58         u3z(low);
     59         u3z(buc);
     60 
     61         return pro;
     62       }
     63     }
     64   }
     65 }
     66 
     67 u3_noun
     68 u3wdu_dew(u3_noun cor)
     69 {
     70   u3_noun a, k;
     71 
     72   if (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &k, 0)) {
     73     return u3m_bail(c3__exit);
     74   } else {
     75     return u3qdu_dew(a, k);
     76   }
     77 }
     78