X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fctables.c;h=c982f19cf63ad431faaf532c0637133daf43b574;hb=b77c6aad5965c16e888af6c7e8be8c24569bda21;hp=b57f33f5d7ef4a35203433e231d49057820fffb9;hpb=6121aa9828c5d589ec82c06802614da230257670;p=pspp diff --git a/src/language/stats/ctables.c b/src/language/stats/ctables.c index b57f33f5d7..c982f19cf6 100644 --- a/src/language/stats/ctables.c +++ b/src/language/stats/ctables.c @@ -2447,6 +2447,34 @@ recurse_totals (struct ctables_table *t, const struct ccase *c, } } +static void +recurse_subtotals (struct ctables_table *t, const struct ccase *c, + size_t ix[PIVOT_N_AXES], + const struct ctables_category *cats[PIVOT_N_AXES][10], + double weight, + enum pivot_axis_type start_axis, size_t start_nest) +{ + for (enum pivot_axis_type a = start_axis; a < PIVOT_N_AXES; a++) + { + const struct ctables_nest *nest = &t->stacks[a].nests[ix[a]]; + for (size_t i = start_nest; i < nest->n; i++) + { + if (i == nest->scale_idx) + continue; + + const struct ctables_category *save = cats[a][i]; + if (save->subtotal) + { + cats[a][i] = save->subtotal; + ctables_cell_add__ (t, c, ix, cats, weight); + recurse_subtotals (t, c, ix, cats, weight, a, i + 1); + cats[a][i] = save; + } + } + start_nest = 0; + } +} + static void ctables_cell_insert (struct ctables_table *t, const struct ccase *c, @@ -2484,24 +2512,7 @@ ctables_cell_insert (struct ctables_table *t, ctables_cell_add__ (t, c, ix, cats, weight); recurse_totals (t, c, ix, cats, weight, 0, 0); - - for (enum pivot_axis_type a = 0; a < PIVOT_N_AXES; a++) - { - const struct ctables_nest *nest = &t->stacks[a].nests[ix[a]]; - for (size_t i = 0; i < nest->n; i++) - { - if (i == nest->scale_idx) - continue; - - const struct ctables_category *save = cats[a][i]; - if (save->subtotal) - { - cats[a][i] = save->subtotal; - ctables_cell_add__ (t, c, ix, cats, weight); - cats[a][i] = save; - } - } - } + recurse_subtotals (t, c, ix, cats, weight, 0, 0); } struct merge_item