From 0182920ca9c09f598710f6ab8310be8b884ebd7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20H=C3=BCbinette=20=28Hubbe=29?= <hubbe@hubbe.net> Date: Mon, 6 Oct 1997 00:51:06 -0700 Subject: [PATCH] explode optimized Rev: src/array.c:1.16 --- src/array.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/src/array.c b/src/array.c index 202c61c614..82974c72d3 100644 --- a/src/array.c +++ b/src/array.c @@ -1268,21 +1268,34 @@ struct array *explode(struct pike_string *str, s=str->str; end=s+str->len; - e=0; + + ret=allocate_array(10); + ret->size=0; init_memsearch(&searcher, del->str, del->len, str->len); while((tmp=memory_search(&searcher, s, end-s))) { - check_stack(1); - push_string(make_shared_binary_string(s, tmp-s)); + if(ret->size == ret->malloced_size) + { + e=ret->size; + ret=resize_array(ret, ret->size * 2); + ret->size=0; + } + + ITEM(ret)[ret->size].u.string=make_shared_binary_string(s, tmp-s); + ITEM(ret)[ret->size].type=T_STRING; + ret->size++; + s=tmp+del->len; - e++; } - check_stack(1); - push_string(make_shared_binary_string(s, end-s)); - e++; - ret=aggregate_array(e); + + if(ret->size == ret->malloced_size) + ret=resize_array(ret, ret->size * 2); + + ITEM(ret)[ret->size].u.string=make_shared_binary_string(s, end-s); + ITEM(ret)[ret->size].type=T_STRING; + ret->size++; } ret->type_field=BIT_STRING; return ret; -- GitLab