From 0e124e4a5d734b60eab61e1c3ad4193f9b6bc847 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net>
Date: Thu, 19 Feb 1998 16:29:24 -0800
Subject: [PATCH] new function: friendly_slice_array

Rev: src/array.c:1.29
Rev: src/array.h:1.10
---
 src/array.c | 21 +++++++++++++++++++++
 src/array.h |  1 +
 2 files changed, 22 insertions(+)

diff --git a/src/array.c b/src/array.c
index b1cf7c100f..4cbf089a8d 100644
--- a/src/array.c
+++ b/src/array.c
@@ -441,6 +441,27 @@ struct array *slice_array(struct array *v,INT32 start,INT32 end)
   return a;
 }
 
+/*
+ * Slice a pice of an array (nondestructively)
+ * return an array consisting of v[start..end-1]
+ */
+struct array *friendly_slice_array(struct array *v,INT32 start,INT32 end)
+{
+  struct array *a;
+
+#ifdef DEBUG
+  if(start > end || end>v->size || start<0)
+    fatal("Illegal arguments to slice_array()\n");
+#endif
+
+  a=allocate_array_no_init(end-start,0);
+  a->type_field = v->type_field;
+
+  assign_svalues_no_free(ITEM(a), ITEM(v)+start, end-start, v->type_field);
+
+  return a;
+}
+
 /*
  * Copy an array
  */
diff --git a/src/array.h b/src/array.h
index a9f69a6a64..107f974954 100644
--- a/src/array.h
+++ b/src/array.h
@@ -76,6 +76,7 @@ struct array *array_shrink(struct array *v,INT32 size);
 struct array *array_remove(struct array *v,INT32 index);
 INT32 array_search(struct array *v, struct svalue *s,INT32 start);
 struct array *slice_array(struct array *v,INT32 start,INT32 end);
+struct array *friendly_slice_array(struct array *v,INT32 start,INT32 end);
 struct array *copy_array(struct array *v);
 void check_array_for_destruct(struct array *v);
 INT32 array_find_destructed_object(struct array *v);
-- 
GitLab