up

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

up_bot.c (802B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_bot(u3_noun a)
      5 {
      6   if (u3_nul == a) {
      7     return u3_nul;
      8   }
      9 
     10   u3_atom 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       u3_noun ka, pa, va;
     21       u3x_trel(u3t(a), &ka, &pa, &va);
     22 
     23       return u3nc(u3_nul,
     24               u3nq(u3k(ka), u3k(pa), u3k(u3h(va)), u3qdu_cut(a)));
     25     }
     26 
     27     case c3__bin: {
     28       u3_noun ka, pa, ta;
     29       u3x_trel(u3t(a), &ka, &pa, &ta);
     30 
     31       return u3nc(u3_nul,
     32               u3nq(u3k(ka), u3k(pa), u3k(u3h(u3h(ta))), u3qdu_cut(a)));
     33     }
     34   }
     35 }
     36 
     37 u3_noun
     38 u3wdu_bot(u3_noun cor)
     39 {
     40   u3_noun a;
     41 
     42   if (c3n == u3r_mean(cor, u3x_sam, &a, 0)) {
     43     return u3m_bail(c3__exit);
     44   } else {
     45     return u3qdu_bot(a);
     46   }
     47 }
     48 
     49