[evolution-data-server] Add e_queue_transfer().



commit 3cf40f58a5bb95a4e249ba353eac90caeec1ff14
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Dec 6 09:11:03 2012 -0500

    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 deletions(-)
---
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,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]