partial-match iterate

This commit is contained in:
John Kerl 2015-10-26 08:57:27 -04:00
parent 41a082cf5f
commit f9a80f55b6
4 changed files with 53 additions and 0 deletions

View file

@ -89,6 +89,7 @@ TEST_MULTIPLE_CONTAINERS_SRCS = \
lib/mlrutil.c lib/mlr_globals.c lib/string_builder.c \
containers/lrec.c containers/header_keeper.c containers/sllv.c \
containers/slls.c \
containers/string_array.c \
containers/hss.c \
containers/lhmsi.c \
containers/lhmss.c \

View file

@ -22,3 +22,30 @@ void string_array_free(string_array_t* parray) {
free(parray->strings);
free(parray);
}
string_array_t* string_array_from_line(char* line, char ifs) {
if (*line == 0) // empty string splits to empty array
return string_array_alloc(0);
int num_commas = 0;
for (char* p = line; *p; p++)
if (*p == ifs)
num_commas++;
string_array_t* parray = string_array_alloc(num_commas + 1);
char* start = line;
int i = 0;
for (char* p = line; *p; p++) {
if (*p == ifs) {
*p = 0;
p++;
parray->strings[i++] = start;
start = p;
}
}
parray->strings[i++] = start;
return parray;
}

View file

@ -10,5 +10,6 @@ typedef struct _string_array_t {
string_array_t* string_array_alloc(int length);
void string_array_free(string_array_t* parray);
string_array_t* string_array_from_line(char* line, char ifs);
#endif // STRING_ARRAY_H

View file

@ -4,6 +4,7 @@
#include "lib/mlrutil.h"
#include "containers/slls.h"
#include "containers/sllv.h"
#include "containers/string_array.h"
#include "containers/hss.h"
#include "containers/lhmsi.h"
#include "containers/lhmss.h"
@ -98,6 +99,28 @@ static char* test_sllv() {
return NULL;
}
// ----------------------------------------------------------------
static char* test_string_array() {
string_array_t* parray = string_array_from_line(mlr_strdup_or_die(""), ',');
mu_assert_lf(parray->length == 0);
string_array_free(parray);
parray = string_array_from_line(mlr_strdup_or_die("a"), ',');
mu_assert_lf(parray->length == 1);
mu_assert_lf(streq(parray->strings[0], "a"));
parray = string_array_from_line(mlr_strdup_or_die("c,d,a,e,b"), ',');
mu_assert_lf(parray->length == 5);
mu_assert_lf(streq(parray->strings[0], "c"));
mu_assert_lf(streq(parray->strings[1], "d"));
mu_assert_lf(streq(parray->strings[2], "a"));
mu_assert_lf(streq(parray->strings[3], "e"));
mu_assert_lf(streq(parray->strings[4], "b"));
return NULL;
}
// ----------------------------------------------------------------
static char* test_hss() {
@ -624,6 +647,7 @@ static char* test_dheap() {
static char * run_all_tests() {
mu_run_test(test_slls);
mu_run_test(test_sllv);
mu_run_test(test_string_array);
mu_run_test(test_hss);
mu_run_test(test_lhmsi);
mu_run_test(test_lhmss);