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; }
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; }