Implement pool_copy_array
authorKaz Wesley <kaz@lambdaverse.org>
Sat, 10 Feb 2018 02:14:06 +0000 (18:14 -0800)
committerJason Self <j@jxself.org>
Sat, 10 Feb 2018 15:50:50 +0000 (07:50 -0800)
Forwards version of pool_copy_array_rev.

Signed-off-by: Kaz Wesley <kaz@lambdaverse.org>
src/alloc.c
src/alloc.h

index 356a038e9f8587311f17398029eefce1b3ffaaaa..ccd96913fbff18e8b8bbd2ee673086a9f692595f 100644 (file)
@@ -42,6 +42,22 @@ POOL_OBJECT (pool_ptr p)
   return &pool[p];
 }
 
+pool_ptr
+pool_copy_array (const pool_object * objs, uint32_t len)
+{
+  if (!len)
+    return 0;
+  pool_ptr p = pool_alloc (len);
+  for (int i = 0; i < len; i++)
+    {
+      pool[p + i] = (pool_object)
+      {
+      .type = objs[i].type,.rest = p + i + 1,.val = objs[i].val};
+    }
+  pool[p + len - 1].rest = 0;
+  return p;
+}
+
 pool_ptr
 pool_copy_array_rev (const pool_object * objs, uint32_t len)
 {
index bd7c46b697f02900505b4a3827af99c56ecb00ae..89e1dab7c83e5a04385589b4f3539201d9681a14 100644 (file)
@@ -44,7 +44,9 @@ heap_alloc_uv (uint32_t len)
 }
 
 // given a headerless array of objects of known size,
-// copy it backwards into newly-allocated pool space
+// copy it into newly-allocated pool space
+pool_ptr pool_copy_array (const pool_object * objs, uint32_t len);
+// same as above, but backwards
 pool_ptr pool_copy_array_rev (const pool_object * objs, uint32_t len);
 heap_ptr heap_copy_array_rev (const object * objs, uint32_t len);