diff options
Diffstat (limited to 'mysys/array.c')
-rw-r--r-- | mysys/array.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/mysys/array.c b/mysys/array.c index cf377f77676..e92c5b45e67 100644 --- a/mysys/array.c +++ b/mysys/array.c @@ -321,7 +321,24 @@ void delete_dynamic_element(DYNAMIC_ARRAY *array, uint idx) (array->elements-idx)*array->size_of_element); } +/* + Wrapper around delete_dynamic, calling a FREE function on every + element, before releasing the memory + SYNOPSIS + delete_dynamic_with_callback() + array + f The function to be called on every element before + deleting the array; +*/ +void delete_dynamic_with_callback(DYNAMIC_ARRAY *array, FREE_FUNC f) { + uint i; + char *ptr= (char*) array->buffer; + for (i= 0; i < array->elements; i++, ptr+= array->size_of_element) { + f(ptr); + } + delete_dynamic(array); +} /* Free unused memory |