up

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

up_qor_sec.c (1251B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_qor_sec(u3_noun t, u3_atom m)
      5 {
      6   if ( u3_nul == t ) {
      7     return u3_nul;
      8   }
      9   else {
     10     u3_noun hol = u3h(t);
     11 
     12     if ( c3n == u3ud(hol) ) {
     13       return u3m_bail(c3__exit);
     14     }
     15     else switch ( hol ) {
     16       default:
     17         return u3m_bail(c3__exit);
     18 
     19       case c3__llos: {
     20         u3_noun n_p_t, l_p_t, m_p_t, r_p_t;
     21         u3x_qual(u3t(u3t(t)), &n_p_t, &l_p_t, &m_p_t, &r_p_t);
     22 
     23         u3_noun fel = u3nt(u3k(n_p_t), u3k(l_p_t), u3k(m_p_t));
     24 
     25         u3_noun pre = u3qdu_qor_sec(r_p_t, m);
     26         u3_noun pro = u3qdu_qor_toy(fel, pre);
     27 
     28         u3z(fel);
     29         u3z(pre);
     30 
     31         return pro;
     32       }
     33 
     34       case c3__rlos: {
     35         u3_noun n_p_t, l_p_t, m_p_t, r_p_t;
     36         u3x_qual(u3t(u3t(t)), &n_p_t, &l_p_t, &m_p_t, &r_p_t);
     37 
     38         u3_noun fer = u3nt(u3k(n_p_t), u3k(r_p_t), u3k(m));
     39 
     40         u3_noun pre = u3qdu_qor_sec(l_p_t, m_p_t);
     41         u3_noun pro = u3qdu_qor_toy(pre, fer);
     42 
     43         u3z(fer);
     44         u3z(pre);
     45 
     46         return pro;
     47       }
     48     }
     49   }
     50 }
     51 
     52 u3_noun
     53 u3wdu_qor_sec(u3_noun cor)
     54 {
     55   u3_noun t, m;
     56 
     57   if ( (c3n == u3r_mean(cor, u3x_sam_2, &t, u3x_sam_3, &m, 0 )) ||
     58        (c3n == u3ud(m)) )
     59   {
     60     return u3m_bail(c3__exit);
     61   } else {
     62     return u3qdu_qor_sec(t, m);
     63   }
     64 }
     65 
     66