// xxx recast all of these in terms of providable outputs static void acc_stddev_var_meaneb_emit(void* pvstate, char* value_field_name, char* acc_name, lrec_t* poutrec) { acc_stddev_var_meaneb_state_t* pstate = pvstate; char* key = mlr_paste_3_strings(value_field_name, "_", acc_name); if (pstate->count < 2LL) { lrec_put(poutrec, key, "", LREC_FREE_ENTRY_KEY); } else { double output = mlr_get_var(pstate->count, pstate->sumx, pstate->sumx2); if (pstate->do_which == DO_STDDEV) output = sqrt(output); else if (pstate->do_which == DO_MEANEB) output = sqrt(output / pstate->count); char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); lrec_put(poutrec, key, val, LREC_FREE_ENTRY_KEY|LREC_FREE_ENTRY_VALUE); } }
static void stats1_stddev_var_meaneb_emit(void* pvstate, char* value_field_name, char* stats1_acc_name, int copy_data, lrec_t* poutrec) { stats1_stddev_var_meaneb_state_t* pstate = pvstate; if (pstate->count < 2LL) { if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), "", FREE_ENTRY_KEY); else lrec_put(poutrec, pstate->output_field_name, "", NO_FREE); } else { double output = mlr_get_var(pstate->count, pstate->sumx, pstate->sumx2); if (pstate->do_which == DO_STDDEV) output = sqrt(output); else if (pstate->do_which == DO_MEANEB) output = sqrt(output / pstate->count); char* val = mlr_alloc_string_from_double(output, MLR_GLOBALS.ofmt); if (copy_data) lrec_put(poutrec, mlr_strdup_or_die(pstate->output_field_name), val, FREE_ENTRY_KEY|FREE_ENTRY_VALUE); else lrec_put(poutrec, pstate->output_field_name, val, FREE_ENTRY_VALUE); } }