Exemple #1
0
/** Inserts the given at the front of the queue. */
void genc_slq_push_front(struct slist_queue* queue, struct slist_head* new_item)
{
	if (!queue->head)
	{
		/* adding to front of empty queue is identical to adding to its back (tail needs updating) */
		genc_slq_push_back(queue, new_item);
	}
	else
	{
		genc_slist_insert_at(new_item, &queue->head);
	}
}
Exemple #2
0
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;
}