예제 #1
0
/*在单链表中找到第一个含item值的节点并删除此节点*/
void *slist_delete(slist_t *l,void *item) {
	list_node_t *cur,*prev;
	int (*comp)(const void *,const void *);
	comp=l->comp;
	if(l->head) {
		prev=NULL;
		cur=l->head;
		while(cur){
			int cmp_res=comp(item,cur->item);
			if(cmp_res==0){
				break;
			} else {
				prev=cur;
				cur=cur->next;
			}
		}
		if(cur==NULL){ //该键值不存在
			return NULL;
		} else {
			if(prev==NULL)
				return slist_pop_front(l);
			else {
				prev->next=cur->next;
				void *res_item=cur->item;
				free(cur);
				l->n--;
				return res_item;
			}
		}
	} else {
		return NULL;
	}
}
예제 #2
0
파일: test.c 프로젝트: zoujiaqing/gbase
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;
}
예제 #3
0
파일: curlp.c 프로젝트: gaccob/gbase
static curlc_t*
_curlp_client_alloc(curlp_t* cp) {
    if (!cp || !cp->free_list)
        return NULL;
    if (slist_size(cp->free_list) > 0) {
        curlc_t* cc = slist_pop_front(cp->free_list);
        return cc;
    }
    cp->size ++;
    curlc_t* cc = curlc_create();
    if (cc) {
        hash_insert(cp->clients, cc);
    }
    return cc;
}
예제 #4
0
struct curl_client_t* _curl_pool_client_alloc(curl_pool_t* cp)
{
    struct curl_client_t* cc = NULL;
    if (!cp || !cp->free_list) { return NULL; }

    if (slist_count(cp->free_list) > 0) {
        cc = slist_pop_front(cp->free_list);
        return cc;
    }

    cp->size ++;
    cc = curl_client_init();
    if (cc) {
        hash_insert(cp->clients, cc);
    }
    return cc;
}
예제 #5
0
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;
}