mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-07 00:01:49 -04:00
array: Add an insert/create function for value based arrays
This commit is contained in:
parent
f3b2d4a9d8
commit
01caed533b
@ -277,6 +277,16 @@ void array_insert_create(array_t **array, int idx, void *ptr)
|
||||
array_insert(*array, idx, ptr);
|
||||
}
|
||||
|
||||
void array_insert_create_value(array_t **array, u_int esize,
|
||||
int idx, void *val)
|
||||
{
|
||||
if (*array == NULL)
|
||||
{
|
||||
*array = array_create(esize, 0);
|
||||
}
|
||||
array_insert(*array, idx, val);
|
||||
}
|
||||
|
||||
void array_insert_enumerator(array_t *array, int idx, enumerator_t *enumerator)
|
||||
{
|
||||
void *ptr;
|
||||
|
@ -138,6 +138,21 @@ void array_insert(array_t *array, int idx, void *data);
|
||||
*/
|
||||
void array_insert_create(array_t **array, int idx, void *ptr);
|
||||
|
||||
/**
|
||||
* Create a value based array if it does not exist, insert value.
|
||||
*
|
||||
* This is a convenience function to insert a value and implicitly
|
||||
* create a value based array if array is NULL. Array is set the the newly
|
||||
* created array, if any.
|
||||
*
|
||||
* @param array pointer to array reference, potentially NULL
|
||||
* @param esize element size of this array
|
||||
* @param idx index to insert item at
|
||||
* @param val pointer to value to insert
|
||||
*/
|
||||
void array_insert_create_value(array_t **array, u_int esize,
|
||||
int idx, void *val);
|
||||
|
||||
/**
|
||||
* Insert all items from an enumerator to an array.
|
||||
*
|
||||
|
@ -491,6 +491,44 @@ START_TEST(test_invoke_offset)
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_insert_create)
|
||||
{
|
||||
array_t *array = NULL;
|
||||
uintptr_t x;
|
||||
|
||||
array_insert_create(&array, ARRAY_TAIL, (void*)(uintptr_t)1);
|
||||
array_insert_create(&array, ARRAY_TAIL, (void*)(uintptr_t)2);
|
||||
ck_assert(array != NULL);
|
||||
|
||||
ck_assert(array_get(array, ARRAY_HEAD, &x));
|
||||
ck_assert_int_eq(x, 1);
|
||||
ck_assert(array_get(array, ARRAY_TAIL, &x));
|
||||
ck_assert_int_eq(x, 2);
|
||||
|
||||
array_destroy(array);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(test_insert_create_value)
|
||||
{
|
||||
array_t *array = NULL;
|
||||
u_int16_t v;
|
||||
|
||||
v = 1;
|
||||
array_insert_create_value(&array, sizeof(v), ARRAY_TAIL, &v);
|
||||
v = 2;
|
||||
array_insert_create_value(&array, sizeof(v), ARRAY_TAIL, &v);
|
||||
ck_assert(array != NULL);
|
||||
|
||||
ck_assert(array_get(array, ARRAY_HEAD, &v));
|
||||
ck_assert_int_eq(v, 1);
|
||||
ck_assert(array_get(array, ARRAY_TAIL, &v));
|
||||
ck_assert_int_eq(v, 2);
|
||||
|
||||
array_destroy(array);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
Suite *array_suite_create()
|
||||
{
|
||||
Suite *s;
|
||||
@ -528,5 +566,10 @@ Suite *array_suite_create()
|
||||
tcase_add_test(tc, test_invoke_offset);
|
||||
suite_add_tcase(s, tc);
|
||||
|
||||
tc = tcase_create("insert create");
|
||||
tcase_add_test(tc, test_insert_create);
|
||||
tcase_add_test(tc, test_insert_create_value);
|
||||
suite_add_tcase(s, tc);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user