Beispiel #1
0
tb_bool_t tb_predicate_beq(tb_iterator_ref_t iterator, tb_cpointer_t item, tb_cpointer_t value)
{
    // check
    tb_assert(iterator);

    // item >= value?
    return tb_iterator_comp(iterator, item, value) >= 0;
}
Beispiel #2
0
tb_bool_t tb_predicate_le(tb_iterator_ref_t iterator, tb_cpointer_t item, tb_cpointer_t value)
{
    // check
    tb_assert_abort(iterator);

    // item < value?
    return tb_iterator_comp(iterator, item, value) < 0;
}
Beispiel #3
0
static __tb_inline__ tb_bool_t tb_heap_check(tb_iterator_ref_t iterator, tb_size_t head, tb_size_t tail, tb_iterator_comp_t comp)
{
    // the comparer 
    if (!comp) comp = tb_iterator_comp;

    // walk
    if (head != tail)
    {
        tb_size_t root;
        for (root = head; ++head != tail; ++root)
        {
            // root < left?
            if (tb_iterator_comp(iterator, tb_iterator_item(iterator, root), tb_iterator_item(iterator, head)) < 0) return tb_false;
            // end?
            else if (++head == tail) break;
            // root < right?
            else if (tb_iterator_comp(iterator, tb_iterator_item(iterator, root), tb_iterator_item(iterator, head)) < 0) return tb_false;
        }
    }

    // ok
    return tb_true;
}