From: Ben Pfaff Date: Sun, 20 Nov 2022 17:52:31 +0000 (-0800) Subject: split-file: New function output_split_file_values_peek(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d1a98ef3d49f66f6622e2eee6215f78d9dda83bb;p=pspp split-file: New function output_split_file_values_peek(). This helper function encapsulates what most of the callers were doing. --- diff --git a/src/language/data-io/list.c b/src/language/data-io/list.c index 6732e23a3d..b09a4dc2f5 100644 --- a/src/language/data-io/list.c +++ b/src/language/data-io/list.c @@ -72,13 +72,7 @@ list_execute (const struct lst_cmd *lcmd, struct dataset *ds) grouper = casegrouper_create_splits (proc_open (ds), dict); while (casegrouper_get_next_group (grouper, &group)) { - struct ccase *c = casereader_peek (group, 0); - if (c != NULL) - { - output_split_file_values (ds, c); - case_unref (c); - } - + output_split_file_values_peek (ds, group); group = casereader_project (group, &sc); group = casereader_select (group, lcmd->first - 1, (lcmd->last != LONG_MAX ? lcmd->last @@ -101,6 +95,7 @@ list_execute (const struct lst_cmd *lcmd, struct dataset *ds) cases->hide_all_labels = true; casenumber case_num = lcmd->first; + struct ccase *c; for (; (c = casereader_read (group)) != NULL; case_unref (c)) { int case_idx = pivot_category_create_leaf ( diff --git a/src/language/dictionary/split-file.c b/src/language/dictionary/split-file.c index 13eecbb4ce..efb796d7d2 100644 --- a/src/language/dictionary/split-file.c +++ b/src/language/dictionary/split-file.c @@ -19,6 +19,7 @@ #include #include "data/case.h" +#include "data/casereader.h" #include "data/data-out.h" #include "data/dataset.h" #include "data/dictionary.h" @@ -104,3 +105,17 @@ output_split_file_values (const struct dataset *ds, const struct ccase *c) pivot_table_submit (table); } + +/* Dumps out the values of all the split variables for the first case in + READER. */ +void +output_split_file_values_peek (const struct dataset *ds, + const struct casereader *reader) +{ + struct ccase *c = casereader_peek (reader, 0); + if (c) + { + output_split_file_values (ds, c); + case_unref (c); + } +} diff --git a/src/language/dictionary/split-file.h b/src/language/dictionary/split-file.h index af8c44e32b..961ad48462 100644 --- a/src/language/dictionary/split-file.h +++ b/src/language/dictionary/split-file.h @@ -17,6 +17,8 @@ #ifndef SPLIT_FILE_H #define SPLIT_FILE_H 1 -void output_split_file_values (const struct dataset *ds, const struct ccase *); +void output_split_file_values (const struct dataset *, const struct ccase *); +void output_split_file_values_peek (const struct dataset *, + const struct casereader *); #endif /* split-file.h */ diff --git a/src/language/stats/crosstabs.c b/src/language/stats/crosstabs.c index 7211d38d53..e7ad472caa 100644 --- a/src/language/stats/crosstabs.c +++ b/src/language/stats/crosstabs.c @@ -508,13 +508,7 @@ cmd_crosstabs (struct lexer *lexer, struct dataset *ds) struct casereader *group; while (casegrouper_get_next_group (grouper, &group)) { - /* Output SPLIT FILE variables. */ - struct ccase *c = casereader_peek (group, 0); - if (c != NULL) - { - output_split_file_values (ds, c); - case_unref (c); - } + output_split_file_values_peek (ds, group); /* Initialize hash tables. */ for (struct crosstabulation *xt = &proc.pivots[0]; @@ -522,6 +516,7 @@ cmd_crosstabs (struct lexer *lexer, struct dataset *ds) hmap_init (&xt->data); /* Tabulate. */ + struct ccase *c; for (; (c = casereader_read (group)) != NULL; case_unref (c)) for (struct crosstabulation *xt = &proc.pivots[0]; xt < &proc.pivots[proc.n_pivots]; xt++) diff --git a/src/language/stats/ctables.c b/src/language/stats/ctables.c index 05e9824b7d..476681b2bc 100644 --- a/src/language/stats/ctables.c +++ b/src/language/stats/ctables.c @@ -5627,14 +5627,7 @@ ctables_execute (struct dataset *ds, struct casereader *input, while (casegrouper_get_next_group (grouper, &group)) { if (splitting) - { - struct ccase *c = casereader_peek (group, 0); - if (c != NULL) - { - output_split_file_values (ds, c); - case_unref (c); - } - } + output_split_file_values_peek (ds, group); bool warn_on_invalid = true; for (struct ccase *c = casereader_read (group); c; diff --git a/src/language/stats/descriptives.c b/src/language/stats/descriptives.c index f82e6c580a..6f78f28473 100644 --- a/src/language/stats/descriptives.c +++ b/src/language/stats/descriptives.c @@ -759,15 +759,7 @@ static void calc_descriptives (struct dsc_proc *dsc, struct casereader *group, struct dataset *ds) { - struct ccase *c = casereader_peek (group, 0); - if (c == NULL) - { - casereader_destroy (group); - return; - } - output_split_file_values (ds, c); - case_unref (c); - + output_split_file_values_peek (ds, group); group = casereader_create_filter_weight (group, dataset_dict (ds), NULL, NULL); @@ -790,6 +782,7 @@ calc_descriptives (struct dsc_proc *dsc, struct casereader *group, /* First pass to handle most of the work. */ casenumber count = 0; const struct variable *filter = dict_get_filter (dataset_dict (ds)); + struct ccase *c; for (; (c = casereader_read (pass1)) != NULL; case_unref (c)) { double weight = dict_get_case_weight (dataset_dict (ds), c, NULL); diff --git a/src/language/stats/glm.c b/src/language/stats/glm.c index 6a98dd4f49..1002653a84 100644 --- a/src/language/stats/glm.c +++ b/src/language/stats/glm.c @@ -539,15 +539,8 @@ run_glm (struct glm_spec *cmd, struct casereader *input, cov = covariance_2pass_create (cmd->n_dep_vars, cmd->dep_vars, ws.cats, cmd->wv, cmd->exclude, true); + output_split_file_values_peek (ds, input); - c = casereader_peek (input, 0); - if (c == NULL) - { - casereader_destroy (input); - return; - } - output_split_file_values (ds, c); - case_unref (c); taint = taint_clone (casereader_get_taint (input)); diff --git a/src/language/stats/oneway.c b/src/language/stats/oneway.c index c65683e246..797800155a 100644 --- a/src/language/stats/oneway.c +++ b/src/language/stats/oneway.c @@ -705,7 +705,6 @@ run_oneway (const struct oneway_spec *cmd, struct taint *taint; struct dictionary *dict = dataset_dict (ds); struct casereader *reader; - struct ccase *c; struct oneway_workspace ws; @@ -741,14 +740,7 @@ run_oneway (const struct oneway_spec *cmd, ws.vws[v].nl = levene_create (var_get_width (cmd->indep_var), NULL); } - c = casereader_peek (input, 0); - if (c == NULL) - { - casereader_destroy (input); - goto finish; - } - output_split_file_values (ds, c); - case_unref (c); + output_split_file_values_peek (ds, input); taint = taint_clone (casereader_get_taint (input)); @@ -760,6 +752,7 @@ run_oneway (const struct oneway_spec *cmd, input = casereader_create_filter_weight (input, dict, NULL, NULL); reader = casereader_clone (input); + struct ccase *c; for (; (c = casereader_read (reader)) != NULL; case_unref (c)) { int i; @@ -887,8 +880,6 @@ run_oneway (const struct oneway_spec *cmd, taint_destroy (taint); - finish: - for (v = 0; v < cmd->n_vars; ++v) { covariance_destroy (ws.vws[v].cov);