diff runtime/array.c @ 110:336da6ce8174

Merge
author Mike Pavone <pavone@retrodev.com>
date Wed, 06 Oct 2010 23:48:32 +0000
parents 439db471f595
children 72c648bca43b
line wrap: on
line diff
--- a/runtime/array.c	Wed Oct 06 23:47:26 2010 +0000
+++ b/runtime/array.c	Wed Oct 06 23:48:32 2010 +0000
@@ -18,6 +18,23 @@
 	release_ref(val);
 }
 
+void _internal_array_copychunk(object * src, int32_t srcidx, object * dest, int32_t destidx, int32_t len)
+{
+	int32_t idx;
+	object * cur;
+	t_Array *sarr,*darr;
+	sarr = (t_Array *)src;
+	darr = (t_Array *)dest;
+	memcpy((char *)(darr+1) + darr->payload.Eltype->bp->size * destidx, (char *)(sarr+1) + sarr->payload.Eltype->bp->size * srcidx, len*sarr->payload.Eltype->bp->size);
+	cur = (object *)((char *)(darr+1) + darr->payload.Eltype->bp->size * destidx - sizeof(object));
+	for (idx = 0; idx < len; ++idx)
+	{
+		darr->payload.Eltype->bp->copy(cur);
+		cur++;
+	}
+	release_ref(src);
+}
+
 object * _internal_array_getboxed(object * array, int32_t index)
 {
 	object * ret;