tab: Make tab_value() take a variable instead of a dictionary.
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 12 Apr 2011 13:43:04 +0000 (06:43 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 12 Apr 2011 13:43:04 +0000 (06:43 -0700)
It seems far more likely that callers will have the variable handy
than the dictionary.  Also, when the variable is used the format can
be optional since tab_value() can get it from the variable's print
format.

src/language/stats/crosstabs.q
src/language/stats/frequencies.q
src/output/tab.c
src/output/tab.h

index 91015f57c75ba877e5c5f2d6b1e9ec4cfc58a39e..b230702e28c36bd8517ebdc09a702b94ef5124ac 100644 (file)
@@ -1492,7 +1492,7 @@ table_value_missing (struct crosstabs_proc *proc,
           free (s);
         }
       else
-        tab_value (table, c, r, opt, v, proc->dict, print);
+        tab_value (table, c, r, opt, v, var, print);
     }
 }
 
index 9bc2f73e8c57603810a253490841897721a6a9d7..01247f518cdff07bea16ff1de5d24e14b1777a0b 100644 (file)
@@ -188,7 +188,6 @@ struct var_freqs
 
     /* Variable attributes. */
     int width;
-    struct fmt_spec print;
   };
 
 struct frq_proc
@@ -646,7 +645,6 @@ frq_custom_variables (struct lexer *lexer, struct dataset *ds,
       vf->n_groups = 0;
       vf->groups = NULL;
       vf->width = var_get_width (var);
-      vf->print = *var_get_print_format (var);
     }
   frq->n_vars = n_vars;
 
@@ -850,7 +848,7 @@ dump_freq_table (const struct var_freqs *vf, const struct variable *wv)
       if (label != NULL)
         tab_text (t, 0, r, TAB_LEFT, label);
 
-      tab_value (t, 1, r, TAB_NONE, &f->value, ft->dict, &vf->print);
+      tab_value (t, 1, r, TAB_NONE, &f->value, vf->var, NULL);
       tab_double (t, 2, r, TAB_NONE, f->count, wfmt);
       tab_double (t, 3, r, TAB_NONE, percent, NULL);
       tab_double (t, 4, r, TAB_NONE, valid_percent, NULL);
@@ -867,7 +865,7 @@ dump_freq_table (const struct var_freqs *vf, const struct variable *wv)
       if (label != NULL)
         tab_text (t, 0, r, TAB_LEFT, label);
 
-      tab_value (t, 1, r, TAB_NONE, &f->value, ft->dict, &vf->print);
+      tab_value (t, 1, r, TAB_NONE, &f->value, vf->var, NULL);
       tab_double (t, 2, r, TAB_NONE, f->count, wfmt);
       tab_double (t, 3, r, TAB_NONE,
                     f->count / ft->total_cases * 100.0, NULL);
index 7ce860f14e09c1e357eb11bafce1d3dba1d766b9..f5f1f1f84b6ba5ea4535213d23f84948e7a1fb43 100644 (file)
 #include <stdlib.h>
 
 #include "data/data-out.h"
-#include "data/dictionary.h"
 #include "data/format.h"
 #include "data/settings.h"
 #include "data/value.h"
+#include "data/variable.h"
 #include "libpspp/assertion.h"
 #include "libpspp/compiler.h"
 #include "libpspp/i18n.h"
@@ -360,7 +360,7 @@ tab_box (struct tab_table *t, int f_h, int f_v, int i_h, int i_v,
    from V, displayed with format spec F. */
 void
 tab_value (struct tab_table *table, int c, int r, unsigned char opt,
-          const union value *v, const struct dictionary *dict, 
+          const union value *v, const struct variable *var,
           const struct fmt_spec *f)
 {
   char *contents;
@@ -379,7 +379,9 @@ tab_value (struct tab_table *table, int c, int r, unsigned char opt,
     }
 #endif
 
-  contents = data_out_pool (v, dict_get_encoding (dict), f, table->container);
+  contents = data_out_pool (v, var_get_encoding (var),
+                            f != NULL ? f : var_get_print_format (var),
+                            table->container);
 
   table->cc[c + r * table->cf] = contents;
   table->ct[c + r * table->cf] = opt;
index 7ac85187f833b0bdb7818be7efdb5bef057395ff..dd6840c63cad291ea4354dba84030a593fc53dff 100644 (file)
@@ -111,7 +111,7 @@ struct fmt_spec;
 struct dictionary;
 union value;
 void tab_value (struct tab_table *, int c, int r, unsigned char opt,
-               const union value *, const struct dictionary *dict,
+               const union value *, const struct variable *,
                const struct fmt_spec *);
 
 void tab_fixed (struct tab_table *, int c, int r, unsigned char opt,