projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Changed a lot of non-const pointers to const.
[pspp]
/
src
/
language
/
stats
/
aggregate.c
diff --git
a/src/language/stats/aggregate.c
b/src/language/stats/aggregate.c
index 7d1c7a7a72cb245c751601b711af76463477d825..044297462c982a2d395a6ef66c9d26780015163d 100644
(file)
--- a/
src/language/stats/aggregate.c
+++ b/
src/language/stats/aggregate.c
@@
-64,17
+64,17
@@
struct agr_var
struct agr_var *next; /* Next in list. */
/* Collected during parsing. */
struct agr_var *next; /* Next in list. */
/* Collected during parsing. */
-
struct variable *src;
/* Source variable. */
+
const struct variable *src;
/* Source variable. */
struct variable *dest; /* Target variable. */
int function; /* Function. */
struct variable *dest; /* Target variable. */
int function; /* Function. */
-
int include_missing; /* 1=Include user-missing values
. */
+
enum mv_class exclude; /* Classes of missing values to exclude
. */
union agr_argument arg[2]; /* Arguments. */
/* Accumulated during AGGREGATE execution. */
double dbl[3];
int int1, int2;
char *string;
union agr_argument arg[2]; /* Arguments. */
/* Accumulated during AGGREGATE execution. */
double dbl[3];
int int1, int2;
char *string;
-
int
missing;
+
bool saw_
missing;
struct moments1 *moments;
};
struct moments1 *moments;
};
@@
-141,7
+141,7
@@
struct agr_proc
/* Break variables. */
struct sort_criteria *sort; /* Sort criteria. */
/* Break variables. */
struct sort_criteria *sort; /* Sort criteria. */
- struct variable **break_vars; /* Break variables. */
+
const
struct variable **break_vars; /* Break variables. */
size_t break_var_cnt; /* Number of break variables. */
struct ccase break_case; /* Last values of break variables. */
size_t break_var_cnt; /* Number of break variables. */
struct ccase break_case; /* Last values of break variables. */
@@
-305,7
+305,6
@@
cmd_aggregate (struct lexer *lexer, struct dataset *ds)
goto error;
}
discard_variables (ds);
goto error;
}
discard_variables (ds);
- dict_destroy (dict);
dataset_set_dict (ds, agr.dict);
agr.dict = NULL;
proc_set_source (ds, agr.sink->class->make_source (agr.sink));
dataset_set_dict (ds, agr.dict);
agr.dict = NULL;
proc_set_source (ds, agr.sink->class->make_source (agr.sink));
@@
-391,13
+390,13
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
size_t n_dest;
struct string function_name;
size_t n_dest;
struct string function_name;
-
int include_missing
;
+
enum mv_class exclude
;
const struct agr_func *function;
int func_index;
union agr_argument arg[2];
const struct agr_func *function;
int func_index;
union agr_argument arg[2];
- struct variable **src;
+
const
struct variable **src;
size_t n_src;
size_t i;
size_t n_src;
size_t i;
@@
-410,6
+409,7
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
n_src = 0;
arg[0].c = NULL;
arg[1].c = NULL;
n_src = 0;
arg[0].c = NULL;
arg[1].c = NULL;
+ ds_init_empty (&function_name);
/* Parse the list of target variables. */
while (!lex_match (lexer, '='))
/* Parse the list of target variables. */
while (!lex_match (lexer, '='))
@@
-450,14
+450,14
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
goto error;
}
goto error;
}
-
include_missing = 0
;
+
exclude = MV_ANY
;
- ds_
init
_string (&function_name, lex_tokstr (lexer));
+ ds_
assign
_string (&function_name, lex_tokstr (lexer));
ds_chomp (&function_name, '.');
if (lex_tokid(lexer)[strlen (lex_tokid (lexer)) - 1] == '.')
ds_chomp (&function_name, '.');
if (lex_tokid(lexer)[strlen (lex_tokid (lexer)) - 1] == '.')
-
include_missing = 1
;
+
exclude = MV_SYSTEM
;
for (function = agr_func_tab; function->name; function++)
if (!strcasecmp (function->name, ds_cstr (&function_name)))
for (function = agr_func_tab; function->name; function++)
if (!strcasecmp (function->name, ds_cstr (&function_name)))
@@
-496,7
+496,7
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
else if (function->n_args)
pv_opts |= PV_SAME_TYPE;
else if (function->n_args)
pv_opts |= PV_SAME_TYPE;
- if (!parse_variables (lexer, dict, &src, &n_src, pv_opts))
+ if (!parse_variables
_const
(lexer, dict, &src, &n_src, pv_opts))
goto error;
}
goto error;
}
@@
-520,8
+520,8
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
}
else
{
}
else
{
- msg (SE, _("Missing argument %d to %s."),
i + 1,
- function->name);
+ msg (SE, _("Missing argument %d to %s."),
+
(int) i + 1,
function->name);
goto error;
}
goto error;
}
@@
-652,7
+652,7
@@
parse_aggregate_functions (struct lexer *lexer, const struct dictionary *dict, s
v->dest = destvar;
}
v->dest = destvar;
}
- v->
include_missing = include_missing
;
+ v->
exclude = exclude
;
if (v->src != NULL)
{
if (v->src != NULL)
{
@@
-793,9
+793,7
@@
accumulate_aggregate_info (struct agr_proc *agr,
const union value *v = case_data (input, iter->src);
int src_width = var_get_width (iter->src);
const union value *v = case_data (input, iter->src);
int src_width = var_get_width (iter->src);
- if (iter->include_missing
- ? var_is_numeric (iter->src) && v->f == SYSMIS
- : var_is_value_missing (iter->src, v))
+ if (var_is_value_missing (iter->src, v, iter->exclude))
{
switch (iter->function)
{
{
switch (iter->function)
{
@@
-808,7
+806,7
@@
accumulate_aggregate_info (struct agr_proc *agr,
iter->int1++;
break;
}
iter->int1++;
break;
}
- iter->
missing = 1
;
+ iter->
saw_missing = true
;
continue;
}
continue;
}
@@
-961,7
+959,7
@@
dump_aggregate_info (struct agr_proc *agr, struct ccase *output)
for (i = 0; i < agr->break_var_cnt; i++)
{
for (i = 0; i < agr->break_var_cnt; i++)
{
- struct variable *v = agr->break_vars[i];
+
const
struct variable *v = agr->break_vars[i];
size_t value_cnt = var_get_value_cnt (v);
memcpy (case_data_rw_idx (output, value_idx),
case_data (&agr->break_case, v),
size_t value_cnt = var_get_value_cnt (v);
memcpy (case_data_rw_idx (output, value_idx),
case_data (&agr->break_case, v),
@@
-977,7
+975,7
@@
dump_aggregate_info (struct agr_proc *agr, struct ccase *output)
{
union value *v = case_data_rw (output, i->dest);
{
union value *v = case_data_rw (output, i->dest);
- if (agr->missing == COLUMNWISE && i->
missing != 0
+ if (agr->missing == COLUMNWISE && i->
saw_missing
&& (i->function & FUNC) != N && (i->function & FUNC) != NU
&& (i->function & FUNC) != NMISS && (i->function & FUNC) != NUMISS)
{
&& (i->function & FUNC) != N && (i->function & FUNC) != NU
&& (i->function & FUNC) != NMISS && (i->function & FUNC) != NUMISS)
{
@@
-1091,7
+1089,7
@@
initialize_aggregate_info (struct agr_proc *agr, const struct ccase *input)
for (iter = agr->agr_vars; iter; iter = iter->next)
{
for (iter = agr->agr_vars; iter; iter = iter->next)
{
- iter->
missing = 0
;
+ iter->
saw_missing = false
;
iter->dbl[0] = iter->dbl[1] = iter->dbl[2] = 0.0;
iter->int1 = iter->int2 = 0;
switch (iter->function)
iter->dbl[0] = iter->dbl[1] = iter->dbl[2] = 0.0;
iter->int1 = iter->int2 = 0;
switch (iter->function)