up

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

up_qor_sink.c (613B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_qor_sink(u3_noun a, u3_noun k, u3_atom p, u3_noun v)
      5 {
      6   u3_noun b   = u3qdu_qor_put(a, k, p, v);
      7   u3_noun pre = u3qdu_qor_bot(b);
      8 
      9   u3z(b);
     10 
     11   if (u3_nul == pre) {
     12     return u3m_bail(c3__exit);
     13   } else
     14   {
     15     u3_noun pro = u3k(u3t(pre));
     16     u3z(pre);
     17 
     18     return pro;
     19   }
     20 }
     21 
     22 u3_noun
     23 u3wdu_qor_sink(u3_noun cor)
     24 {
     25   u3_noun a, k, p, v;
     26 
     27   if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_6, &k, u3x_sam_14, &p,
     28                       u3x_sam_15, &v, 0)) ||
     29        (c3n == u3ud(p)) )
     30   {
     31     return u3m_bail(c3__exit);
     32   } else {
     33     return u3qdu_qor_sink(a, k, p, v);
     34   }
     35 }
     36