Add two remove functions to the generic object list

This commit is contained in:
Richard Hughes 2008-09-04 14:29:31 +01:00
parent 4fb995f784
commit 73d5bcb4c0
2 changed files with 61 additions and 2 deletions

View file

@ -190,6 +190,61 @@ egg_obj_list_add (EggObjList *list, const gpointer obj)
list->len = list->priv->array->len;
}
/**
* egg_obj_list_remove:
* @list: a valid #EggObjList instance
* @obj: a valid #gpointer object
*
* Return value: TRUE is we removed something
*
* Removes an item from a list
**/
gboolean
egg_obj_list_remove (EggObjList *list, const gpointer obj)
{
gboolean ret;
gpointer obj_new;
g_return_val_if_fail (EGG_IS_OBJ_LIST (list), FALSE);
g_return_val_if_fail (obj != NULL, FALSE);
g_return_val_if_fail (list->priv->func_free != NULL, FALSE);
/* the pointers point to the same thing */
obj_new = (gpointer) obj;
ret = g_ptr_array_remove (list->priv->array, obj_new);
if (!ret)
return FALSE;
list->priv->func_free (obj_new);
list->len = list->priv->array->len;
return TRUE;
}
/**
* egg_obj_list_remove_index:
* @list: a valid #EggObjList instance
* @index: the number to remove
*
* Return value: TRUE is we removed something
*
* Removes an item from a list
**/
gboolean
egg_obj_list_remove_index (EggObjList *list, guint index)
{
gpointer obj;
g_return_val_if_fail (EGG_IS_OBJ_LIST (list), FALSE);
g_return_val_if_fail (list->priv->func_free != NULL, FALSE);
/* get the object */
obj = g_ptr_array_remove_index (list->priv->array, index);
if (obj == NULL)
return FALSE;
list->priv->func_free (obj);
list->len = list->priv->array->len;
return TRUE;
}
/**
* egg_obj_list_to_file:
* @list: a valid #EggObjList instance
@ -324,7 +379,7 @@ out:
* Gets an object from the list
**/
const gpointer
egg_obj_list_index (EggObjList *list, guint index)
egg_obj_list_index (const EggObjList *list, guint index)
{
gpointer obj;

View file

@ -74,7 +74,11 @@ gboolean egg_obj_list_from_file (EggObjList *list,
const gchar *filename);
void egg_obj_list_add (EggObjList *list,
const gpointer data);
const gpointer egg_obj_list_index (EggObjList *list,
gboolean egg_obj_list_remove (EggObjList *list,
const gpointer data);
gboolean egg_obj_list_remove_index (EggObjList *list,
guint index);
const gpointer egg_obj_list_index (const EggObjList *list,
guint index);
G_END_DECLS