From 49225bea73c0f498ea8bb8356352bc3fdece4d85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Tue, 6 May 2014 11:11:13 +0200 Subject: [PATCH] Runtime: Added clear_array(). --- src/array.c | 12 ++++++++++++ src/array.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/array.c b/src/array.c index 633031b02d..b809ee7d28 100644 --- a/src/array.c +++ b/src/array.c @@ -175,6 +175,18 @@ PMOD_EXPORT void do_free_array(struct array *a) free_array(a); } +/** + * Free all elements in an array and set them to zero. + */ +PMOD_EXPORT void clear_array(struct array *a) +{ + if (!a->size) return; + free_svalues(ITEM(a), a->size, a->type_field); + /* NB: We know that INT_T == 0. */ + MEMSET(ITEM(a), 0, a->size * sizeof(struct svalue)); + a->type_field = BIT_INT; +} + /** * Set the flags on an array. If the array is empty then only the * weak flag is significant. diff --git a/src/array.h b/src/array.h index 6e820bc3d2..090757a039 100644 --- a/src/array.h +++ b/src/array.h @@ -112,6 +112,7 @@ typedef short_cmpfun (*cmpfun_getter)(TYPE_T); PMOD_EXPORT struct array *real_allocate_array(ptrdiff_t size, ptrdiff_t extra_space); PMOD_EXPORT void really_free_array(struct array *v); PMOD_EXPORT void do_free_array(struct array *a); +PMOD_EXPORT void clear_array(struct array *a); PMOD_EXPORT struct array *array_set_flags(struct array *a, int flags); PMOD_EXPORT void array_index(struct svalue *s,struct array *v,INT32 ind); PMOD_EXPORT struct array *array_column (struct array *data, struct svalue *index, -- GitLab