// ---------------------------------------------------------------- static char* test_slls() { slls_t* plist = slls_from_line(strdup(""), ',', FALSE); mu_assert_lf(plist->length == 0); plist = slls_from_line(strdup("a"), ',', FALSE); mu_assert_lf(plist->length == 1); plist = slls_from_line(strdup("c,d,a,e,b"), ',', FALSE); mu_assert_lf(plist->length == 5); sllse_t* pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; mu_assert_lf(pe == NULL); slls_sort(plist); mu_assert_lf(plist->length == 5); pe = plist->phead; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "a")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "b")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "c")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "d")); pe = pe->pnext; mu_assert_lf(pe != NULL); mu_assert_lf(streq(pe->value, "e")); pe = pe->pnext; mu_assert_lf(pe == NULL); return NULL; }
int main(int argc, char** argv) { slls_t* plist = slls_from_line(argv[1], ',', FALSE); printf("len=%d\n", plist->length); for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) printf("val=%s\n", (char*)pe->value); slls_sort(plist); printf("\n"); printf("len=%d\n", plist->length); for (sllse_t* pe = plist->phead; pe != NULL; pe = pe->pnext) printf("val=%s\n", (char*)pe->value); return 0; }
// ---------------------------------------------------------------- static sllv_t* mapper_regularize_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { if (pinrec != NULL) { mapper_regularize_state_t* pstate = (mapper_regularize_state_t*)pvstate; slls_t* current_sorted_field_names = mlr_reference_keys_from_record(pinrec); slls_sort(current_sorted_field_names); slls_t* previous_sorted_field_names = lhmslv_get(pstate->psorted_to_original, current_sorted_field_names); if (previous_sorted_field_names == NULL) { previous_sorted_field_names = slls_copy(current_sorted_field_names); lhmslv_put(pstate->psorted_to_original, previous_sorted_field_names, mlr_copy_keys_from_record(pinrec)); return sllv_single(pinrec); } else { lrec_t* poutrec = lrec_unbacked_alloc(); for (sllse_t* pe = previous_sorted_field_names->phead; pe != NULL; pe = pe->pnext) { lrec_put(poutrec, pe->value, strdup(lrec_get(pinrec, pe->value)), LREC_FREE_ENTRY_VALUE); } lrec_free(pinrec); return sllv_single(poutrec); } } else { return sllv_single(NULL); } }