Add array_{appendall,removeall,appendallu}.

This commit is contained in:
David Given 2016-10-08 00:20:26 +02:00
parent ee93389c5f
commit b7af003dbb
2 changed files with 39 additions and 0 deletions

View 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 : */

View 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