gstpluginfeature: API : new gst_plugin_feature_list_copy() method

This allows copying AND incrementing the refcount at the same time,
avoiding a double iteratio of the GList
This commit is contained in:
Edward Hervey 2009-10-21 09:40:49 +02:00
parent 9e792ee5b8
commit ebee258806
4 changed files with 38 additions and 0 deletions

View 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>

View file

@ -259,6 +259,41 @@ gst_plugin_feature_list_free (GList * list)
g_list_free (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

View 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,

View 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