X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fdictionary.c;h=e9a5a01450363bbdc8055abf7a760731de12facf;hb=ea37b218562bd9c02c23d2669c70b2509e0588ea;hp=de529d6798d080aa1ee0f3bac6bc8577c18aedf0;hpb=2322678e8fddbbf158b01b2720db2636404bba3b;p=pspp diff --git a/src/data/dictionary.c b/src/data/dictionary.c index de529d6798..e9a5a01450 100644 --- a/src/data/dictionary.c +++ b/src/data/dictionary.c @@ -18,22 +18,25 @@ 02110-1301, USA. */ #include + #include "dictionary.h" + #include #include -#include "array.h" -#include "alloc.h" + #include "case.h" -#include "category.h" #include "cat-routines.h" -#include "compiler.h" -#include "message.h" -#include "hash.h" -#include "misc.h" +#include "category.h" #include "settings.h" -#include "str.h" #include "value-labels.h" #include "variable.h" +#include +#include +#include +#include +#include +#include +#include #include "gettext.h" #define _(msgid) gettext (msgid) @@ -49,16 +52,13 @@ struct dictionary size_t split_cnt; /* SPLIT FILE count. */ struct variable *weight; /* WEIGHT variable. */ struct variable *filter; /* FILTER variable. */ - int case_limit; /* Current case limit (N command). */ + size_t case_limit; /* Current case limit (N command). */ char *label; /* File label. */ char *documents; /* Documents, as a string. */ struct vector **vector; /* Vectors of variables. */ size_t vector_cnt; /* Number of vectors. */ }; -/* Active file dictionary. */ -struct dictionary *default_dict; - /* Creates and returns a new dictionary. */ struct dictionary * dict_create (void) @@ -224,9 +224,10 @@ dict_get_var (const struct dictionary *d, size_t idx) } /* Sets *VARS to an array of pointers to variables in D and *CNT - to the number of variables in *D. By default all variables - are returned, but bits may be set in EXCLUDE_CLASSES to - exclude ordinary, system, and/or scratch variables. */ + to the number of variables in *D. All variables are returned + if EXCLUDE_CLASSES is 0, or it may contain one or more of (1u + << DC_ORDINARY), (1u << DC_SYSTEM), or (1u << DC_SCRATCH) to + exclude the corresponding type of variable. */ void dict_get_vars (const struct dictionary *d, struct variable ***vars, size_t *cnt, unsigned exclude_classes) @@ -266,9 +267,9 @@ dict_create_var (struct dictionary *d, const char *name, int width) assert (d != NULL); assert (name != NULL); - assert (width >= 0 && width < 256); + assert (width >= 0 && width <= MAX_STRING); - assert (var_is_valid_name(name,0)); + assert (var_is_plausible_name(name,0)); /* Make sure there's not already a variable by that name. */ if (dict_lookup_var (d, name) != NULL) @@ -280,9 +281,8 @@ dict_create_var (struct dictionary *d, const char *name, int width) v->type = width == 0 ? NUMERIC : ALPHA; v->width = width; v->fv = d->next_value_idx; - v->nv = width == 0 ? 1 : DIV_RND_UP (width, 8); - v->init = 1; - v->reinit = dict_class_from_id (v->name) != DC_SCRATCH; + v->nv = width_to_bytes(width) / MAX_SHORT_STRING ; + v->leave = dict_class_from_id (v->name) == DC_SCRATCH; v->index = d->var_cnt; mv_init (&v->miss, width); if (v->type == NUMERIC) @@ -358,8 +358,7 @@ dict_clone_var (struct dictionary *d, const struct variable *ov, short_name[] is intentionally not copied, because there is no reason to give a new variable with potentially a new name the same short name. */ - nv->init = 1; - nv->reinit = ov->reinit; + nv->leave = ov->leave; mv_copy (&nv->miss, &ov->miss); nv->print = ov->print; nv->write = ov->write; @@ -584,7 +583,7 @@ dict_rename_var (struct dictionary *d, struct variable *v, assert (d != NULL); assert (v != NULL); assert (new_name != NULL); - assert (var_is_valid_name (new_name, false)); + assert (var_is_plausible_name (new_name, false)); assert (dict_contains_var (d, v)); assert (!compare_var_names (v->name, new_name, NULL) || dict_lookup_var (d, new_name) == NULL); @@ -622,7 +621,7 @@ dict_rename_vars (struct dictionary *d, for (i = 0; i < count; i++) { assert (d->var[vars[i]->index] == vars[i]); - assert (var_is_valid_name (new_names[i], false)); + assert (var_is_plausible_name (new_names[i], false)); hsh_force_delete (d->name_tab, vars[i]); old_names[i] = xstrdup (vars[i]->name); strcpy (vars[i]->name, new_names[i]); @@ -749,8 +748,8 @@ dict_set_filter (struct dictionary *d, struct variable *v) } /* Returns the case limit for dictionary D, or zero if the number - of cases is unlimited (see cmd_n()). */ -int + of cases is unlimited. */ +size_t dict_get_case_limit (const struct dictionary *d) { assert (d != NULL); @@ -758,13 +757,12 @@ dict_get_case_limit (const struct dictionary *d) return d->case_limit; } -/* Sets CASE_LIMIT as the case limit for dictionary D. Zero for - CASE_LIMIT indicates no limit. */ +/* Sets CASE_LIMIT as the case limit for dictionary D. Use + 0 for CASE_LIMIT to indicate no limit. */ void -dict_set_case_limit (struct dictionary *d, int case_limit) +dict_set_case_limit (struct dictionary *d, size_t case_limit) { assert (d != NULL); - assert (case_limit >= 0); d->case_limit = case_limit; } @@ -1063,7 +1061,7 @@ dict_create_vector (struct dictionary *d, assert (d != NULL); assert (name != NULL); - assert (var_is_valid_name (name, false)); + assert (var_is_plausible_name (name, false)); assert (var != NULL); assert (cnt > 0);