int main() { int data[LOOP]; int i, res; int* p; struct slist_t* sl; sl = slist_init(); assert(sl); for (i = 0; i < LOOP; ++ i) { data[i] = rand() % LOOP; res = slist_push_front(sl, &data[i]); assert(0 == res); res = slist_push_back(sl, &data[i]); assert(0 == res); } printf("list count=%d\n", slist_count(sl)); for (i = LOOP-1; i >= 0; -- i) { res = slist_find(sl, &data[i]); assert(0 == res); p = slist_pop_front(sl); assert(p == &data[i]); p = slist_pop_back(sl); assert(p == &data[i]); res = slist_find(sl, &data[i]); assert(res < 0); } printf("list count=%d\n", slist_count(sl)); slist_release(sl); sl = 0; return 0; }
static void _curlp_client_gc(curlp_t* cp, curlc_t* cc) { if (cp && cc && cp->free_list) { curl_multi_remove_handle(cp->mhandle, curlc_handle(cc)); curlc_finish(cc); slist_push_front(cp->free_list, cc); } }
int epoll_unregister(struct reactor_t* reactor, struct handler_t* h) { if (!reactor || !reactor->data || !h) return -1; epoll_t* epoll = (epoll_t*)reactor->data; // add to expire-list slist_push_front(epoll->expired, h); return _epoll_set(epoll, h, EPOLL_CTL_DEL, 0); }
void _curl_pool_client_gc(curl_pool_t* cp, struct curl_client_t* cc) { if (cp && cc && cp->free_list) { curl_multi_remove_handle(cp->mhandle, curl_client_handle(cc)); curl_client_finish_req(cc); slist_push_front(cp->free_list, cc); } }
void test__slist_iterator_next__successfully(void** state) { slist_iterator_t it_iter; slist_t* pslist = create_slist(int); slist_init_elem(pslist, 1, 100); slist_push_front(pslist, 200); it_iter = slist_begin(pslist); assert_true(*(int*)iterator_get_pointer(it_iter) == 200); it_iter = _slist_iterator_next(it_iter); assert_true(*(int*)iterator_get_pointer(it_iter) == 100); slist_destroy(pslist); }
struct OutputDriver* output_open(const char* driver_name, const char* server_name) { struct output_id id; slist_iterator_t it ; struct output_descriptor* od = 0; id.driver_name = (char*) driver_name; id.server_name = (char*) server_name; it = slist_find_if(s_outputs, id_equals, &id); if (it == slist_end(s_outputs)) { /* char buffer[TEMP_BUF_SIZE]; snprintf(buffer, sizeof(buffer), "Creating new output descriptor: '%s:%s'", driver_name, server_name); s_log(2, buffer);*/ od = output_descriptor_create(driver_name, server_name); slist_push_front(s_outputs, od); } else { od = (struct output_descriptor*) slist_iter_deref(it); } assert(od->ref_count >= 0); // create drv if necessary if (od->ref_count == 0) { od->drv = lookup_driver(driver_name); } // increase refcount if (od->drv != 0) { ++od->ref_count; } return od->drv; }
int test_base_slist(const char* param) { struct slist_t* sl = slist_create(); if (!sl) { fprintf(stderr, "slist create fail\n"); return -1; } rand_seed(time(NULL)); int loop = param ? atoi(param) : 32; int data[loop]; for (int i = 0; i < loop; ++ i) { data[i] = (int)(rand_gen()) % loop; int res = slist_push_front(sl, &data[i]); CHECK(sl, res == 0, "slist push front fail"); res = slist_push_back(sl, &data[i]); CHECK(sl, res == 0, "slist push back fail"); } CHECK(sl, slist_size(sl) == 2 * loop, "slist size fail"); for (int i = loop - 1; i >= 0; -- i) { int res = slist_find(sl, &data[i]); CHECK(sl, res == 0, "slist find fail"); void* p = slist_pop_front(sl); CHECK(sl, p == &data[i], "slist pop front fail"); p = slist_pop_back(sl); CHECK(sl, p == &data[i], "slist pop back fail"); res = slist_find(sl, &data[i]); CHECK(sl, res < 0, "slist find fail"); } CHECK(sl, slist_size(sl) == 0, "slist size fail"); slist_release(sl); return 0; }
curl_pool_t* curl_pool_init() { int32_t i = 0; struct curl_client_t* cc = NULL; curl_pool_t* cp = (curl_pool_t*)MALLOC(sizeof(*cp)); if (!cp) goto CURL_FAIL; memset(cp, 0, sizeof(*cp)); cp->size = CURL_POOL_DEFAULT_SIZE; cp->free_list = slist_init(); if (!cp->free_list) goto CURL_FAIL1; cp->clients = hash_init(_curl_pool_hash, _curl_pool_cmp, cp->size * 13); if (!cp->clients) goto CURL_FAIL2; cp->mhandle = curl_multi_init(); if (!cp->mhandle) goto CURL_FAIL3; // pre allocate client for (i = 0; i < cp->size; ++ i) { cc = curl_client_init(); if (cc) { slist_push_front(cp->free_list, cc); hash_insert(cp->clients, cc); } } return cp; CURL_FAIL3: hash_release(cp->clients); CURL_FAIL2: slist_release(cp->free_list); CURL_FAIL1: FREE(cp); CURL_FAIL: return NULL; }