/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2009, 2010 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
return new_var;
}
-/* Create a variable to be used for internal calculations only.
- The variable is assigned a unique dictionary index and a case
- index of CASE_IDX. */
-struct variable *
-var_create_internal (int case_idx)
-{
- struct variable *v = var_create ("$internal", 0);
- struct vardict_info vdi;
- static int counter = INT_MAX / 2;
-
- vdi.dict = NULL;
- vdi.case_index = case_idx;
- vdi.dict_index = counter++;
- if (counter == INT_MAX)
- counter = INT_MAX / 2;
-
- var_set_vardict (v, &vdi);
-
- return v;
-}
-
/* Destroys variable V.
V must not belong to a dictionary. If it does, use
dict_delete_var instead. */
{
if (v != NULL)
{
- if (var_has_vardict (v))
- {
- const struct vardict_info *vdi = var_get_vardict (v);
- assert (vdi->dict == NULL);
- }
+ assert (!var_has_vardict (v));
mv_destroy (&v->miss);
cat_stored_values_destroy (v->obs_vals);
var_clear_short_names (v);
S[] must contain exactly as many characters as V's width.
V must be a string variable. */
bool
-var_is_str_missing (const struct variable *v, const char s[],
+var_is_str_missing (const struct variable *v, const uint8_t s[],
enum mv_class class)
{
return mv_is_str_missing (&v->miss, s, class);
const char *name = var_lookup_value_label (v, value);
if (name == NULL)
{
- char *s = ds_put_uninit (str, v->print.w);
- data_out (value, &v->print, s);
+ char *s = data_out (value, var_get_encoding (v), &v->print);
+ ds_put_cstr (str, s);
+ free (s);
}
else
ds_put_cstr (str, name);
return attrset_count (&v->attributes) > 0;
}
\f
+/* Returns the encoding of values of variable VAR. (This is actually a
+ property of the dictionary.) Returns null if no specific encoding has been
+ set. */
+const char *
+var_get_encoding (const struct variable *var)
+{
+ return var_has_vardict (var) ? dict_get_encoding (var->vardict.dict) : NULL;
+}
+\f
/* Returns V's vardict structure. */
const struct vardict_info *
var_get_vardict (const struct variable *v)
{
assert (vardict->dict_index >= 0);
assert (vardict->case_index >= 0);
+ assert (vardict->dict != NULL);
v->vardict = *vardict;
}