diff options
author | Sebastian Wilhelmi <wilhelmi@ira.uka.de> | 2000-04-17 10:59:46 +0000 |
---|---|---|
committer | Sebastian Wilhelmi <wilhelmi@src.gnome.org> | 2000-04-17 10:59:46 +0000 |
commit | 03f9d485c1435c342c936a26626dda440c1911b9 (patch) | |
tree | 37f094e36c9eb27e31bac444606115b14d6ae7d9 /garray.c | |
parent | 8f02fac4ad1e846f3075ae8b057b387e6365c0ca (diff) | |
download | glib-03f9d485c1435c342c936a26626dda440c1911b9.tar.gz |
Added g_(array|ptr_array|byte_array)_sized_new functions, that reserve a
2000-04-17 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* garray.c, glib.h: Added g_(array|ptr_array|byte_array)_sized_new
functions, that reserve a certain amount of memeory for the array
at creation time to avoid reallocation. Fixes bug #6707 from
Charles Kerr <ckerr@osserver1.nssl.noaa.gov>.
Diffstat (limited to 'garray.c')
-rw-r--r-- | garray.c | 32 |
1 files changed, 27 insertions, 5 deletions
@@ -67,6 +67,14 @@ g_array_new (gboolean zero_terminated, gboolean clear, guint elt_size) { + return (GArray*) g_array_sized_new (zero_terminated, clear, elt_size, 0); +} + +GArray* g_array_sized_new (gboolean zero_terminated, + gboolean clear, + guint elt_size, + guint reserved_size) +{ GRealArray *array; G_LOCK (array_mem_chunk); @@ -85,10 +93,10 @@ g_array_new (gboolean zero_terminated, array->clear = (clear ? 1 : 0); array->elt_size = elt_size; - if (array->zero_terminated) + if (array->zero_terminated || reserved_size != 0) { - g_array_maybe_expand (array, 0); - g_array_elt_zero (array, 0, 1); + g_array_maybe_expand (array, reserved_size); + g_array_zero_terminate(array); } return (GArray*) array; @@ -283,6 +291,12 @@ G_LOCK_DEFINE_STATIC (ptr_array_mem_chunk); GPtrArray* g_ptr_array_new (void) { + return g_ptr_array_sized_new (0); +} + +GPtrArray* +g_ptr_array_sized_new (guint reserved_size) +{ GRealPtrArray *array; G_LOCK (ptr_array_mem_chunk); @@ -298,7 +312,10 @@ g_ptr_array_new (void) array->len = 0; array->alloc = 0; - return (GPtrArray*) array; + if (reserved_size != 0) + g_ptr_array_maybe_expand (array, reserved_size); + + return (GPtrArray*) array; } void @@ -455,7 +472,12 @@ g_ptr_array_add (GPtrArray* farray, GByteArray* g_byte_array_new (void) { - return (GByteArray*) g_array_new (FALSE, FALSE, 1); + return (GByteArray*) g_array_sized_new (FALSE, FALSE, 1, 0); +} + +GByteArray* g_byte_array_sized_new (guint reserved_size) +{ + return (GByteArray*) g_array_sized_new (FALSE, FALSE, 1, reserved_size); } void g_byte_array_free (GByteArray *array, |