mirror of
https://github.com/strongswan/strongswan.git
synced 2025-10-08 00:02:03 -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);
|
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 array_insert_enumerator(array_t *array, int idx, enumerator_t *enumerator)
|
||||||
{
|
{
|
||||||
void *ptr;
|
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);
|
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.
|
* Insert all items from an enumerator to an array.
|
||||||
*
|
*
|
||||||
|
@ -491,6 +491,44 @@ START_TEST(test_invoke_offset)
|
|||||||
}
|
}
|
||||||
END_TEST
|
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 *array_suite_create()
|
||||||
{
|
{
|
||||||
Suite *s;
|
Suite *s;
|
||||||
@ -528,5 +566,10 @@ Suite *array_suite_create()
|
|||||||
tcase_add_test(tc, test_invoke_offset);
|
tcase_add_test(tc, test_invoke_offset);
|
||||||
suite_add_tcase(s, tc);
|
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;
|
return s;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user