2006-08-17 Aaron Bockover <abockover@novell.com>
authorAaron Bockover <abockover@novell.com>
Thu, 17 Aug 2006 22:52:23 +0000 (22:52 -0000)
committerAaron Bockover <abockover@novell.com>
Thu, 17 Aug 2006 22:52:23 +0000 (22:52 -0000)
    * 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

eglib/ChangeLog
eglib/src/gptrarray.c
eglib/test/ptrarray.c

index d90e34f5876c42f3d9a60b1aa2d73a0adba9f574..962e8f84b64ac9f00564f451243705195fd7959c 100644 (file)
@@ -1,3 +1,9 @@
+2006-08-17  Aaron Bockover  <abockover@novell.com>
+
+       * 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  <miguel@novell.com>
 
        * src/glib.h: A handful of extra macros
index 4d9b96f7c5078130086dcf1f30e03ac23de61b4c..7f2aea6818d5213294d82a9a9c60375b9256cb49 100644 (file)
@@ -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)
 {
index 420cd32531744e1121ce7efc6ef245805179d478..370b93b791703da58d17dd9edbd97f6a8e068cb4 100644 (file)
@@ -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}
 };