Exemple #1
0
static tb_demo_spider_parser_t* tb_demo_spider_parser_init(tb_thread_pool_worker_ref_t worker)
{
    // check 
    tb_assert_and_check_return_val(worker, tb_null);

    // done
    tb_bool_t                   ok = tb_false;
    tb_demo_spider_parser_t*    parser = tb_null;
    do
    {
        // attempt to get the parser
        parser = (tb_demo_spider_parser_t*)tb_thread_pool_worker_getp(worker, 0);
        if (!parser)
        {
            // make parser
            parser = tb_malloc0_type(tb_demo_spider_parser_t);
            tb_assert_and_check_break(parser);

            // save parser
            tb_thread_pool_worker_setp(worker, 0, tb_demo_spider_parser_exit, (tb_cpointer_t)parser);

            // init stream
            parser->stream = tb_stream_init_file();
            tb_assert_and_check_break(parser->stream);

            // init reader
            parser->reader = tb_xml_reader_init();
            tb_assert_and_check_break(parser->reader);

            // init cache
            parser->cache = tb_circle_queue_init(255, tb_item_func_str(tb_true));
            tb_assert_and_check_break(parser->cache);

            // init iurl
            if (!tb_url_init(&parser->iurl)) break;
        }

        // ok
        ok = tb_true;

    } while (0);

    // failed?
    if (!ok)
    {
        // exit it
        if (parser) tb_demo_spider_parser_exit(worker, (tb_cpointer_t)parser);
        parser = tb_null;
    }

    // ok
    return parser;
}
Exemple #2
0
/* //////////////////////////////////////////////////////////////////////////////////////
 * implementation
 */
static tb_void_t tb_circle_queue_put_and_pop_test()
{
    // init
    tb_circle_queue_ref_t queue = tb_circle_queue_init(10, tb_element_long());
    tb_assert_and_check_return(queue);

    // make queue
    tb_circle_queue_put(queue, (tb_pointer_t)0);
    tb_circle_queue_put(queue, (tb_pointer_t)1);
    tb_circle_queue_put(queue, (tb_pointer_t)2);
    tb_circle_queue_put(queue, (tb_pointer_t)3);
    tb_circle_queue_put(queue, (tb_pointer_t)4);
    tb_circle_queue_put(queue, (tb_pointer_t)5);
    tb_circle_queue_put(queue, (tb_pointer_t)6);
    tb_circle_queue_put(queue, (tb_pointer_t)7);
    tb_circle_queue_put(queue, (tb_pointer_t)8);
    tb_circle_queue_put(queue, (tb_pointer_t)9);

    // done
    __tb_volatile__ tb_size_t i = 0;
    __tb_volatile__ tb_size_t n = 10000;
    tb_hong_t t = tb_mclock();
    for (i = 0; i < n; i++) 
    {
        tb_circle_queue_pop(queue);
        tb_circle_queue_put(queue, (tb_pointer_t)0xf);
    }
    t = tb_mclock() - t;

    // trace
    tb_trace_i("tb_circle_queue_put_and_pop(%lu): %lld ms, size: %lu, maxn: %lu", n, t, tb_circle_queue_size(queue), tb_circle_queue_maxn(queue));

    // check
    tb_assert(tb_circle_queue_size(queue) == 10);
    tb_assert(tb_circle_queue_head(queue) == (tb_pointer_t)0xf);
    tb_assert(tb_circle_queue_last(queue) == (tb_pointer_t)0xf);

    // clear it
    tb_circle_queue_clear(queue);
    tb_assert(!tb_circle_queue_size(queue));

    // exit
    tb_circle_queue_exit(queue);
}
Exemple #3
0
static tb_void_t tb_circle_queue_iterator_next_test()
{
    // init
    tb_size_t n = 1000000;
    tb_circle_queue_ref_t queue = tb_circle_queue_init(n, tb_element_long());
    tb_assert_and_check_return(queue);

    // make queue
    while (n--) tb_circle_queue_put(queue, (tb_pointer_t)0xf);

    // done
    tb_hong_t t = tb_mclock();
    tb_for_all (tb_char_t*, item, queue) tb_used(item);
    t = tb_mclock() - t;

    // trace
    tb_trace_i("tb_circle_queue_iterator_next(%lu): %lld ms, size: %lu, maxn: %lu", 1000000, t, tb_circle_queue_size(queue), tb_circle_queue_maxn(queue));

    // exit
    tb_circle_queue_exit(queue);
}