X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Fctables.c;h=812e6b3a8af3d91d2805093e38b5214784c114ad;hb=8a0397328b6230fd49724e1c6d91a5a545d2fb4b;hp=f81dc818273ef2bfe3b3467e163e205350dac15b;hpb=c2a759b7af96603bc6a692b09d0e7e65730db082;p=pspp diff --git a/src/language/stats/ctables.c b/src/language/stats/ctables.c index f81dc81827..812e6b3a8a 100644 --- a/src/language/stats/ctables.c +++ b/src/language/stats/ctables.c @@ -4688,6 +4688,37 @@ ctables_prepare_table (struct ctables_table *t) break; } } + else if (at == CTAT_LAYERCOL && a == PIVOT_AXIS_ROW && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_LAYER) + { + for (size_t k = nest->n - 1; k < nest->n; k--) + { + if (k == nest->scale_idx) + continue; + nest->areas[at][nest->n_areas[at]++] = k; + break; + } + } + else if (at == CTAT_LAYERROW && a == PIVOT_AXIS_COLUMN && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW) + { + for (size_t k = nest->n - 1; k < nest->n; k--) + { + if (k == nest->scale_idx) + continue; + nest->areas[at][nest->n_areas[at]++] = k; + break; + } + } + else if (at == CTAT_LAYER && t->label_axis[a] == PIVOT_AXIS_LAYER) + { + for (size_t k = nest->n - 1; k < nest->n; k--) + { + if (k == nest->scale_idx) + continue; + nest->areas[at][nest->n_areas[at]++] = k; + break; + } + continue; + } if (at == CTAT_SUBTABLE && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN) { @@ -4699,6 +4730,34 @@ ctables_prepare_table (struct ctables_table *t) nest->n_areas[at]--; continue; } + else if (at == CTAT_SUBTABLE && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_LAYER) + { + if (a == PIVOT_AXIS_ROW) + { + size_t n = nest->n_areas[at]; + if (n > 1) + { + nest->areas[at][n - 2] = nest->areas[at][n - 1]; + nest->n_areas[at]--; + } + } + else if (a == PIVOT_AXIS_COLUMN) + { + if (nest->n_areas[at] > 0) + nest->n_areas[at]--; + } + continue; + } + else if (at == CTAT_SUBTABLE && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW) + { + size_t n_drop = (a == PIVOT_AXIS_LAYER ? 0 + : a == PIVOT_AXIS_COLUMN ? 2 + : 0); + for (size_t i = 0; i < n_drop; i++) + if (nest->n_areas[at] > 0) + nest->n_areas[at]--; + continue; + } else if (at == CTAT_ROW && a == PIVOT_AXIS_COLUMN && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN) continue; else if (at == CTAT_COL && a == PIVOT_AXIS_ROW && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN) @@ -4711,6 +4770,28 @@ ctables_prepare_table (struct ctables_table *t) } continue; } + else if (at == CTAT_COL && a == PIVOT_AXIS_ROW && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW) + continue; + else if (at == CTAT_ROW && a == PIVOT_AXIS_COLUMN && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW) + { + size_t n = nest->n_areas[at]; + if (n > 1) + { + nest->areas[at][n - 2] = nest->areas[at][n - 1]; + nest->n_areas[at]--; + } + continue; + } + else if (at == CTAT_COL && a == PIVOT_AXIS_ROW && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_LAYER) + { + size_t n = nest->n_areas[at]; + if (n > 1) + { + nest->areas[at][n - 2] = nest->areas[at][n - 1]; + nest->n_areas[at]--; + } + continue; + } bool drop_last = (at == CTAT_SUBTABLE ? a != PIVOT_AXIS_LAYER : at == CTAT_ROW ? a == PIVOT_AXIS_COLUMN @@ -4720,8 +4801,8 @@ ctables_prepare_table (struct ctables_table *t) nest->n_areas[at]--; bool drop_additional - = (t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN - && (((at == CTAT_ROW || at == CTAT_LAYERROW) && a == PIVOT_AXIS_ROW))); + = ((t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN && (at == CTAT_ROW || at == CTAT_LAYERROW) && a == PIVOT_AXIS_ROW) + || (t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW && (at == CTAT_COL || at == CTAT_LAYERCOL) && a == PIVOT_AXIS_COLUMN)); if (drop_additional && nest->n_areas[at] > 0) nest->n_areas[at]--; }