[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pspp-cvs] Changes to pspp/src/vars-prs.c
From: |
John Darrington |
Subject: |
[Pspp-cvs] Changes to pspp/src/vars-prs.c |
Date: |
Wed, 13 Apr 2005 06:10:16 -0400 |
Index: pspp/src/vars-prs.c
diff -u pspp/src/vars-prs.c:1.13 pspp/src/vars-prs.c:1.14
--- pspp/src/vars-prs.c:1.13 Fri Feb 11 08:22:05 2005
+++ pspp/src/vars-prs.c Wed Apr 13 10:09:59 2005
@@ -134,6 +134,7 @@
assert (var != NULL);
assert (cnt != NULL);
+
vs = var_set_create_from_dict (d);
success = parse_var_set_vars (vs, var, cnt, opts);
if ( success == 0 )
@@ -266,7 +267,7 @@
else
included = NULL;
- if (lex_match (T_ALL))
+if (lex_match (T_ALL))
add_variables (v, nv, &mv, included, pv_opts,
vs, 0, var_set_get_cnt (vs) - 1, DC_ORDINARY);
else
@@ -302,7 +303,6 @@
first_var->name, last_var->name);
goto fail;
}
-
if (class != last_class)
{
msg (SE, _("When using the TO keyword to specify several "
@@ -409,10 +409,10 @@
*names = NULL;
}
- name1 = xmalloc (36);
- name2 = &name1[1 * 9];
- root1 = &name1[2 * 9];
- root2 = &name1[3 * 9];
+ name1 = xmalloc (4 * (SHORT_NAME_LEN + 1));
+ name2 = &name1[1 * SHORT_NAME_LEN + 1];
+ root1 = &name1[2 * SHORT_NAME_LEN + 1];
+ root2 = &name1[3 * SHORT_NAME_LEN + 1];
do
{
if (token != T_ID)
@@ -464,7 +464,7 @@
for (n = n1; n <= n2; n++)
{
- (*names)[nvar] = xmalloc (9);
+ (*names)[nvar] = xmalloc (SHORT_NAME_LEN + 1);
sprintf ((*names)[nvar], "%s%0*d", root1, d1, n);
nvar++;
}
@@ -594,7 +594,7 @@
{
assert (vs != NULL);
assert (name != NULL);
- assert (strlen (name) < 9);
+ assert (strlen (name) <= LONG_NAME_LEN );
return vs->lookup_var_idx (vs, name);
}
@@ -662,6 +662,7 @@
struct variable *const *var;/* Array of variables. */
size_t var_cnt; /* Number of elements in var. */
struct hsh_table *name_tab; /* Hash from variable names to variables. */
+ struct hsh_table *longname_tab; /* Hash of short names indexed by long
names */
};
/* Returns the number of variables in VS. */
@@ -688,10 +689,26 @@
static int
array_var_set_lookup_var_idx (const struct var_set *vs, const char *name)
{
+ char *short_name ;
struct array_var_set *avs = vs->aux;
struct variable v, *vp, *const *vpp;
- strcpy (v.name, name);
+ struct name_table_entry key;
+ key.longname = name;
+
+ struct name_table_entry *nte;
+
+ assert (avs->longname_tab);
+
+
+ nte = hsh_find (avs->longname_tab, &key);
+
+ if (!nte)
+ return -1;
+
+ short_name = nte->name;
+
+ strcpy (v.name, short_name);
vp = &v;
vpp = hsh_find (avs->name_tab, &vp);
return vpp != NULL ? vpp - avs->var : -1;
@@ -704,6 +721,7 @@
struct array_var_set *avs = vs->aux;
hsh_destroy (avs->name_tab);
+ hsh_destroy (avs->longname_tab);
free (avs);
free (vs);
}
@@ -726,14 +744,35 @@
avs->var = var;
avs->var_cnt = var_cnt;
avs->name_tab = hsh_create (2 * var_cnt,
- compare_var_ptr_names, hash_var_ptr_name, NULL,
- NULL);
- for (i = 0; i < var_cnt; i++)
- if (hsh_insert (avs->name_tab, (void *) &var[i]) != NULL)
- {
- var_set_destroy (vs);
- return NULL;
- }
+ compare_var_ptr_names, hash_var_ptr_name,
+ NULL, NULL);
+
+ avs->longname_tab = hsh_create (2 * var_cnt,
+ compare_long_names, hash_long_name,
+ NULL, NULL);
+ for (i = 0; i < var_cnt; i++)
+ {
+ struct name_table_entry *nte ;
+
+ if (hsh_insert (avs->name_tab, &var[i]) != NULL)
+ {
+ var_set_destroy (vs);
+ return NULL;
+ }
+
+ nte = xmalloc (sizeof (*nte));
+ nte->name = strdup(var[i]->name);
+ nte->longname = strdup(var[i]->longname);
+
+ if (hsh_insert (avs->longname_tab, nte) != NULL)
+ {
+ var_set_destroy (vs);
+ free (nte);
+ return NULL;
+ }
+
+ }
+
return vs;
}
- [Pspp-cvs] Changes to pspp/src/vars-prs.c,
John Darrington <=