X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fmissing-values.c;h=6940c6cf124d37ff5f0d674578da55ab32dc8c0a;hb=e210b20bf6f405637c8c03dd280b5a4a627191b8;hp=2a5b8fa4df6be4b8fff78c34462f4f358572223f;hpb=a206758c8e08470972aef2fc622c99e5393df944;p=pspp-builds.git diff --git a/src/missing-values.c b/src/missing-values.c index 2a5b8fa4..6940c6cf 100644 --- a/src/missing-values.c +++ b/src/missing-values.c @@ -23,6 +23,7 @@ #include #include "str.h" + /* Initializes MV as a set of missing values for a variable of the given WIDTH. Although only numeric variables and short string variables may have missing values, WIDTH may be any @@ -35,10 +36,19 @@ mv_init (struct missing_values *mv, int width) mv->width = width; } +void +mv_set_type(struct missing_values *mv, enum mv_type type) +{ + mv->type = type; +} + + /* Copies SRC to MV. */ void mv_copy (struct missing_values *mv, const struct missing_values *src) { + assert(src); + *mv = *src; } @@ -135,7 +145,7 @@ mv_add_num_range (struct missing_values *mv, double low, double high) /* Returns true if MV contains an individual value, false if MV is empty (or contains only a range). */ bool -mv_has_value (struct missing_values *mv) +mv_has_value (const struct missing_values *mv) { switch (mv->type) { @@ -163,10 +173,44 @@ mv_pop_value (struct missing_values *mv, union value *v) *v = mv->values[mv->type & 3]; } +/* Stores a value in *V. + MV must contain an individual value (as determined by + mv_has_value()). + IDX is the zero based index of the value to get +*/ +void +mv_peek_value (const struct missing_values *mv, union value *v, int idx) +{ + assert (idx >= 0 ) ; + assert (idx < 3); + + assert (mv_has_value (mv)); + *v = mv->values[idx]; +} + +void +mv_replace_value (struct missing_values *mv, const union value *v, int idx) +{ + assert (idx >= 0) ; + assert (idx < mv_n_values(mv)); + + mv->values[idx] = *v; +} + + + +int +mv_n_values (const struct missing_values *mv) +{ + assert(mv_has_value(mv)); + return mv->type & 3; +} + + /* Returns true if MV contains a numeric range, false if MV is empty (or contains only individual values). */ bool -mv_has_range (struct missing_values *mv) +mv_has_range (const struct missing_values *mv) { switch (mv->type) { @@ -195,6 +239,19 @@ mv_pop_range (struct missing_values *mv, double *low, double *high) mv->type &= 3; } + +/* Returns the numeric range from MV into *LOW and + *HIGH. MV must contain a individual range (as determined by + mv_has_range()). */ +void +mv_peek_range (const struct missing_values *mv, double *low, double *high) +{ + assert (mv_has_range (mv)); + *low = mv->values[1].f; + *high = mv->values[2].f; +} + + /* Returns true if values[IDX] is in use when the `type' member is set to TYPE (in struct missing_values), false otherwise. */