Allow callbacks wth swapped arguments
This commit is contained in:
parent
53e9a80260
commit
19ab867c64
|
@ -45,8 +45,11 @@
|
|||
/* types */
|
||||
typedef struct _Array Array;
|
||||
|
||||
/* XXX the Swap variants are useless here */
|
||||
typedef bool (*ArrayFilter)(void * value, void * data);
|
||||
typedef bool (*ArrayFilterSwap)(void * data, void * value);
|
||||
typedef void (*ArrayForeach)(void * value, void * data);
|
||||
typedef void (*ArrayForeachSwap)(void * data, void * value);
|
||||
|
||||
|
||||
/* functions */
|
||||
|
@ -66,6 +69,8 @@ int array_append(Array * array, void * value);
|
|||
int array_remove_pos(Array * array, size_t pos);
|
||||
|
||||
void array_filter(Array * array, ArrayFilter func, void * data);
|
||||
void array_filter_swap(Array * array, ArrayFilter func, void * data);
|
||||
void array_foreach(Array * array, ArrayForeachSwap func, void * data);
|
||||
void array_foreach_swap(Array * array, ArrayForeachSwap func, void * data);
|
||||
|
||||
#endif /* !LIBSYSTEM_SYSTEM_ARRAY_H */
|
||||
|
|
29
src/array.c
29
src/array.c
|
@ -187,6 +187,24 @@ void array_filter(Array * array, ArrayFilter func, void * data)
|
|||
}
|
||||
|
||||
|
||||
/* array_filter_swap */
|
||||
void array_filter_swap(Array * array, ArrayFilterSwap func, void * data)
|
||||
{
|
||||
uint32_t i;
|
||||
uint64_t offset;
|
||||
|
||||
for(i = 0, offset = 0; i < array->count;)
|
||||
if(func(data, array->value + offset) == false)
|
||||
/* cannot fail */
|
||||
array_remove_pos(array, i);
|
||||
else
|
||||
{
|
||||
i++;
|
||||
offset += array->size;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* array_foreach */
|
||||
void array_foreach(Array * array, ArrayForeach func, void * data)
|
||||
{
|
||||
|
@ -196,3 +214,14 @@ void array_foreach(Array * array, ArrayForeach func, void * data)
|
|||
for(i = 0, offset = 0; i < array->count; i++, offset += array->size)
|
||||
func(array->value + offset, data);
|
||||
}
|
||||
|
||||
|
||||
/* array_foreach_swap */
|
||||
void array_foreach_swap(Array * array, ArrayForeachSwap func, void * data)
|
||||
{
|
||||
uint32_t i;
|
||||
uint64_t offset;
|
||||
|
||||
for(i = 0, offset = 0; i < array->count; i++, offset += array->size)
|
||||
func(data, array->value + offset);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user