gstpluginfeature: API : new gst_plugin_feature_list_copy() method
authorEdward Hervey <bilboed@bilboed.com>
Wed, 21 Oct 2009 07:40:49 +0000 (09:40 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Sat, 24 Oct 2009 08:39:30 +0000 (10:39 +0200)
This allows copying AND incrementing the refcount at the same time,
avoiding a double iteratio of the GList

docs/gst/gstreamer-sections.txt
gst/gstpluginfeature.c
gst/gstpluginfeature.h
win32/common/libgstreamer.def

index 59a3de2..8dec231 100644 (file)
@@ -1787,6 +1787,7 @@ gst_plugin_feature_set_name
 gst_plugin_feature_get_rank
 gst_plugin_feature_get_name
 gst_plugin_feature_load
+gst_plugin_feature_list_copy
 gst_plugin_feature_list_free
 gst_plugin_feature_check_version
 <SUBSECTION Standard>
index 4b193ca..ebce972 100644 (file)
@@ -260,6 +260,41 @@ gst_plugin_feature_list_free (GList * list)
 }
 
 /**
+ * gst_plugin_feature_list_copy:
+ * @list: list of #GstPluginFeature
+ *
+ * Copies the list of features. Caller should call @gst_plugin_feature_list_free
+ * when done with the list.
+ *
+ * Returns: a copy of @list, with each feature's reference count incremented.
+ */
+GList *
+gst_plugin_feature_list_copy (GList * list)
+{
+  GList *new_list = NULL;
+
+  if (G_LIKELY (list)) {
+    GList *last;
+
+    new_list = g_list_alloc ();
+    new_list->data = g_object_ref ((GObject *) list->data);
+    new_list->prev = NULL;
+    last = new_list;
+    list = list->next;
+    while (list) {
+      last->next = g_list_alloc ();
+      last->next->prev = last;
+      last = last->next;
+      last->data = g_object_ref ((GObject *) list->data);
+      list = list->next;
+    }
+    last->next = NULL;
+  }
+
+  return new_list;
+}
+
+/**
  * gst_plugin_feature_check_version:
  * @feature: a feature
  * @min_major: minimum required major version
index a0a732d..ee1a6ce 100644 (file)
@@ -137,6 +137,7 @@ guint           gst_plugin_feature_get_rank             (GstPluginFeature *featu
 G_CONST_RETURN gchar *gst_plugin_feature_get_name       (GstPluginFeature *feature);
 
 void            gst_plugin_feature_list_free            (GList *list);
+GList          *gst_plugin_feature_list_copy            (GList *list);
 
 gboolean        gst_plugin_feature_check_version        (GstPluginFeature *feature,
                                                          guint             min_major,
index bc3ad3e..fc88756 100644 (file)
@@ -711,6 +711,7 @@ EXPORTS
        gst_plugin_feature_get_name
        gst_plugin_feature_get_rank
        gst_plugin_feature_get_type
+       gst_plugin_feature_list_copy
        gst_plugin_feature_list_free
        gst_plugin_feature_load
        gst_plugin_feature_set_name