*/
struct chart_item *
barchart_create (const struct variable **var, int n_vars,
- const char *ylabel,
+ const char *ylabel, bool percent,
struct freq *const *cats, int n_cats)
{
struct barchart *bar;
assert (n_vars >= 1);
bar = xzalloc (sizeof *bar);
+ bar->percent = percent;
bar->var = var;
bar->n_vars = n_vars;
bar->n_nzcats = n_cats;
{
struct category *s = xzalloc (sizeof *s);
s->idx = idx++;
- value_init (&s->val, var_get_width (var[pidx]));
- value_copy (&s->val, &src->values[pidx], var_get_width (var[pidx]));
+ s->width = var_get_width (var[pidx]);
+ value_init (&s->val, s->width);
+ value_copy (&s->val, &src->values[pidx], s->width);
ds_init_empty (&s->label);
var_append_value_name (var[pidx], &s->val, &s->label);
{
struct category *s = xzalloc (sizeof *s);
s->idx = idx++;
- value_init (&s->val, var_get_width (var[sidx]));
+ s->width = var_get_width (var[sidx]);
+ value_init (&s->val, s->width);
value_copy (&s->val, &src->values[sidx], var_get_width (var[sidx]));
ds_init_empty (&s->label);
var_append_value_name (var[sidx], &s->val, &s->label);
struct freq *c = cats[i];
struct freq *foo;
- int flag = 0;
+ bool flag = false;
size_t hash = hash_freq_2level_ptr (&c, bar);
HMAP_FOR_EACH_WITH_HASH (foo, struct freq, node, hash, &level2table)
{
if (0 == compare_freq_2level_ptr_3way (&foo, &c, bar))
{
foo->count += c->count;
+ bar->total_count += c->count;
if (foo->count > bar->largest)
bar->largest = foo->count;
- flag = 1;
+ flag = true;
break;
}
}
if (c->count > bar->largest)
bar->largest = aggregated_freq->count;
+ bar->total_count += c->count;
bar->cats[x++] = aggregated_freq;
}
}
struct category *next = NULL;
HMAP_FOR_EACH_SAFE (foo, next, struct category, node, m)
{
+ value_destroy (&foo->val, foo->width);
+
ds_destroy (&foo->label);
free (foo);
}