projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
RANK: Simplify fraction_name() function.
[pspp]
/
src
/
data
/
dictionary.c
diff --git
a/src/data/dictionary.c
b/src/data/dictionary.c
index 2d99f6d72cfe2a7e6dc442102f16a4dc687cbe32..024f97b3d5dd45b5d94d5778582456af30aa19c5 100644
(file)
--- a/
src/data/dictionary.c
+++ b/
src/data/dictionary.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010, 2011 Free Software Foundation, Inc.
+ Copyright (C) 1997-9, 2000, 2006, 2007, 2009, 2010, 2011
, 2012
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
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
@@
-194,10
+194,6
@@
dict_clone (const struct dictionary *s)
d = dict_create (s->encoding);
d = dict_create (s->encoding);
- /* Set the new dictionary's encoding early so that string length limitations
- are interpreted correctly. */
- d->encoding = xstrdup (s->encoding);
-
for (i = 0; i < s->var_cnt; i++)
{
struct variable *sv = s->var[i].var;
for (i = 0; i < s->var_cnt; i++)
{
struct variable *sv = s->var[i].var;
@@
-283,17
+279,6
@@
dict_clear (struct dictionary *d)
attrset_clear (&d->attributes);
}
attrset_clear (&d->attributes);
}
-/* Destroys the aux data for every variable in D, by calling
- var_clear_aux() for each variable. */
-void
-dict_clear_aux (struct dictionary *d)
-{
- int i;
-
- for (i = 0; i < d->var_cnt; i++)
- var_clear_aux (d->var[i].var);
-}
-
/* Clears a dictionary and destroys it. */
void
dict_destroy (struct dictionary *d)
/* Clears a dictionary and destroys it. */
void
dict_destroy (struct dictionary *d)
@@
-305,6
+290,7
@@
dict_destroy (struct dictionary *d)
d->callbacks = NULL ;
dict_clear (d);
d->callbacks = NULL ;
dict_clear (d);
+ string_array_destroy (&d->documents);
hmap_destroy (&d->name_map);
attrset_destroy (&d->attributes);
dict_clear_mrsets (d);
hmap_destroy (&d->name_map);
attrset_destroy (&d->attributes);
dict_clear_mrsets (d);
@@
-400,7
+386,7
@@
add_var (struct dictionary *d, struct variable *v)
vardict->dict = d;
vardict->var = v;
hmap_insert (&d->name_map, &vardict->name_node,
vardict->dict = d;
vardict->var = v;
hmap_insert (&d->name_map, &vardict->name_node,
- hash_case_string (var_get_name (v), 0));
+
utf8_
hash_case_string (var_get_name (v), 0));
vardict->case_index = d->next_value_idx;
var_set_vardict (v, vardict);
vardict->case_index = d->next_value_idx;
var_set_vardict (v, vardict);
@@
-490,10
+476,10
@@
dict_lookup_var (const struct dictionary *d, const char *name)
struct vardict_info *vardict;
HMAP_FOR_EACH_WITH_HASH (vardict, struct vardict_info, name_node,
struct vardict_info *vardict;
HMAP_FOR_EACH_WITH_HASH (vardict, struct vardict_info, name_node,
- hash_case_string (name, 0), &d->name_map)
+
utf8_
hash_case_string (name, 0), &d->name_map)
{
struct variable *var = vardict->var;
{
struct variable *var = vardict->var;
- if (!strcasecmp (var_get_name (var), name))
+ if (!
utf8_
strcasecmp (var_get_name (var), name))
return var;
}
return var;
}
@@
-600,13
+586,9
@@
dict_delete_var (struct dictionary *d, struct variable *v)
{
int dict_index = var_get_dict_index (v);
const int case_index = var_get_case_index (v);
{
int dict_index = var_get_dict_index (v);
const int case_index = var_get_case_index (v);
- const int width = var_get_width (v);
assert (dict_contains_var (d, v));
assert (dict_contains_var (d, v));
- /* Delete aux data. */
- var_clear_aux (v);
-
dict_unset_split_var (d, v);
dict_unset_mrset_var (d, v);
dict_unset_split_var (d, v);
dict_unset_mrset_var (d, v);
@@
-628,13
+610,14
@@
dict_delete_var (struct dictionary *d, struct variable *v)
/* Free memory. */
var_clear_vardict (v);
/* Free memory. */
var_clear_vardict (v);
- var_destroy (v);
if ( d->changed ) d->changed (d, d->changed_data);
invalidate_proto (d);
if (d->callbacks && d->callbacks->var_deleted )
if ( d->changed ) d->changed (d, d->changed_data);
invalidate_proto (d);
if (d->callbacks && d->callbacks->var_deleted )
- d->callbacks->var_deleted (d, dict_index, case_index, width, d->cb_data);
+ d->callbacks->var_deleted (d, v, dict_index, case_index, d->cb_data);
+
+ var_destroy (v);
}
/* Deletes the COUNT variables listed in VARS from D. This is
}
/* Deletes the COUNT variables listed in VARS from D. This is
@@
-745,7
+728,7
@@
rename_var (struct variable *v, const char *new_name)
struct vardict_info *vardict = var_get_vardict (v);
var_clear_vardict (v);
var_set_name (v, new_name);
struct vardict_info *vardict = var_get_vardict (v);
var_clear_vardict (v);
var_set_name (v, new_name);
- vardict->name_node.hash = hash_case_string (new_name, 0);
+ vardict->name_node.hash =
utf8_
hash_case_string (new_name, 0);
var_set_vardict (v, vardict);
}
var_set_vardict (v, vardict);
}
@@
-756,7
+739,7
@@
void
dict_rename_var (struct dictionary *d, struct variable *v,
const char *new_name)
{
dict_rename_var (struct dictionary *d, struct variable *v,
const char *new_name)
{
- assert (!strcasecmp (var_get_name (v), new_name)
+ assert (!
utf8_
strcasecmp (var_get_name (v), new_name)
|| dict_lookup_var (d, new_name) == NULL);
unindex_var (d, var_get_vardict (v));
|| dict_lookup_var (d, new_name) == NULL);
unindex_var (d, var_get_vardict (v));
@@
-1250,15
+1233,18
@@
dict_get_label (const struct dictionary *d)
return d->label;
}
return d->label;
}
-/* Sets D's file label to LABEL, truncating it to a
maximum of 60
-
characters
.
+/* Sets D's file label to LABEL, truncating it to a
t most 60 bytes in D's
+
encoding
.
Removes D's label if LABEL is null or the empty string. */
void
dict_set_label (struct dictionary *d, const char *label)
{
free (d->label);
Removes D's label if LABEL is null or the empty string. */
void
dict_set_label (struct dictionary *d, const char *label)
{
free (d->label);
- d->label = label != NULL && label[0] != '\0' ? xstrndup (label, 60) : NULL;
+ if (label == NULL || label[0] == '\0')
+ d->label = NULL;
+ else
+ d->label = utf8_encoding_trunc (label, d->encoding, 60);
}
/* Returns the documents for D, as an UTF-8 encoded string_array. The
}
/* Returns the documents for D, as an UTF-8 encoded string_array. The
@@
-1411,7
+1397,7
@@
dict_lookup_vector (const struct dictionary *d, const char *name)
{
size_t i;
for (i = 0; i < d->vector_cnt; i++)
{
size_t i;
for (i = 0; i < d->vector_cnt; i++)
- if (!strcasecmp (vector_get_name (d->vector[i]), name))
+ if (!
utf8_
strcasecmp (vector_get_name (d->vector[i]), name))
return d->vector[i];
return NULL;
}
return d->vector[i];
return NULL;
}
@@
-1456,7
+1442,7
@@
dict_lookup_mrset_idx (const struct dictionary *dict, const char *name)
size_t i;
for (i = 0; i < dict->n_mrsets; i++)
size_t i;
for (i = 0; i < dict->n_mrsets; i++)
- if (!strcasecmp (name, dict->mrsets[i]->name))
+ if (!
utf8_
strcasecmp (name, dict->mrsets[i]->name))
return i;
return SIZE_MAX;
return i;
return SIZE_MAX;