Add array_{appendall,removeall,appendallu}.
authorDavid Given <dg@cowlark.com>
Fri, 7 Oct 2016 22:20:26 +0000 (00:20 +0200)
committerDavid Given <dg@cowlark.com>
Fri, 7 Oct 2016 22:20:26 +0000 (00:20 +0200)
modules/src/data/array.c
modules/src/data/array.h

index 13c0b6c..2847bbd 100644 (file)
@@ -90,5 +90,38 @@ void* array_pop(void* arrayp)
     return array->item[array->count--];
 }
 
+void array_appendall(void* arrayp, void* srcp)
+{
+    struct array* array = arrayp;
+    struct array* src = srcp;
+    int i;
+
+    for (i=0; i<src->count; i++)
+        array_append(array, src->item[i]);
+}
+
+void array_removeall(void* arrayp, void* srcp)
+{
+    struct array* array = arrayp;
+    struct array* src = srcp;
+    int i;
+
+    for (i=0; i<src->count; i++)
+        array_remove(array, src->item[i]);
+}
+
+bool array_appendallu(void* arrayp, void* srcp)
+{
+    struct array* array = arrayp;
+    struct array* src = srcp;
+    bool unchanged = true;
+    int i;
+
+    for (i=0; i<src->count; i++)
+        unchanged &= array_appendu(array, src->item[i]);
+
+    return unchanged;
+}
+
 /* vim: set sw=4 ts=4 expandtab : */
 
index 8762d7e..6ec4975 100644 (file)
@@ -27,5 +27,11 @@ extern int array_indexof(void* array, void* value);
 #define array_push(a, v) array_append(a, v)
 extern void* array_pop(void* array);
 
+extern void array_appendall(void* dest, void* src);
+extern void array_removeall(void* dest, void* src);
+
+/* Returns false if *any* items were added. */
+extern bool array_appendallu(void* dest, void* src);
+
 #endif