x_list_t* x_list_insert (x_list_t *list, void *data, int position) { x_list_t *new_list; x_list_t *tmp_list; if (position < 0) { return x_list_append (list, data); } else if (position == 0) { return x_list_prepend (list, data); } tmp_list = x_list_nth (list, position); if (!tmp_list) return x_list_append (list, data); new_list = _x_list_alloc (); new_list->data = data; if (tmp_list->prev) { tmp_list->prev->next = new_list; new_list->prev = tmp_list->prev; } new_list->next = tmp_list; tmp_list->prev = new_list; if (tmp_list == list) { return new_list; } else { return list; } }
void x_queue_push_tail (x_queue_t *queue, void *data) { x_return_if_fail (queue); queue->tail = x_list_append (queue->tail, data); if (queue->tail->next) queue->tail = queue->tail->next; else queue->head = queue->tail; queue->length++; }