示例#1
0
static tb_ifaddrs_interface_ref_t tb_ifaddrs_interface_find(tb_iterator_ref_t iterator, tb_char_t const* name)
{
    // check
    tb_assert_and_check_return_val(iterator && name, tb_null);

    // find it
    tb_size_t itor = tb_find_all_if(iterator, tb_ifaddrs_interface_pred, name);
    tb_check_return_val(itor != tb_iterator_tail(iterator), tb_null);

    // ok
    return (tb_ifaddrs_interface_ref_t)tb_iterator_item(iterator, itor);
}
示例#2
0
文件: timer.c 项目: 1060460048/tbox
tb_void_t tb_timer_task_kill(tb_timer_ref_t timer, tb_timer_task_ref_t task)
{
    // check
    tb_timer_impl_t*        impl = (tb_timer_impl_t*)timer;
    tb_timer_task_impl_t*   task_impl = (tb_timer_task_impl_t*)task;
    tb_assert_and_check_return(impl && impl->pool && task_impl);

    // trace
    tb_trace_d("kill: when: %lld, period: %u, refn: %u", task_impl->when, task_impl->period, task_impl->refn);

    // enter
    tb_spinlock_enter(&impl->lock);

    // done
    do
    {
        // expired or removed?
        tb_check_break(task_impl->refn == 2);

        // find it
        tb_size_t itor = tb_find_all_if(impl->heap, tb_timer_comp_by_task, task_impl);
        tb_assert_and_check_break(itor != tb_iterator_tail(impl->heap));

        // del this task_impl
        tb_heap_del(impl->heap, itor);

        // killed
        task_impl->killed = 1;

        // no repeat
        task_impl->repeat = 0;
                
        // modify when => now
        task_impl->when = tb_timer_now(impl);

        // re-add task_impl
        tb_heap_put(impl->heap, task_impl);

    } while (0);

    // leave
    tb_spinlock_leave(&impl->lock);
}
示例#3
0
tb_size_t tb_find_all(tb_iterator_ref_t iterator, tb_cpointer_t value)
{
    return tb_find_all_if(iterator, tb_predicate_eq, value);
}