up

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

up_qor_toy.c (891B)


      1 #include "all.h"
      2 
      3 u3_noun
      4 u3qdu_qor_toy(u3_noun a, u3_noun b)
      5 {
      6   if ( u3_nul == a ) {
      7     return u3k(b);
      8   }
      9   else if ( u3_nul == b ) {
     10     return u3k(a);
     11   }
     12   else {
     13     u3_noun n_a, t_a, m_a;
     14     u3_noun n_b, t_b, m_b;
     15     u3x_trel(a, &n_a, &t_a, &m_a);
     16     u3x_trel(b, &n_b, &t_b, &m_b);
     17 
     18     u3_noun k_n_a, p_n_a, v_n_a;
     19     u3_noun k_n_b, p_n_b, v_n_b;
     20     u3x_trel(n_a, &k_n_a, &p_n_a, &v_n_a);
     21     u3x_trel(n_b, &k_n_b, &p_n_b, &v_n_b);
     22 
     23     if ( c3y == u3qdu_lex(p_n_a, k_n_a, p_n_b, k_n_b) ) {
     24       return u3nt(u3k(n_a), u3qdu_qor_rbal(n_b, t_a, m_a, t_b), u3k(m_b));
     25     }
     26     else {
     27       return u3nt(u3k(n_b), u3qdu_qor_lbal(n_a, t_a, m_a, t_b), u3k(m_b));
     28     }
     29   }
     30 }
     31 
     32 u3_noun
     33 u3wdu_qor_toy(u3_noun cor)
     34 {
     35   u3_noun a, b;
     36 
     37   if ( (c3n == u3r_mean(cor, u3x_sam_2, &a, u3x_sam_3, &b, 0 )) )
     38   {
     39     return u3m_bail(c3__exit);
     40   } else {
     41     return u3qdu_qor_toy(a, b);
     42   }
     43 }
     44