X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Foutput%2Fpivot-table.h;h=f2125c7058b3c103e09a3909a39be019c0cca337;hb=209f7e5ccf28c97641b9e69ef6b9df81efe4dc38;hp=88edb62031c5227b304bb62a761704d25a03b47c;hpb=409dfe7159b9b0fd96c67cfddd4ffa93e05aa9b2;p=pspp diff --git a/src/output/pivot-table.h b/src/output/pivot-table.h index 88edb62031..f2125c7058 100644 --- a/src/output/pivot-table.h +++ b/src/output/pivot-table.h @@ -25,6 +25,8 @@ #include "libpspp/hmap.h" #include "output/table.h" +struct ccase; +struct dictionary; struct pivot_value; struct variable; union value; @@ -177,9 +179,8 @@ enum pivot_axis_type { PIVOT_AXIS_LAYER, PIVOT_AXIS_ROW, - PIVOT_AXIS_COLUMN, - - PIVOT_N_AXES + PIVOT_AXIS_COLUMN +#define PIVOT_N_AXES 3 }; const char *pivot_axis_type_to_string (enum pivot_axis_type); @@ -281,6 +282,55 @@ void pivot_dimension_destroy (struct pivot_dimension *); void pivot_dimension_dump (const struct pivot_dimension *, const struct pivot_table *, int indentation); +/* Split file handling with pivot tables. + + When SPLIT FILE is in effect with the LAYERED option, values for the split + file variables need to be incorporated into pivot table output. These + functions make that easier. + + To use them: + + 1. After adding the rest of the dimensions to an output pivot table, call + pivot_splits_create(). If there are any and LAYERED mode is in use, then + pivot_splits_create() will add a dimension for each split file + variable and return a structure. Otherwise, it returns NULL. + + 2. Before adding data to the pivot table for each SPLIT FILE group, call + pivot_splits_new_split(), passing in an example case from the group (the + first or last case is fine). This will the split file handler add + categories for the group to the split dimensions. + + pivot_splits_new_split() does nothing if given a null pivot_splits, so + it's fine to call it unconditionally. + + 3. Use pivot_splits_put*(), instead of pivot_table_put*(), to add data to + the pivot table. These functions automatically add the current group + leaf indexes after the indexes passed in, as a convenience. + + These functions still work fine if given a null pivot_splits, so it's + fine to use them in all cases. + + 4. Destroy the pivot_splits with pivot_splits_destroy() when the pivot table + has been fully constructed. */ + +struct pivot_splits *pivot_splits_create (struct pivot_table *, + enum pivot_axis_type, + const struct dictionary *); +void pivot_splits_destroy (struct pivot_splits *); + +void pivot_splits_new_split (struct pivot_splits *, const struct ccase *); + +void pivot_splits_put1 (struct pivot_splits *, struct pivot_table *, + size_t idx1, struct pivot_value *); +void pivot_splits_put2 (struct pivot_splits *, struct pivot_table *, + size_t idx1, size_t idx2, struct pivot_value *); +void pivot_splits_put3 (struct pivot_splits *, struct pivot_table *, + size_t idx1, size_t idx2, size_t idx3, + struct pivot_value *); +void pivot_splits_put4 (struct pivot_splits *, struct pivot_table *, + size_t idx1, size_t idx2, size_t idx3, size_t idx4, + struct pivot_value *); + /* A pivot_category is a leaf (a category) or a group: - For a leaf, neither index is SIZE_MAX.