*
* Author:
* Aaron Bockover (abockover@novell.com)
+ * Gonzalo Paniagua Javier (gonzalo@novell.com)
+ * Jeffrey Stedfast (fejj@novell.com)
*
- * (C) 2006 Novell, Inc.
+ * (C) 2006,2011 Novell, Inc.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-#define _GNU_SOURCE
#include <stdlib.h>
#include <glib.h>
static void
g_ptr_array_grow(GPtrArrayPriv *array, guint length)
{
- gint new_length = array->len + length;
+ guint new_length = array->len + length;
g_return_if_fail(array != NULL);
}
GPtrArray *
-g_ptr_array_new()
+g_ptr_array_new(void)
{
return g_ptr_array_sized_new(0);
}
{
g_return_if_fail(array != NULL);
- if(length > array->len) {
+ if((size_t)length > array->len) {
g_ptr_array_grow((GPtrArrayPriv *)array, length);
memset(array->pdata + array->len, 0, (length - array->len)
* sizeof(gpointer));
gpointer removed_node;
g_return_val_if_fail(array != NULL, NULL);
- g_return_val_if_fail(index >= 0 || index < array->len, NULL);
+ g_return_val_if_fail(index < array->len, NULL);
removed_node = array->pdata[index];
return removed_node;
}
+gpointer
+g_ptr_array_remove_index_fast(GPtrArray *array, guint index)
+{
+ gpointer removed_node;
+
+ g_return_val_if_fail(array != NULL, NULL);
+ g_return_val_if_fail(index < array->len, NULL);
+
+ removed_node = array->pdata[index];
+
+ if(index != array->len - 1) {
+ g_memmove(array->pdata + index, array->pdata + array->len - 1,
+ sizeof(gpointer));
+ }
+
+ array->len--;
+ array->pdata[array->len] = NULL;
+
+ return removed_node;
+}
+
gboolean
g_ptr_array_remove(GPtrArray *array, gpointer data)
{
return FALSE;
}
+gboolean
+g_ptr_array_remove_fast(GPtrArray *array, gpointer data)
+{
+ guint i;
+
+ g_return_val_if_fail(array != NULL, FALSE);
+
+ for(i = 0; i < array->len; i++) {
+ if(array->pdata[i] == data) {
+ array->len--;
+ if (array->len > 0)
+ array->pdata [i] = array->pdata [array->len];
+ else
+ array->pdata [i] = NULL;
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
void
g_ptr_array_foreach(GPtrArray *array, GFunc func, gpointer user_data)
{
- gint i;
+ guint i;
for(i = 0; i < array->len; i++) {
func(g_ptr_array_index(array, i), user_data);
}
void
-g_ptr_array_sort(GPtrArray *array, GCompareFunc compare_func)
+g_ptr_array_sort(GPtrArray *array, GCompareFunc compare)
{
g_return_if_fail(array != NULL);
- qsort(array->pdata, array->len, sizeof(gpointer), compare_func);
+ qsort(array->pdata, array->len, sizeof(gpointer), compare);
}
void
-g_ptr_array_sort_with_data(GPtrArray *array, GCompareDataFunc compare_func,
- gpointer user_data)
+g_ptr_array_sort_with_data (GPtrArray *array, GCompareDataFunc compare, gpointer user_data)
{
+ g_return_if_fail (array != NULL);
+
+ g_qsort_with_data (array->pdata, array->len, sizeof (gpointer), compare, user_data);
}
-