Пример #1
0
static tb_void_t tb_vector_itor_remove_range(tb_iterator_ref_t iterator, tb_size_t prev, tb_size_t next, tb_size_t size)
{
    // check
    tb_vector_impl_t* impl = (tb_vector_impl_t*)iterator;
    tb_assert_return(impl);

    // remove the items
    if (size) tb_vector_nremove((tb_vector_ref_t)iterator, prev != impl->size? prev + 1 : 0, size);
}
Пример #2
0
tb_void_t tb_vector_nremove_last(tb_vector_ref_t vector, tb_size_t size)
{   
    // check
    tb_vector_impl_t* impl = (tb_vector_impl_t*)vector;
    tb_assert_and_check_return(impl && size);

    // clear it
    if (size >= impl->size)
    {
        tb_vector_clear(vector);
        return ;
    }

    // remove last
    tb_vector_nremove(vector, impl->size - size, size);
}
Пример #3
0
static tb_size_t tb_vector_nremove_test()
{
    // init
    tb_vector_ref_t vector = tb_vector_init(TB_VECTOR_GROW_SIZE, tb_element_long());
    tb_assert_and_check_return_val(vector, 0);

    tb_size_t n = 10000;
    tb_vector_ninsert_head(vector, (tb_pointer_t)0xf, n);
    tb_hong_t t = tb_mclock();
    tb_vector_nremove(vector, tb_iterator_head(vector), n);
    t = tb_mclock() - t;

    // time
    tb_trace_i("tb_vector_nremove(%lu): %lld ms, size: %lu, maxn: %lu", n, t, tb_vector_size(vector), tb_vector_maxn(vector));

    // check
    tb_assert(!tb_vector_size(vector));

    // exit
    tb_vector_exit(vector);

    return n / ((tb_uint32_t)(t) + 1);
}