// ---------------------------------------------------------------- static char* test_lhmss() { lhmss_t *pmap = lhmss_alloc(); mu_assert_lf(pmap->num_occupied == 0); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "x")); mu_assert_lf(lhmss_get(pmap, "x") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "x", "3"); mu_assert_lf(pmap->num_occupied == 1); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "3")); mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "y", "5"); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "3")); mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "x", "4"); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); mu_assert_lf(!lhmss_has_key(pmap, "z")); mu_assert_lf(lhmss_get(pmap, "z") == NULL); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_put(pmap, "z", "7"); mu_assert_lf(pmap->num_occupied == 3); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); mu_assert_lf( lhmss_has_key(pmap, "y")); mu_assert_lf(streq(lhmss_get(pmap, "y"), "5")); mu_assert_lf( lhmss_has_key(pmap, "z")); mu_assert_lf(streq(lhmss_get(pmap, "z"), "7")); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_remove(pmap, "y"); mu_assert_lf(pmap->num_occupied == 2); mu_assert_lf(!lhmss_has_key(pmap, "w")); mu_assert_lf(lhmss_get(pmap, "w") == NULL); mu_assert_lf( lhmss_has_key(pmap, "x")); mu_assert_lf(streq(lhmss_get(pmap, "x"), "4")); mu_assert_lf(!lhmss_has_key(pmap, "y")); mu_assert_lf(lhmss_get(pmap, "y") == NULL); mu_assert_lf( lhmss_has_key(pmap, "z")); mu_assert_lf(streq(lhmss_get(pmap, "z"), "7")); mu_assert_lf(lhmss_check_counts(pmap)); lhmss_free(pmap); return NULL; }
lhmss_t* get_default_pses() { if (singleton_default_pses == NULL) { singleton_default_pses = lhmss_alloc(); lhmss_put(singleton_default_pses, "dkvp", "=", NO_FREE); lhmss_put(singleton_default_pses, "json", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "nidx", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "csv", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "csvlite", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "pprint", "(N/A)", NO_FREE); lhmss_put(singleton_default_pses, "xtab", " ", NO_FREE); } return singleton_default_pses; }
static void stats1_percentile_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_percentile_state_t* pstate = pvstate; double p; (void)sscanf(stats1_acc_name, "p%lf", &p); // Assuming this was range-checked earlier on to be in [0,100]. mv_t v = percentile_keeper_emit(pstate->ppercentile_keeper, p); char* s = mv_alloc_format_val(&v); // For this type, one accumulator tracks many stats1_names, but a single value_field_name. char* output_field_name = lhmss_get(pstate->poutput_field_names, stats1_acc_name); if (output_field_name == NULL) { output_field_name = mlr_paste_3_strings(value_field_name, "_", stats1_acc_name); lhmss_put(pstate->poutput_field_names, mlr_strdup_or_die(stats1_acc_name), output_field_name, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); } lrec_put(poutrec, mlr_strdup_or_die(output_field_name), s, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); }
static lhmss_t* get_default_rses() { if (singleton_default_rses == NULL) { singleton_default_rses = lhmss_alloc(); lhmss_put(singleton_default_rses, "dkvp", "\n"); lhmss_put(singleton_default_rses, "csv", "\r\n"); lhmss_put(singleton_default_rses, "csvlite", "\n"); lhmss_put(singleton_default_rses, "nidx", "\n"); lhmss_put(singleton_default_rses, "xtab", "(N/A)"); lhmss_put(singleton_default_rses, "pprint", "\n"); } return singleton_default_rses; }
static lhmss_t* get_desc_to_chars_map() { if (singleton_pdesc_to_chars_map == NULL) { singleton_pdesc_to_chars_map = lhmss_alloc(); lhmss_put(singleton_pdesc_to_chars_map, "cr", "\r", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "crcr", "\r\r", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "newline", "\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "lf", "\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "lflf", "\n\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "crlf", "\r\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "crlfcrlf", "\r\n\r\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "tab", "\t", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "space", " ", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "comma", ",", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "newline", "\n", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "pipe", "|", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "slash", "/", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "colon", ":", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "semicolon", ";", NO_FREE); lhmss_put(singleton_pdesc_to_chars_map, "equals", "=", NO_FREE); } return singleton_pdesc_to_chars_map; }
lhmss_t* lhmss_copy(lhmss_t* pmap) { lhmss_t* pnew = lhmss_alloc(); for (lhmsse_t* pe = pmap->phead; pe != NULL; pe = pe->pnext) lhmss_put(pnew, mlr_strdup_or_die(pe->key), mlr_strdup_or_die(pe->value), FREE_ENTRY_KEY|FREE_ENTRY_VALUE); return pnew; }