global-opts refactor

This commit is contained in:
John Kerl 2016-08-19 22:58:13 -04:00
parent f317d66295
commit 4893954ba4
41 changed files with 199 additions and 81 deletions

View file

@ -243,7 +243,8 @@ cli_opts_t* parse_command_line(int argc, char** argv) {
}
// It's up to the parse func to print its usage on CLI-parse failure.
mapper_t* pmapper = pmapper_setup->pparse_func(&argi, argc, argv);
mapper_t* pmapper = pmapper_setup->pparse_func(&argi, argc, argv,
&popts->reader_opts, &popts->writer_opts);
if (pmapper == NULL) {
exit(1);
}

View file

@ -11,7 +11,6 @@
#include "containers/lhmsi.h"
#include "containers/lhmss.h"
#include "input/lrec_reader.h"
#include "mapping/mapper.h"
#include "output/lrec_writer.h"
// ----------------------------------------------------------------

View file

@ -3,6 +3,7 @@
#include <stdio.h>
#include "lib/context.h"
#include "cli/mlrcli.h"
#include "containers/lrec.h"
#include "containers/sllv.h"
@ -28,7 +29,8 @@ typedef struct _mapper_t {
// Control plane:
typedef void mapper_usage_func_t(FILE* o, char* argv0, char* verb);
typedef mapper_t* mapper_parse_cli_func_t(int* pargi, int argc, char** argv);
typedef mapper_t* mapper_parse_cli_func_t(int* pargi, int argc, char** argv,
cli_reader_opts_t* pmain_reader_opts, cli_writer_opts_t* pmain_writer_opts);
typedef struct _mapper_setup_t {
char* verb;

View file

@ -20,7 +20,8 @@ typedef struct _mapper_bar_state_t {
} mapper_bar_state_t;
static void mapper_bar_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_bar_alloc(ap_state_t* pargp, string_array_t* pfield_names,
char fill_char, char oob_char, char blank_char, double lo, double hi,
int width, int do_auto);
@ -62,7 +63,9 @@ static void mapper_bar_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_bar_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
string_array_t* pfield_names = NULL;
char* fill_string = NULL;
char* oob_string = NULL;

View file

@ -13,7 +13,8 @@ typedef struct _mapper_bootstrap_state_t {
} mapper_bootstrap_state_t;
static void mapper_bootstrap_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_bootstrap_alloc(int nout, ap_state_t* pargp);
static void mapper_bootstrap_free(mapper_t* pmapper);
static sllv_t* mapper_bootstrap_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -35,7 +36,9 @@ static void mapper_bootstrap_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "See also %s sample and %s shuffle.\n", argv0, argv0);
}
static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_bootstrap_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int nout = NOUT_EQUALS_NIN;
if ((argc - *pargi) < 1) {
mapper_bootstrap_usage(stderr, argv[0], argv[*pargi]);

View file

@ -12,7 +12,8 @@ typedef struct _mapper_cat_state_t {
#define DEFAULT_COUNTER_FIELD_NAME "n"
static void mapper_cat_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_cat_alloc(ap_state_t* pargp, int do_counters, char* counter_field_name);
static void mapper_cat_free(mapper_t* pmapper);
static sllv_t* mapper_cat_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -26,7 +27,9 @@ mapper_setup_t mapper_cat_setup = {
};
// ----------------------------------------------------------------
static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_cat_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
char* default_counter_field_name = DEFAULT_COUNTER_FIELD_NAME;
char* counter_field_name = NULL;
int do_counters = FALSE;

View file

@ -3,7 +3,8 @@
#include "containers/sllv.h"
static void mapper_check_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_check_alloc();
static void mapper_check_free(mapper_t* pmapper);
static sllv_t* mapper_check_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -22,7 +23,9 @@ static void mapper_check_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Useful for doing a well-formatted check on input data.\n");
}
static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 1) {
mapper_check_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -18,7 +18,8 @@ typedef struct _mapper_cut_state_t {
} mapper_cut_state_t;
static void mapper_cut_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_cut_alloc(ap_state_t* pargp, slls_t* pfield_name_list,
int do_arg_order, int do_complement, int do_regexes);
static void mapper_cut_free(mapper_t* pmapper);
@ -53,7 +54,9 @@ static void mapper_cut_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_cut_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* pfield_name_list = NULL;
int do_arg_order = FALSE;
int do_complement = FALSE;

View file

@ -19,7 +19,8 @@ typedef struct _mapper_decimate_state_t {
} mapper_decimate_state_t;
static void mapper_decimate_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_decimate_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names,
unsigned long long decimate_count, int keep_last);
static void mapper_decimate_free(mapper_t* pmapper);
@ -42,7 +43,9 @@ static void mapper_decimate_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Passes through one of every n records, optionally by category.\n");
}
static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_decimate_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int decimate_count = 10;
int keep_last = TRUE;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -20,7 +20,8 @@ typedef struct _mapper_filter_state_t {
} mapper_filter_state_t;
static void mapper_filter_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_filter_alloc(ap_state_t* pargp, char* mlr_dsl_expression, char* comment_stripped_mlr_dsl_expression,
mlr_dsl_ast_node_t* past, int type_inferencing, int do_exclude);
static void mapper_filter_free(mapper_t* pmapper);
@ -79,7 +80,9 @@ static void mapper_filter_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
char* verb = argv[(*pargi)++];
char* mlr_dsl_expression = NULL;
char* comment_stripped_mlr_dsl_expression = NULL;

View file

@ -13,7 +13,8 @@ typedef struct _mapper_grep_state_t {
} mapper_grep_state_t;
static void mapper_grep_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_grep_alloc(ap_state_t* pargp, char* regex_string, int exclude, int ignore_case);
static void mapper_grep_free(mapper_t* pmapper);
static sllv_t* mapper_grep_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -26,7 +27,9 @@ mapper_setup_t mapper_grep_setup = {
};
// ----------------------------------------------------------------
static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_grep_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
char* regex_string = NULL;
int exclude = FALSE;
int ignore_case = FALSE;

View file

@ -14,7 +14,8 @@ typedef struct _mapper_group_like_state_t {
} mapper_group_like_state_t;
static void mapper_group_like_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_group_like_alloc();
static void mapper_group_like_free(mapper_t* pmapper);
static sllv_t* mapper_group_like_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -32,7 +33,9 @@ static void mapper_group_like_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Outputs records in batches having identical field names.\n");
}
static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_group_like_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 1) {
mapper_group_like_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -25,7 +25,8 @@ typedef struct _mapper_having_fields_state_t {
} mapper_having_fields_state_t;
static void mapper_having_fields_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_having_fields_alloc(slls_t* pfield_names, char* regex_string, criterion_t criterion);
static void mapper_having_fields_free(mapper_t* pmapper);
@ -64,7 +65,9 @@ static void mapper_having_fields_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_having_fields_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* pfield_names = NULL;
char* regex_string = NULL;
criterion_t criterion = HAVING_FIELDS_UNSPECIFIED;

View file

@ -19,7 +19,8 @@ typedef struct _mapper_head_state_t {
} mapper_head_state_t;
static void mapper_head_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_head_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long head_count);
static void mapper_head_free(mapper_t* pmapper);
static sllv_t* mapper_head_process_unkeyed(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -42,7 +43,9 @@ static void mapper_head_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "records have been read.\n");
}
static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_head_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int head_count = 10;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -26,7 +26,8 @@ typedef struct _mapper_histogram_state_t {
} mapper_histogram_state_t;
static void mapper_histogram_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_histogram_alloc(ap_state_t* pargp, slls_t* value_field_names, double lo, int nbins, double hi,
int do_auto);
static void mapper_histogram_free(mapper_t* pmapper);
@ -58,7 +59,9 @@ static void mapper_histogram_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Just a histogram. Input values < lo or > hi are not counted.\n");
}
static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_histogram_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* value_field_names = NULL;
double lo = 0.0;
double hi = 0.0;

View file

@ -49,7 +49,8 @@ typedef struct _mapper_join_state_t {
// ----------------------------------------------------------------
static void mapper_join_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_join_alloc(mapper_join_opts_t* popts);
static void mapper_join_free(mapper_t* pmapper);
static void ingest_left_file(mapper_join_state_t* pstate);
@ -111,7 +112,9 @@ static void mapper_join_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_join_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
mapper_join_opts_t* popts = mlr_malloc_or_die(sizeof(mapper_join_opts_t));
cli_reader_opts_init(&popts->reader_opts);

View file

@ -8,7 +8,8 @@ typedef struct _mapper_label_state_t {
} mapper_label_state_t;
static void mapper_label_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_label_alloc(slls_t* pnames);
static void mapper_label_free(mapper_t* pmapper);
static sllv_t* mapper_label_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -33,7 +34,9 @@ static void mapper_label_usage(FILE* o, char* argv0, char* verb) {
}
static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_label_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 2) {
mapper_label_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -56,7 +56,8 @@ typedef struct _mapper_merge_fields_state_t {
// ----------------------------------------------------------------
static void mapper_merge_fields_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_merge_fields_alloc(slls_t* paccumulator_names, merge_by_t do_which,
slls_t* pvalue_field_names, char* output_field_basename, int allow_int_float, int do_interpolated_percentiles,
int keep_input_fields);
@ -105,7 +106,9 @@ static void mapper_merge_fields_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, " \"b_y\", and \"b_out_x\" collapses to \"b_x\".\n");
}
static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_merge_fields_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* paccumulator_names = NULL;
slls_t* pvalue_field_names = NULL;
char* output_field_basename = NULL;

View file

@ -31,7 +31,8 @@ typedef struct _nest_bucket_t {
} nest_bucket_t;
static void mapper_nest_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_nest_alloc(ap_state_t* pargp, char* argv0,
char* field_name, char* nested_fs, char* nested_ps,
int do_explode, int do_pairs, int do_across_fields);
@ -110,7 +111,9 @@ static void mapper_nest_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "See also %s reshape.\n", argv0);
}
static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_nest_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
char* field_name = NULL;
char* nested_fs = ";";
char* nested_ps = ":";

View file

@ -4,7 +4,8 @@
#include "containers/sllv.h"
static void mapper_nothing_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_nothing_alloc();
static void mapper_nothing_free(mapper_t* pmapper);
static sllv_t* mapper_nothing_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -17,7 +18,9 @@ mapper_setup_t mapper_nothing_setup = {
};
// ----------------------------------------------------------------
static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_nothing_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 1) {
mapper_nothing_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -33,7 +33,8 @@ typedef struct _mapper_put_state_t {
} mapper_put_state_t;
static void mapper_put_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_put_alloc(char* mlr_dsl_expression, char* comment_stripped_mlr_dsl_expression,
mlr_dsl_ast_t* past, int outer_filter, int type_inferencing, char* oosvar_flatten_separator,
int flush_every_record, cli_writer_opts_t* pwriter_opts);
@ -113,7 +114,9 @@ static void mapper_put_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
char* mlr_dsl_expression = NULL;
char* comment_stripped_mlr_dsl_expression = NULL;
char* expression_filename = NULL;

View file

@ -9,7 +9,8 @@ typedef struct _mapper_regularize_state_t {
} mapper_regularize_state_t;
static void mapper_regularize_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_regularize_alloc();
static void mapper_regularize_free(mapper_t* pmapper);
static sllv_t* mapper_regularize_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -31,7 +32,9 @@ static void mapper_regularize_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "output as a=1,c=2,b=3, then e=4,d=5, then a=6,c=7,b=8\n");
}
static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_regularize_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
*pargi += 1;
return mapper_regularize_alloc();
}

View file

@ -22,7 +22,8 @@ typedef struct _mapper_rename_state_t {
} mapper_rename_state_t;
static void mapper_rename_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_rename_alloc(ap_state_t* pargp, lhmss_t* pold_to_new, int do_regexes, int do_gsub);
static void mapper_rename_free(mapper_t* pmapper);
static sllv_t* mapper_rename_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -59,7 +60,9 @@ static void mapper_rename_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "%s %s -r '\"name\"i,Name' Rename \"name\", \"Name\", \"NAME\", etc. to \"Name\"\n", argv0, verb);
}
static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_rename_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int do_regexes = FALSE;
int do_gsub = FALSE;

View file

@ -12,7 +12,8 @@ typedef struct _mapper_reorder_state_t {
} mapper_reorder_state_t;
static void mapper_reorder_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_reorder_alloc(ap_state_t* pargp, slls_t* pfield_name_list, int put_at_end);
static void mapper_reorder_free(mapper_t* pmapper);
static sllv_t* mapper_reorder_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -38,7 +39,9 @@ static void mapper_reorder_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_reorder_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* pfield_name_list = NULL;
int put_at_end = FALSE;

View file

@ -22,7 +22,8 @@ typedef struct _mapper_repeat_state_t {
} mapper_repeat_state_t;
static void mapper_repeat_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_repeat_alloc(ap_state_t* pargp, long long repeat_count, char* repeat_count_field_name);
static void mapper_repeat_free(mapper_t* pmapper);
static sllv_t* mapper_repeat_process_nop(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -65,7 +66,9 @@ static void mapper_repeat_usage(FILE* o, char* argv0, char* verb) {
}
static const long long UNINIT_REPEAT_COUNT = -123457689LL;
static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_repeat_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
long long repeat_count = UNINIT_REPEAT_COUNT;
char* repeat_count_field_name = NULL;

View file

@ -57,7 +57,8 @@ typedef struct _reshape_bucket_t {
} reshape_bucket_t;
static void mapper_reshape_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_reshape_alloc(
ap_state_t* pargp,
slls_t* input_field_names,
@ -140,7 +141,9 @@ static void mapper_reshape_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "See also %s nest.\n", argv0);
}
static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_reshape_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* input_field_names = NULL;
slls_t* input_field_regex_strings = NULL;
slls_t* output_field_names = NULL;

View file

@ -32,7 +32,8 @@ typedef struct _mapper_sample_state_t {
} mapper_sample_state_t;
static void mapper_sample_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_sample_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names,
unsigned long long sample_count);
static void mapper_sample_free(mapper_t* pmapper);
@ -54,7 +55,9 @@ static void mapper_sample_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "See also %s bootstrap and %s shuffle.\n", argv0, argv0);
}
static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_sample_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int sample_count = -1;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -10,7 +10,8 @@ typedef struct _mapper_sec2gmt_state_t {
} mapper_sec2gmt_state_t;
static void mapper_sec2gmt_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_sec2gmt_alloc(slls_t* pfield_names);
static void mapper_sec2gmt_free(mapper_t* pmapper);
static sllv_t* mapper_sec2gmt_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -34,7 +35,9 @@ static void mapper_sec2gmt_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_sec2gmt_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 2) {
mapper_sec2gmt_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -10,7 +10,8 @@ typedef struct _mapper_sec2gmtdate_state_t {
} mapper_sec2gmtdate_state_t;
static void mapper_sec2gmtdate_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_sec2gmtdate_alloc(slls_t* pfield_names);
static void mapper_sec2gmtdate_free(mapper_t* pmapper);
static sllv_t* mapper_sec2gmtdate_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -34,7 +35,9 @@ static void mapper_sec2gmtdate_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_sec2gmtdate_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 2) {
mapper_sec2gmtdate_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -19,7 +19,8 @@ typedef struct _mapper_shuffle_state_t {
} mapper_shuffle_state_t;
static void mapper_shuffle_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_shuffle_alloc(ap_state_t* pargp);
static void mapper_shuffle_free(mapper_t* pmapper);
static sllv_t* mapper_shuffle_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -39,7 +40,9 @@ static void mapper_shuffle_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "See also %s bootstrap and %s sample.\n", argv0, argv0);
}
static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_shuffle_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
char* verb = argv[(*pargi)++];
ap_state_t* pstate = ap_alloc();

View file

@ -79,9 +79,11 @@ typedef struct _sort_bucket_t {
// ----------------------------------------------------------------
static void mapper_sort_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static void mapper_group_by_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_sort_alloc(slls_t* pkey_field_names, int* sort_params, int do_sort);
static void mapper_sort_free(mapper_t* pmapper);
static sllv_t* mapper_sort_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -129,7 +131,9 @@ static void mapper_sort_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, " %s %s -f a -f b -nr x -nr y -nr z\n", argv0, verb);
}
static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_sort_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 3) {
mapper_sort_usage(stderr, argv[0], argv[*pargi]);
return NULL;
@ -192,7 +196,9 @@ static void mapper_group_by_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Outputs records in batches having identical values at specified field names.\n");
}
static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_group_by_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 2) {
mapper_group_by_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -30,7 +30,8 @@ typedef struct _mapper_stats1_state_t {
} mapper_stats1_state_t;
static void mapper_stats1_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_stats1_alloc(ap_state_t* pargp, slls_t* paccumulator_names, string_array_t* pvalue_field_names,
slls_t* pgroup_by_field_names, int do_iterative_stats, int allow_int_float, int do_interpolated_percentiles);
static void mapper_stats1_free(mapper_t* pmapper);
@ -82,7 +83,9 @@ static void mapper_stats1_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "* When there are mode ties, the first-encountered datum wins.\n");
}
static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_stats1_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* paccumulator_names = NULL;
string_array_t* pvalue_field_names = NULL;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -55,7 +55,8 @@ typedef stats2_acc_t* stats2_alloc_func_t(char* value_field_name_1, char* value_
// ----------------------------------------------------------------
static void mapper_stats2_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_stats2_alloc(ap_state_t* pargp, slls_t* paccumulator_names,
string_array_t* pvalue_field_name_pairs, slls_t* pgroup_by_field_names,
int do_verbose, int do_iterative_stats, int do_hold_and_fit);
@ -127,7 +128,9 @@ static void mapper_stats2_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Example: %s %s -a corr -f x,y\n", argv0, verb);
}
static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_stats2_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* paccumulator_names = NULL;
string_array_t* pvalue_field_names = NULL;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -73,7 +73,8 @@ typedef struct _mapper_step_state_t {
// ----------------------------------------------------------------
static void mapper_step_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_step_alloc(ap_state_t* pargp, slls_t* pstepper_names, string_array_t* pvalue_field_names,
slls_t* pgroup_by_field_names, int allow_int_float, slls_t* pstring_alphas, slls_t* pewma_suffixes);
static void mapper_step_free(mapper_t* pmapper);
@ -149,7 +150,9 @@ static void mapper_step_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "for more information on EWMA.\n");
}
static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_step_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* pstepper_names = NULL;
string_array_t* pvalue_field_names = NULL;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -8,7 +8,8 @@ typedef struct _mapper_tac_state_t {
} mapper_tac_state_t;
static void mapper_tac_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_tac_alloc();
static void mapper_tac_free(mapper_t* pmapper);
static sllv_t* mapper_tac_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -26,7 +27,9 @@ static void mapper_tac_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Prints records in reverse order from the order in which they were encountered.\n");
}
static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_tac_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
if ((argc - *pargi) < 1) {
mapper_tac_usage(stderr, argv[0], argv[*pargi]);
return NULL;

View file

@ -19,7 +19,8 @@ typedef struct _mapper_tail_state_t {
} mapper_tail_state_t;
static void mapper_tail_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_tail_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names, unsigned long long tail_count);
static void mapper_tail_free(mapper_t* pmapper);
static sllv_t* mapper_tail_process(lrec_t* pinrec, context_t* pctx, void* pvstate);
@ -39,7 +40,9 @@ static void mapper_tail_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "Passes through the last n records, optionally by category.\n");
}
static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_tail_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int tail_count = 10;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -16,7 +16,8 @@ typedef struct _mapper_tee_state_t {
#define DEFAULT_COUNTER_FIELD_NAME "n"
static void mapper_tee_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_tee_alloc(int do_append, int flush_every_record,
char* output_file_name, cli_writer_opts_t* pwriter_opts);
static void mapper_tee_free(mapper_t* pmapper);
@ -30,7 +31,9 @@ mapper_setup_t mapper_tee_setup = {
};
// ----------------------------------------------------------------
static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_tee_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int do_append = FALSE;
int flush_every_record = TRUE;
cli_writer_opts_t* pwriter_opts = mlr_malloc_or_die(sizeof(cli_writer_opts_t));

View file

@ -28,7 +28,8 @@ typedef struct _mapper_top_state_t {
} mapper_top_state_t;
static void mapper_top_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_top_alloc(ap_state_t* pargp, slls_t* pvalue_field_names, slls_t* pgroup_by_field_names,
int top_count, int do_max, int show_full_records, int allow_int_float);
static void mapper_top_free(mapper_t* pmapper);
@ -59,7 +60,9 @@ static void mapper_top_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "optionally by category.\n");
}
static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_top_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
int top_count = 1;
slls_t* pvalue_field_names = NULL;
slls_t* pgroup_by_field_names = slls_alloc();

View file

@ -19,9 +19,11 @@ typedef struct _mapper_uniq_state_t {
} mapper_uniq_state_t;
static void mapper_uniq_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_uniq_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_uniq_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static void mapper_count_distinct_usage(FILE* o, char* argv0, char* verb);
static mapper_t* mapper_count_distinct_parse_cli(int* pargi, int argc, char** argv);
static mapper_t* mapper_count_distinct_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __);
static mapper_t* mapper_uniq_alloc(ap_state_t* pargp, slls_t* pgroup_by_field_names,
int show_counts, int show_num_distinct_only);
static void mapper_uniq_free(mapper_t* pmapper);
@ -53,7 +55,9 @@ static void mapper_count_distinct_usage(FILE* o, char* argv0, char* verb) {
}
// ----------------------------------------------------------------
static mapper_t* mapper_count_distinct_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_count_distinct_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* pfield_names = NULL;
int show_num_distinct_only = FALSE;
@ -86,7 +90,9 @@ static void mapper_uniq_usage(FILE* o, char* argv0, char* verb) {
fprintf(o, "count-distinct. For uniq, -f is a synonym for -g.\n");
}
static mapper_t* mapper_uniq_parse_cli(int* pargi, int argc, char** argv) {
static mapper_t* mapper_uniq_parse_cli(int* pargi, int argc, char** argv,
cli_reader_opts_t* _, cli_writer_opts_t* __)
{
slls_t* pgroup_by_field_names = NULL;
int show_counts = FALSE;
int show_num_distinct_only = FALSE;

View file

@ -2,9 +2,9 @@
#include <stdlib.h>
#include <string.h>
#include "cli/mlrcli.h"
#include "lib/mlrutil.h"
#include "lib/mlr_globals.h"
#include "cli/mlrcli.h"
#include "containers/lrec.h"
#include "containers/sllv.h"
#include "input/lrec_readers.h"

View file

@ -17,11 +17,13 @@ TOP OF LIST:
----------------------------------------------------------------
4.5.0 for sure:
* put/tee --oxxx flags overlays
! rid entirely of MLR_GLOBALS.popts; all on the stack w/ population-order caveat.
* mlh/mld for put/tee --oxxx flags overlays
* xxxes
* valgrinds
k put/tee --oxxx flags overlays
k mlrcli functionize
k simplify mapper_join
k -i, -o, --io