/** 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); } }
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; }