up

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

up_qat_del.c (1250B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_qat_del(u3_noun a, u3_noun k)
      5 {
      6   if (u3_nul == a) {
      7     return u3_nul;
      8   }
      9 
     10   u3_noun hoc = u3h(a);
     11 
     12   if (c3n == u3ud(hoc)) {
     13     return u3m_bail(c3__exit);
     14   }
     15   else switch ( hoc ) {
     16     default:
     17       return u3m_bail(c3__exit);
     18 
     19     case c3__tip: {
     20       return ( c3y == u3r_sing(k, u3h(u3t(a))) ) ? u3_nul : u3k(a);
     21     }
     22 
     23     case c3__bin: {
     24       u3_noun ka, pa, va, ma;
     25       u3_noun ta, la, ra;
     26       u3x_qual(u3t(a), &ka, &pa, &va, &ta);
     27       u3x_trel(ta, &ma, &la, &ra);
     28 
     29       if (c3y == u3qdu_feud(ma, k, ka)) {
     30         return u3k(a);
     31       }
     32       else if (c3y == u3r_sing(k, ka)) {
     33         return u3qdu_fuse(ma, la, ra);
     34       }
     35       else if (c3y == u3qdu_zero(ma, k)) {
     36         u3_noun ul  = u3qdu_qat_del(la, k);
     37         u3_noun pro = u3qdu_funk(ka, pa, va, ma, ul, ra);
     38 
     39         u3z(ul);
     40 
     41         return pro;
     42       }
     43       else {
     44         u3_noun ur  = u3qdu_qat_del(ra, k);
     45         u3_noun pro = u3qdu_wane(ka, pa, va, ma, la, ur);
     46 
     47         u3z(ur);
     48 
     49         return pro;
     50       }
     51     }
     52   }
     53 }
     54 
     55 u3_noun
     56 u3wdu_qat_del(u3_noun cor)
     57 {
     58   u3_noun a, k;
     59 
     60   if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &k, 0)) )
     61   {
     62     return u3m_bail(c3__exit);
     63   } else {
     64     return u3qdu_qat_del(a, k);
     65   }
     66 }
     67 
     68