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