X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fxforms%2Fcount.c;h=6e234c4b23728fa9e1e886db9a9585e9fd5c5274;hb=cc57a28ef6796ae9a64ef80d453f72126956d49d;hp=1c9b4d65735f9487b147da120585465b7501ea0d;hpb=9bf1c33953f7feff2a24a06293f6fe96b75cc41a;p=pspp-builds.git diff --git a/src/language/xforms/count.c b/src/language/xforms/count.c index 1c9b4d65..6e234c4b 100644 --- a/src/language/xforms/count.c +++ b/src/language/xforms/count.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -268,8 +268,8 @@ parse_string_criteria (struct lexer *lexer, struct pool *pool, struct criteria * /* Transformation. */ /* Counts the number of values in case C matching CRIT. */ -static inline int -count_numeric (struct criteria *crit, struct ccase *c) +static int +count_numeric (struct criteria *crit, const struct ccase *c) { int counter = 0; size_t i; @@ -302,8 +302,8 @@ count_numeric (struct criteria *crit, struct ccase *c) } /* Counts the number of values in case C matching CRIT. */ -static inline int -count_string (struct criteria *crit, struct ccase *c) +static int +count_string (struct criteria *crit, const struct ccase *c) { int counter = 0; size_t i; @@ -325,12 +325,13 @@ count_string (struct criteria *crit, struct ccase *c) /* Performs the COUNT transformation T on case C. */ static int -count_trns_proc (void *trns_, struct ccase *c, +count_trns_proc (void *trns_, struct ccase **c, casenumber case_num UNUSED) { struct count_trns *trns = trns_; struct dst_var *dv; + *c = case_unshare (*c); for (dv = trns->dst_vars; dv; dv = dv->next) { struct criteria *crit; @@ -339,10 +340,10 @@ count_trns_proc (void *trns_, struct ccase *c, counter = 0; for (crit = dv->crit; crit; crit = crit->next) if (var_is_numeric (crit->vars[0])) - counter += count_numeric (crit, c); + counter += count_numeric (crit, *c); else - counter += count_string (crit, c); - case_data_rw (c, dv->var)->f = counter; + counter += count_string (crit, *c); + case_data_rw (*c, dv->var)->f = counter; } return TRNS_CONTINUE; }