umya_spreadsheet/structs/
rows.rs1use crate::structs::Row;
2use crate::traits::AdjustmentValue;
3use std::collections::HashMap;
4
5#[derive(Clone, Default, Debug)]
6pub(crate) struct Rows {
7 rows: HashMap<u32, Box<Row>>,
8}
9impl Rows {
10 #[inline]
11 pub(crate) fn has_sheet_data(&self) -> bool {
12 !self.rows.is_empty()
13 }
14
15 #[inline]
17 pub(crate) fn get_row_dimensions(&self) -> Vec<&Row> {
18 self.rows.values().map(Box::as_ref).collect()
19 }
20
21 #[inline]
23 pub(crate) fn get_row_dimensions_mut(&mut self) -> Vec<&mut Row> {
24 self.rows.values_mut().map(Box::as_mut).collect()
25 }
26
27 #[inline]
29 pub(crate) fn get_row_dimensions_to_hashmap(&self) -> &HashMap<u32, Box<Row>> {
30 &self.rows
31 }
32
33 #[inline]
34 pub(crate) fn get_row_dimensions_to_hashmap_mut(&mut self) -> &mut HashMap<u32, Box<Row>> {
35 &mut self.rows
36 }
37
38 #[inline]
40 pub(crate) fn get_row_dimension(&self, row: &u32) -> Option<&Row> {
41 self.rows.get(row).map(Box::as_ref)
42 }
43
44 #[inline]
46 pub(crate) fn get_row_dimension_mut(&mut self, row: &u32) -> &mut Row {
47 self.rows.entry(*row).or_insert_with(|| {
48 let mut obj = Row::default();
49 obj.set_row_num(*row);
50 Box::new(obj)
51 })
52 }
53
54 #[inline]
57 pub(crate) fn set_row_dimension(&mut self, value: Row) -> &mut Self {
58 let row = value.get_row_num();
59 self.rows.insert(*row, Box::new(value));
60 self
61 }
62
63 #[inline]
64 pub(crate) fn rebuild_map(&mut self) {
65 self.rows = self
66 .get_row_dimensions_to_hashmap_mut()
67 .iter_mut()
68 .map(|(_, row)| (*row.get_row_num(), std::mem::take(row)))
69 .collect();
70 }
71}
72impl AdjustmentValue for Rows {
73 fn adjustment_insert_value(&mut self, root_num: &u32, offset_num: &u32) {
74 for row_dimension in self.get_row_dimensions_mut() {
75 row_dimension.adjustment_insert_value(root_num, offset_num);
76 }
77 self.rebuild_map();
78 }
79
80 fn adjustment_remove_value(&mut self, root_num: &u32, offset_num: &u32) {
81 self.get_row_dimensions_to_hashmap_mut()
82 .retain(|_, k| !(k.is_remove_value(root_num, offset_num)));
83 for row_dimension in self.get_row_dimensions_mut() {
84 row_dimension.adjustment_remove_value(root_num, offset_num);
85 }
86 self.rebuild_map();
87 }
88}