X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcount.c;h=af9642b8a233d2cb65bb914737cd391a417089da;hb=4848cff524922cc77ed21662406807471e96a68e;hp=dd88e01a62aeac8d4bf845af1ae0f9c06584c524;hpb=92bfefccd465052e492f669ce561aa25b0110283;p=pspp diff --git a/src/count.c b/src/count.c index dd88e01a62..af9642b8a2 100644 --- a/src/count.c +++ b/src/count.c @@ -21,7 +21,9 @@ #include "error.h" #include #include "alloc.h" +#include "case.h" #include "command.h" +#include "dictionary.h" #include "error.h" #include "lexer.h" #include "str.h" @@ -242,13 +244,13 @@ parse_numeric_criteria (struct counting * c) } cur = &c->crit.n[n++]; - if (token == T_NUM) + if (lex_is_number ()) { cur->a = tokval; lex_get (); if (lex_match_id ("THRU")) { - if (token == T_NUM) + if (lex_is_number ()) { if (!lex_force_num ()) return 0; @@ -280,7 +282,7 @@ parse_numeric_criteria (struct counting * c) { if (!lex_force_match_id ("THRU")) return 0; - if (token == T_NUM) + if (lex_is_number ()) { cur->type = CNT_LOW; cur->a = tokval; @@ -366,16 +368,14 @@ static inline int count_numeric (struct counting * cnt, struct ccase * c) { int counter = 0; - - struct cnt_num *num; - - double cmp; int i; for (i = 0; i < cnt->n; i++) { + struct cnt_num *num; + /* Extract the variable value and eliminate missing values. */ - cmp = c->data[cnt->v[i]->fv].f; + double cmp = case_num (c, cnt->v[i]->fv); if (cmp == SYSMIS) { if (cnt->missing >= 1) @@ -433,27 +433,21 @@ static inline int count_string (struct counting * cnt, struct ccase * c) { int counter = 0; - - struct cnt_str *str; - - char *cmp; - int len; - int i; for (i = 0; i < cnt->n; i++) { - /* Extract the variable value, variable width. */ - cmp = c->data[cnt->v[i]->fv].s; - len = cnt->v[i]->width; + struct cnt_str *str; + /* Extract the variable value, variable width. */ for (str = cnt->crit.s;; str++) switch (str->type) { case CNT_ERROR: assert (0); case CNT_SINGLE: - if (memcmp (cmp, str->s, len)) + if (memcmp (case_str (c, cnt->v[i]->fv), str->s, + cnt->v[i]->width)) break; counter++; goto done; @@ -484,7 +478,7 @@ count_trns_proc (struct trns_header * trns, struct ccase * c, counter += count_numeric (cnt, c); else counter += count_string (cnt, c); - c->data[info->d->fv].f = counter; + case_data_rw (c, info->d->fv)->f = counter; } return -1; }