From 3cf40f58a5bb95a4e249ba353eac90caeec1ff14 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Thu, 6 Dec 2012 09:11:03 -0500 Subject: [PATCH] Add e_queue_transfer(). Transfers the contents of one GQueue on to the tail of another GQueue. Mostly because I'm tired of writing "while" loops, and this does it more efficiently anyway. --- .../libedataserver/libedataserver-sections.txt | 1 + libedataserver/e-data-server-util.c | 26 ++++++++++++++++++++++ libedataserver/e-data-server-util.h | 5 ++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/reference/libedataserver/libedataserver-sections.txt b/docs/reference/libedataserver/libedataserver-sections.txt index b39afd5..dc2e1e4 100644 --- a/docs/reference/libedataserver/libedataserver-sections.txt +++ b/docs/reference/libedataserver/libedataserver-sections.txt @@ -1143,6 +1143,7 @@ e_util_copy_object_slist e_util_free_string_slist e_util_free_object_slist e_util_free_nullable_object_slist +e_queue_transfer e_file_recursive_delete_sync e_file_recursive_delete e_file_recursive_delete_finish diff --git a/libedataserver/e-data-server-util.c b/libedataserver/e-data-server-util.c index ab252b5..06508ca 100644 --- a/libedataserver/e-data-server-util.c +++ b/libedataserver/e-data-server-util.c @@ -1044,6 +1044,32 @@ e_util_free_nullable_object_slist (GSList *objects) g_slist_free (objects); } +/** + * e_queue_transfer: + * @src_queue: a source #GQueue + * @dst_queue: a destination #GQueue + * + * Transfers the contents of @src_queue to the tail of @dst_queue. + * When the operation is complete, @src_queue will be empty. + * + * Since: 3.8 + **/ +void +e_queue_transfer (GQueue *src_queue, + GQueue *dst_queue) +{ + g_return_if_fail (src_queue != NULL); + g_return_if_fail (dst_queue != NULL); + + dst_queue->head = g_list_concat (dst_queue->head, src_queue->head); + dst_queue->tail = g_list_last (dst_queue->head); + dst_queue->length += src_queue->length; + + src_queue->head = NULL; + src_queue->tail = NULL; + src_queue->length = 0; +} + /* Helper for e_file_recursive_delete() */ static void file_recursive_delete_thread (GSimpleAsyncResult *simple, diff --git a/libedataserver/e-data-server-util.h b/libedataserver/e-data-server-util.h index 2687e6e..ab33083 100644 --- a/libedataserver/e-data-server-util.h +++ b/libedataserver/e-data-server-util.h @@ -77,7 +77,10 @@ GSList * e_util_copy_string_slist (GSList *copy_to, const GSList *strings); GSList * e_util_copy_object_slist (GSList *copy_to, const GSList *objects); void e_util_free_string_slist (GSList *strings); void e_util_free_object_slist (GSList *objects); -void e_util_free_nullable_object_slist (GSList *objects); +void e_util_free_nullable_object_slist + (GSList *objects); +void e_queue_transfer (GQueue *src_queue, + GQueue *dst_queue); gboolean e_file_recursive_delete_sync (GFile *file, GCancellable *cancellable, -- 2.7.4