Browse Source

2006-08-17 Aaron Bockover <[email protected]>

    * src/gptrarray.c: Added g_ptr_array_set_size implementation

    * test/ptrarray.c: Added test for g_ptr_array_set_size


svn path=/trunk/mono/; revision=63951
Aaron Bockover 19 years ago
parent
commit
72fffa940b
3 changed files with 53 additions and 0 deletions
  1. 6 0
      eglib/ChangeLog
  2. 14 0
      eglib/src/gptrarray.c
  3. 33 0
      eglib/test/ptrarray.c

+ 6 - 0
eglib/ChangeLog

@@ -1,3 +1,9 @@
+2006-08-17  Aaron Bockover  <[email protected]>
+
+	* src/gptrarray.c: Added g_ptr_array_set_size implementation
+
+	* test/ptrarray.c: Added test for g_ptr_array_set_size
+
 2006-08-17  Miguel de Icaza  <[email protected]>
 
 	* src/glib.h: A handful of extra macros

+ 14 - 0
eglib/src/gptrarray.c

@@ -99,6 +99,20 @@ g_ptr_array_free(GPtrArray *array, gboolean free_seg)
 	return data;
 }
 
+void
+g_ptr_array_set_size(GPtrArray *array, gint length)
+{
+	g_return_if_fail(array != NULL);
+
+	if(length > array->len) {
+		g_ptr_array_grow((GPtrArrayPriv *)array, length);
+		memset(array->pdata + array->len, 0, (length - array->len) 
+			* sizeof(gpointer));
+	}
+
+	array->len = length;
+}
+
 void
 g_ptr_array_add(GPtrArray *array, gpointer data)
 {

+ 33 - 0
eglib/test/ptrarray.c

@@ -117,10 +117,43 @@ char *ptrarray_foreach_iterate()
 	return foreach_iterate_error;
 }
 
+char *ptrarray_set_size()
+{
+	GPtrArray *array = g_ptr_array_new();
+	gint i, grow_length = 50;
+	
+	g_ptr_array_add(array, (gpointer)items[0]);
+	g_ptr_array_add(array, (gpointer)items[1]);
+	g_ptr_array_set_size(array, grow_length);
+
+	if(array->len != grow_length) {
+		return g_strdup_printf("Array length should be 50, it is %d", 
+			array->len);
+	} else if(array->pdata[0] != items[0]) {
+		return g_strdup_printf("Item 0 was overwritten, should be %s", 
+			items[0]);
+	} else if(array->pdata[1] != items[1]) {
+		return g_strdup_printf("Item 1 was overwritten, should be %s",
+			items[1]);
+	}
+
+	for(i = 2; i < array->len; i++) {
+		if(array->pdata[i] != NULL) {
+			return g_strdup_printf("Item %d is not NULL, it is %p", 
+				i, array->pdata[i]);
+		}
+	}
+
+	g_ptr_array_free(array, TRUE);
+
+	return NULL;
+}
+
 static Test ptrarray_tests [] = {
 	{"ptrarray_alloc", ptrarray_alloc},
 	{"ptrarray_for_iterate", ptrarray_for_iterate},
 	{"ptrarray_foreach_iterate", ptrarray_foreach_iterate},
+	{"ptrarray_set_size", ptrarray_set_size},
 	{NULL, NULL}
 };