Add e_queue_transfer().
authorMatthew Barnes <mbarnes@redhat.com>
Thu, 6 Dec 2012 14:11:03 +0000 (09:11 -0500)
committerMatthew Barnes <mbarnes@redhat.com>
Thu, 6 Dec 2012 14:14:31 +0000 (09:14 -0500)
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.

docs/reference/libedataserver/libedataserver-sections.txt
libedataserver/e-data-server-util.c
libedataserver/e-data-server-util.h

index b39afd5..dc2e1e4 100644 (file)
@@ -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
index ab252b5..06508ca 100644 (file)
@@ -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,
index 2687e6e..ab33083 100644 (file)
@@ -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,