コード例 #1
0
ファイル: slist_queue.c プロジェクト: uukuguy/legolas
void genc_slq_splice_onto_end(slist_queue_t* onto_end_of_queue, slist_queue_t* from_queue)
{
	if (genc_slq_is_empty(from_queue))
		return;
	*onto_end_of_queue->tail = from_queue->head;
	onto_end_of_queue->tail = from_queue->tail;
	from_queue->head = NULL;
	from_queue->tail = &from_queue->head;
}
コード例 #2
0
ファイル: slist_queue-test.c プロジェクト: pmj/genccont
int main()
{
    struct int_list* item = NULL;
    struct slist_queue queue;
    genc_slq_init(&queue);

    assert(queue.head == NULL);
    assert(queue.tail == &queue.head);

    genc_slq_push_back(&queue, &new_int_list(5)->head);
    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item != NULL);
    assert(item->val == 5);
    assert(queue.head == NULL);
    assert(queue.tail == &queue.head);
    free(item);

    genc_slq_push_front(&queue, &new_int_list(5)->head);
    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item != NULL);
    assert(item->val == 5);
    assert(queue.head == NULL);
    assert(queue.tail == &queue.head);
    free(item);

    genc_slq_push_back(&queue, &new_int_list(1)->head);
    genc_slq_push_back(&queue, &new_int_list(2)->head);
    genc_slq_push_back(&queue, &new_int_list(3)->head);
    genc_slq_push_front(&queue, &new_int_list(0)->head);
    genc_slq_push_back(&queue, &new_int_list(4)->head);

    slist_queue_t other_queue;
    genc_slq_init(&other_queue);

    genc_slq_push_back(&other_queue, &new_int_list(6)->head);
    genc_slq_push_back(&other_queue, &new_int_list(7)->head);
    genc_slq_push_front(&other_queue, &new_int_list(5)->head);
    genc_slq_push_back(&other_queue, &new_int_list(8)->head);

    assert(genc_slq_length(&queue) == 5);
    assert(genc_slq_length(&other_queue) == 4);

    genc_slq_splice_onto_end(&queue, &other_queue);

    assert(genc_slq_length(&queue) == 9);
    assert(genc_slq_length(&other_queue) == 0);

    assert(genc_slq_is_empty(&other_queue));

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 0);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 1);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 2);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 3);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 4);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 5);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 6);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 7);
    free(item);

    item = genc_slq_pop_front_object(&queue, struct int_list, head);
    assert(item->val == 8);
    free(item);


    assert(queue.head == NULL);
    assert(queue.tail == &queue.head);

    assert(genc_slq_is_empty(&queue));

    return 0;
}