]> Nishi Git Mirror - gwion.git/commitdiff
:art: Few updates
authorJérémie Astor <fennecdjay@gmail.com>
Tue, 26 Jan 2021 19:11:28 +0000 (20:11 +0100)
committerJérémie Astor <fennecdjay@gmail.com>
Tue, 26 Jan 2021 19:11:28 +0000 (20:11 +0100)
include/object.h
src/lib/array.c

index af7043e23cc44309ff90dd2c080e1f269dd8aa9c..04c975ee0e5bce03fcaa1d8dfcd8b70aea020ccf 100644 (file)
@@ -25,7 +25,7 @@ ANN void broadcast(const M_Object);
 
 #define STRING(o)    (*(m_str*)    ((M_Object)o)->data)
 #define ME(o)        (*(VM_Shred*) ((M_Object)o)->data)
-#define EV_SHREDS(o) (*(Vector*)   ((M_Object)o)->data)
+#define EV_SHREDS(o) (*(struct Vector_*)  ((M_Object)o)->data)
 #define UGEN(o)      (*(UGen*)     ((M_Object)o)->data)
 #define ARRAY(o)     (*(M_Vector*) ((M_Object)o)->data)
 #define IO_FILE(o)   (*(FILE**)    (((M_Object)o)->data + SZ_INT))
index f0d0d124f2ba7dc1b8d87397521da4986ecbb5d0..1bba21a0754feb40eb63de685fc20ae0c4b2afe4 100644 (file)
@@ -97,6 +97,16 @@ ANN void m_vector_rem(const M_Vector v, m_uint index) {
   }
 }
 
+ANN void m_vector_insert(const M_Vector v, m_uint index, const void* data) {
+  const size_t size = ARRAY_SIZE(v);
+  if(++ARRAY_LEN(v) >= ARRAY_CAP(v)) {
+    const m_uint cap = ARRAY_CAP(v) *=2;
+    v->ptr = (m_bit*)xrealloc(v->ptr, ARRAY_OFFSET + cap * size);
+  }
+  memmove(ARRAY_PTR(v) + (index+1) * size, ARRAY_PTR(v) + index*size, (ARRAY_LEN(v) - index + 1)* size);
+  memcpy(ARRAY_PTR(v) + index*size, data, size);
+}
+
 static MFUN(vm_vector_rem) {
   const m_int index = *(m_int*)(shred->mem + SZ_INT);
   const M_Vector v = ARRAY(o);
@@ -129,13 +139,7 @@ static MFUN(vm_vector_insert) {
   const M_Vector v = ARRAY(o);
   if(index < 0 || (m_uint)index > ARRAY_LEN(v))
     return;
-  const size_t size = ARRAY_SIZE(v);
-  if(++ARRAY_LEN(v) >= ARRAY_CAP(v)) {
-    const m_uint cap = ARRAY_CAP(v) *=2;
-    v->ptr = (m_bit*)xrealloc(v->ptr, ARRAY_OFFSET + cap * size);
-  }
-  memmove(ARRAY_PTR(v) + (index+1) * size, ARRAY_PTR(v) + index*size, (ARRAY_LEN(v) - index + 1)* size);
-  memcpy(ARRAY_PTR(v) + index*size, shred->mem + SZ_INT*2, size);
+  m_vector_insert(v, index, shred->mem + SZ_INT*2);
 }
 
 static MFUN(vm_vector_insert_obj) {
@@ -143,13 +147,7 @@ static MFUN(vm_vector_insert_obj) {
   const M_Vector v = ARRAY(o);
   if(index < 0 || (m_uint)index > ARRAY_LEN(v))
     return;
-  const size_t size = SZ_INT;
-  if(++ARRAY_LEN(v) >= ARRAY_CAP(v)) {
-    const m_uint cap = ARRAY_CAP(v) *=2;
-    v->ptr = (m_bit*)xrealloc(v->ptr, ARRAY_OFFSET + cap * size);
-  }
-  memmove(ARRAY_PTR(v) + (index+1) *size, ARRAY_PTR(v) + index*size, (ARRAY_LEN(v) - index + 1)* size);
-  memcpy(ARRAY_PTR(v) + index*size, shred->mem + SZ_INT*2, size);
+  m_vector_insert(v, index, shred->mem + SZ_INT*2);
   ++(*(M_Object*)(shred->mem + SZ_INT*2))->ref;
 }
 
@@ -158,13 +156,7 @@ static MFUN(vm_vector_insert_struct) {
   const M_Vector v = ARRAY(o);
   if(index < 0 || (m_uint)index > ARRAY_LEN(v))
     return;
-  const size_t size = ARRAY_SIZE(v);
-  if(++ARRAY_LEN(v) >= ARRAY_CAP(v)) {
-    const m_uint cap = ARRAY_CAP(v) *=2;
-    v->ptr = (m_bit*)xrealloc(v->ptr, ARRAY_OFFSET + cap * size);
-  }
-  memmove(ARRAY_PTR(v) + (index+1) *size, ARRAY_PTR(v) + index*size, (ARRAY_LEN(v) - index + 1)* size);
-  memcpy(ARRAY_PTR(v) + index*size, shred->mem + SZ_INT*2, size);
+  m_vector_insert(v, index, shred->mem + SZ_INT*2);
   struct_addref(shred->info->vm->gwion, array_base(o->type_ref),  shred->mem + SZ_INT*2);
 }