// ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_json_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_json_state_t* pstate = pvstate; if (pstate->do_auto_line_term) { context_set_autodetected_line_term(pctx, pstate->detected_line_term); } return sllv_pop(pstate->precords); }
// ---------------------------------------------------------------- static sllv_t* mapper_tail_process(lrec_t* pinrec, context_t* pctx, void* pvstate) { mapper_tail_state_t* pstate = pvstate; if (pinrec != NULL) { slls_t* pgroup_by_field_values = mlr_selected_values_from_record(pinrec, pstate->pgroup_by_field_names); sllv_t* precord_list_for_group = lhmslv_get(pstate->precord_lists_by_group, pgroup_by_field_values); if (precord_list_for_group == NULL) { precord_list_for_group = sllv_alloc(); lhmslv_put(pstate->precord_lists_by_group, slls_copy(pgroup_by_field_values), precord_list_for_group); } if (precord_list_for_group->length >= pstate->tail_count) { lrec_t* porec = sllv_pop(precord_list_for_group); if (porec != NULL) lrec_free(porec); } sllv_add(precord_list_for_group, pinrec); return NULL; } else { sllv_t* poutrecs = sllv_alloc(); for (lhmslve_t* pa = pstate->precord_lists_by_group->phead; pa != NULL; pa = pa->pnext) { sllv_t* precord_list_for_group = pa->pvvalue; for (sllve_t* pb = precord_list_for_group->phead; pb != NULL; pb = pb->pnext) { sllv_add(poutrecs, pb->pvdata); } } sllv_add(poutrecs, NULL); return poutrecs; } }
// ---------------------------------------------------------------- static lrec_t* lrec_reader_in_memory_process(void* pvhandle, void* pvstate, context_t* pctx) { lrec_reader_in_memory_state_t* pstate = pvstate; if (pstate->precords->phead == NULL) return NULL; else return sllv_pop(pstate->precords); }
void multi_lrec_writer_output_list(multi_lrec_writer_t* pmlw, sllv_t* poutrecs, char* filename_or_command, file_output_mode_t file_output_mode, int flush_every_record, context_t* pctx) { if (poutrecs == NULL) // synonym for empty record-list return; while (poutrecs->phead) { lrec_t* poutrec = sllv_pop(poutrecs); multi_lrec_writer_output_srec(pmlw, poutrec, filename_or_command, file_output_mode, flush_every_record, pctx); } }
// ---------------------------------------------------------------- static lrec_t* lrec_reader_stdio_json_process(void* pvstate, void* pvhandle, context_t* pctx) { lrec_reader_stdio_json_state_t* pstate = pvstate; return sllv_pop(pstate->precords); }