Add uc_strv_reverse
This commit is contained in:
@@ -101,6 +101,11 @@ void uc_strv_destroy(struct UCStrv *strv);
|
|||||||
*/
|
*/
|
||||||
int uc_strv_append_all(struct UCStrv *restrict a, struct UCStrv *restrict b, int copy);
|
int uc_strv_append_all(struct UCStrv *restrict a, struct UCStrv *restrict b, int copy);
|
||||||
|
|
||||||
|
/** Reverse the order of strings in a UCStrv
|
||||||
|
*
|
||||||
|
* @param strv strv to reverse.
|
||||||
|
*/
|
||||||
|
void uc_strv_reverse(struct UCStrv *strv);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -130,3 +130,14 @@ int uc_strv_append_all(struct UCStrv *restrict a, struct UCStrv *restrict b, int
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void uc_strv_reverse(struct UCStrv *strv)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < strv->cnt / 2; i++) {
|
||||||
|
|
||||||
|
size_t k = strv->cnt - i - 1;
|
||||||
|
char *tmp = strv->strings[i];
|
||||||
|
|
||||||
|
strv->strings[i] = strv->strings[k];
|
||||||
|
strv->strings[k] = tmp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -123,6 +123,44 @@ START_TEST (test_strv_append_all_nocopy)
|
|||||||
|
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
START_TEST (test_strv_reverse)
|
||||||
|
struct UCStrv strv;
|
||||||
|
|
||||||
|
uc_strv_init(&strv);
|
||||||
|
|
||||||
|
uc_strv_append(&strv, "string1");
|
||||||
|
|
||||||
|
uc_strv_reverse(&strv);
|
||||||
|
ck_assert_str_eq("string1", strv.strings[0]);
|
||||||
|
|
||||||
|
uc_strv_destroy(&strv);
|
||||||
|
|
||||||
|
uc_strv_init(&strv);
|
||||||
|
|
||||||
|
uc_strv_append(&strv, "string1");
|
||||||
|
uc_strv_append(&strv, "string2");
|
||||||
|
|
||||||
|
uc_strv_reverse(&strv);
|
||||||
|
ck_assert_str_eq("string2", strv.strings[0]);
|
||||||
|
ck_assert_str_eq("string1", strv.strings[1]);
|
||||||
|
|
||||||
|
uc_strv_destroy(&strv);
|
||||||
|
|
||||||
|
uc_strv_init(&strv);
|
||||||
|
|
||||||
|
uc_strv_append(&strv, "string1");
|
||||||
|
uc_strv_append(&strv, "string2");
|
||||||
|
uc_strv_append(&strv, "string3");
|
||||||
|
|
||||||
|
uc_strv_reverse(&strv);
|
||||||
|
ck_assert_str_eq("string3", strv.strings[0]);
|
||||||
|
ck_assert_str_eq("string2", strv.strings[1]);
|
||||||
|
ck_assert_str_eq("string1", strv.strings[2]);
|
||||||
|
|
||||||
|
uc_strv_destroy(&strv);
|
||||||
|
|
||||||
|
|
||||||
|
END_TEST
|
||||||
|
|
||||||
Suite *strv_suite(void)
|
Suite *strv_suite(void)
|
||||||
{
|
{
|
||||||
@@ -135,6 +173,7 @@ Suite *strv_suite(void)
|
|||||||
tcase_add_test(tc, test_strv_null_terminate);
|
tcase_add_test(tc, test_strv_null_terminate);
|
||||||
tcase_add_test(tc, test_strv_append_all_copy);
|
tcase_add_test(tc, test_strv_append_all_copy);
|
||||||
tcase_add_test(tc, test_strv_append_all_nocopy);
|
tcase_add_test(tc, test_strv_append_all_nocopy);
|
||||||
|
tcase_add_test(tc, test_strv_reverse);
|
||||||
|
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user