- bool add_vars = (at == CTAT_LAYER ? a == PIVOT_AXIS_LAYER
- : at == CTAT_LAYERROW ? a != PIVOT_AXIS_COLUMN
- : at == CTAT_LAYERCOL ? a != PIVOT_AXIS_ROW
- : at == CTAT_TABLE ? false
- : true);
- if (add_vars)
- for (size_t k = 0; k < nest->n; k++)
- {
- if (k == nest->scale_idx)
- continue;
- nest->areas[at][nest->n_areas[at]++] = k;
- }
- else if ((at == CTAT_LAYERCOL && a == PIVOT_AXIS_ROW && t->label_axis[a] != a)
- || (at == CTAT_LAYERROW && a == PIVOT_AXIS_COLUMN && t->label_axis[a] != a)
- || (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;
- }
-
- size_t n_drop;
- bool drop_inner = false;
- if (at == CTAT_SUBTABLE
- && t->clabels_from_axis != PIVOT_AXIS_LAYER
- && t->clabels_to_axis != PIVOT_AXIS_LAYER)
- n_drop = a == t->clabels_from_axis ? 2 : 0;
- else if (at == CTAT_SUBTABLE
- && t->clabels_from_axis != PIVOT_AXIS_LAYER
- && t->clabels_to_axis == PIVOT_AXIS_LAYER)
- {
- drop_inner = a == t->clabels_from_axis;
- n_drop = a != t->clabels_from_axis && a != PIVOT_AXIS_LAYER;
- }
- else if (at == CTAT_ROW && a == PIVOT_AXIS_COLUMN && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN)
- n_drop = 0;
- else if (at == CTAT_COL && a == PIVOT_AXIS_ROW && t->label_axis[PIVOT_AXIS_ROW] == PIVOT_AXIS_COLUMN)
- {
- drop_inner = true;
- n_drop = 0;
- }
- else if (at == CTAT_COL && a == PIVOT_AXIS_ROW && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW)
- n_drop = 0;
- else if (at == CTAT_ROW && a == PIVOT_AXIS_COLUMN && t->label_axis[PIVOT_AXIS_COLUMN] == PIVOT_AXIS_ROW)