diff --git a/src/array.c b/src/array.c index 633031b02dd6143f80f73b930313260ba9858c8b..b809ee7d284b9c591ca6f6d525ceff5dbfc0fc11 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 6e820bc3d229c39bb7920ad2ecb817fe14049e81..090757a039302a4bb3b6b703f42610950af76d0e 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,