Eliminate label_depth from Axis too.
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Apr 2025 15:54:31 +0000 (08:54 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 6 Apr 2025 15:54:31 +0000 (08:54 -0700)
rust/pspp/src/output/pivot/mod.rs
rust/pspp/src/output/pivot/output.rs

index 6c17503f66435409a679aa075e8132d6306bcbdb..9f13556f3498a5cc2a02ec09c419fddba1872592 100644 (file)
@@ -264,9 +264,6 @@ impl From<Axis2> for Axis3 {
 pub struct Axis {
     /// `dimensions[0]` is the innermost dimension.
     dimensions: Vec<usize>,
-
-    /// Sum of `dimensions[*].label_depth`.
-    label_depth: usize,
 }
 
 pub struct AxisIterator {
@@ -309,6 +306,10 @@ impl PivotTable {
     fn axis_extent(&self, axis: Axis3) -> usize {
         self.axis_dimensions(axis).map(|d| d.len()).product()
     }
+
+    fn axis_label_depth(&self, axis: Axis3) -> usize {
+        self.axis_dimensions(axis).map(|d| d.label_depth()).sum()
+    }
 }
 
 /// Dimensions.
@@ -664,7 +665,6 @@ impl PivotTableBuilder {
         let mut dimensions = Vec::with_capacity(self.dimensions.len());
         let mut axes = EnumMap::from_fn(|_axis| Axis {
             dimensions: Vec::with_capacity(self.dimensions.len()),
-            label_depth: 0,
         });
         for (top_index, d) in self.dimensions.into_iter().enumerate() {
             let axis = d.axis;
@@ -675,7 +675,6 @@ impl PivotTableBuilder {
             };
             let d = d.build(axes[axis].dimensions.len(), top_index, label_position);
             axes[axis].dimensions.push(dimensions.len());
-            axes[axis].label_depth += d.label_depth();
             dimensions.push(d);
         }
         table.dimensions = dimensions;
index 52990c26ba889ec9031b8ba36314fff5dd7fbc8c..43707ceddcfb5e9920ae5b9c376ad09681cce972 100644 (file)
@@ -162,8 +162,8 @@ impl PivotTable {
         let row_enumeration = self.enumerate_axis(Axis3::Y, layer_indexes, self.look.omit_empty);
         let data = Coord2::new(column_enumeration.len(), row_enumeration.len());
         let stub = Coord2::new(
-            self.axes[Axis3::Y].label_depth,
-            self.axes[Axis3::X].label_depth,
+            self.axis_label_depth(Axis3::Y),
+            self.axis_label_depth(Axis3::X),
         );
         let n = EnumMap::from_fn(|axis| data[axis] + stub[axis]).into();
         let mut body = Table::new(
@@ -377,8 +377,8 @@ fn compose_headings(
     let v = !h;
     let h_axis = &pt.axes[h.into()];
     let v_axis = &pt.axes[v.into()];
-    let v_size = h_axis.label_depth;
-    let h_ofs = v_axis.label_depth;
+    let v_size = pt.axis_label_depth(h.into());
+    let h_ofs = pt.axis_label_depth(v.into());
     let n_columns = column_enumeration.len();
 
     if h_axis.dimensions.is_empty() || n_columns == 0 || v_size == 0 {