perf(state): const get_open

no need for additional logic, its read only anyway

The only reason for this was to keep the API with less breaking changes.
Performance is more important.
This commit is contained in:
EdJoPaTo
2024-05-14 15:21:33 +02:00
parent fa85e7bb56
commit bba94dcf88
2 changed files with 16 additions and 10 deletions
+1 -1
View File
@@ -303,7 +303,7 @@ where
); );
let symbol = if item.children.is_empty() { let symbol = if item.children.is_empty() {
self.node_no_children_symbol self.node_no_children_symbol
} else if state.opened.contains(identifier) { } else if state.open.contains(identifier) {
self.node_open_symbol self.node_open_symbol
} else { } else {
self.node_closed_symbol self.node_closed_symbol
+15 -9
View File
@@ -19,7 +19,7 @@ use crate::tree_item::TreeItem;
#[derive(Debug, Default)] #[derive(Debug, Default)]
pub struct TreeState<Identifier> { pub struct TreeState<Identifier> {
pub(super) offset: usize, pub(super) offset: usize,
pub(super) opened: HashSet<Vec<Identifier>>, pub(super) open: HashSet<Vec<Identifier>>,
pub(super) selected: Vec<Identifier>, pub(super) selected: Vec<Identifier>,
pub(super) ensure_selected_in_view_on_next_render: bool, pub(super) ensure_selected_in_view_on_next_render: bool,
pub(super) last_biggest_index: usize, pub(super) last_biggest_index: usize,
@@ -36,8 +36,14 @@ where
} }
#[must_use] #[must_use]
#[deprecated = "Use self.get_open()"]
pub fn get_all_opened(&self) -> Vec<Vec<Identifier>> { pub fn get_all_opened(&self) -> Vec<Vec<Identifier>> {
self.opened.iter().cloned().collect() self.open.iter().cloned().collect()
}
#[must_use]
pub const fn get_open(&self) -> &HashSet<Vec<Identifier>> {
&self.open
} }
#[must_use] #[must_use]
@@ -51,7 +57,7 @@ where
&self, &self,
items: &'a [TreeItem<'a, Identifier>], items: &'a [TreeItem<'a, Identifier>],
) -> Vec<Flattened<'a, Identifier>> { ) -> Vec<Flattened<'a, Identifier>> {
flatten(&self.opened, items, &[]) flatten(&self.open, items, &[])
} }
/// Selects the given identifier. /// Selects the given identifier.
@@ -79,7 +85,7 @@ where
if identifier.is_empty() { if identifier.is_empty() {
false false
} else { } else {
self.opened.insert(identifier) self.open.insert(identifier)
} }
} }
@@ -87,7 +93,7 @@ where
/// Returns `true` when it was open and has been closed. /// Returns `true` when it was open and has been closed.
/// Returns `false` when it was already closed. /// Returns `false` when it was already closed.
pub fn close(&mut self, identifier: &[Identifier]) -> bool { pub fn close(&mut self, identifier: &[Identifier]) -> bool {
self.opened.remove(identifier) self.open.remove(identifier)
} }
/// Toggles a tree node open/close state. /// Toggles a tree node open/close state.
@@ -98,7 +104,7 @@ where
pub fn toggle(&mut self, identifier: Vec<Identifier>) -> bool { pub fn toggle(&mut self, identifier: Vec<Identifier>) -> bool {
if identifier.is_empty() { if identifier.is_empty() {
false false
} else if self.opened.contains(&identifier) { } else if self.open.contains(&identifier) {
self.close(&identifier) self.close(&identifier)
} else { } else {
self.open(identifier) self.open(identifier)
@@ -119,10 +125,10 @@ where
/// ///
/// Returns `true` when any node was closed. /// Returns `true` when any node was closed.
pub fn close_all(&mut self) -> bool { pub fn close_all(&mut self) -> bool {
if self.opened.is_empty() { if self.open.is_empty() {
false false
} else { } else {
self.opened.clear(); self.open.clear();
true true
} }
} }
@@ -253,7 +259,7 @@ where
pub fn key_left(&mut self) -> bool { pub fn key_left(&mut self) -> bool {
self.ensure_selected_in_view_on_next_render = true; self.ensure_selected_in_view_on_next_render = true;
// Reimplement self.close because of multiple different borrows // Reimplement self.close because of multiple different borrows
let mut changed = self.opened.remove(&self.selected); let mut changed = self.open.remove(&self.selected);
if !changed { if !changed {
// Select the parent by removing the leaf from selection // Select the parent by removing the leaf from selection
let popped = self.selected.pop(); let popped = self.selected.pop();