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
+15 -9
View File
@@ -19,7 +19,7 @@ use crate::tree_item::TreeItem;
#[derive(Debug, Default)]
pub struct TreeState<Identifier> {
pub(super) offset: usize,
pub(super) opened: HashSet<Vec<Identifier>>,
pub(super) open: HashSet<Vec<Identifier>>,
pub(super) selected: Vec<Identifier>,
pub(super) ensure_selected_in_view_on_next_render: bool,
pub(super) last_biggest_index: usize,
@@ -36,8 +36,14 @@ where
}
#[must_use]
#[deprecated = "Use self.get_open()"]
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]
@@ -51,7 +57,7 @@ where
&self,
items: &'a [TreeItem<'a, Identifier>],
) -> Vec<Flattened<'a, Identifier>> {
flatten(&self.opened, items, &[])
flatten(&self.open, items, &[])
}
/// Selects the given identifier.
@@ -79,7 +85,7 @@ where
if identifier.is_empty() {
false
} 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 `false` when it was already closed.
pub fn close(&mut self, identifier: &[Identifier]) -> bool {
self.opened.remove(identifier)
self.open.remove(identifier)
}
/// Toggles a tree node open/close state.
@@ -98,7 +104,7 @@ where
pub fn toggle(&mut self, identifier: Vec<Identifier>) -> bool {
if identifier.is_empty() {
false
} else if self.opened.contains(&identifier) {
} else if self.open.contains(&identifier) {
self.close(&identifier)
} else {
self.open(identifier)
@@ -119,10 +125,10 @@ where
///
/// Returns `true` when any node was closed.
pub fn close_all(&mut self) -> bool {
if self.opened.is_empty() {
if self.open.is_empty() {
false
} else {
self.opened.clear();
self.open.clear();
true
}
}
@@ -253,7 +259,7 @@ where
pub fn key_left(&mut self) -> bool {
self.ensure_selected_in_view_on_next_render = true;
// 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 {
// Select the parent by removing the leaf from selection
let popped = self.selected.pop();