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