fix: Changed the implementation to not require the direct use of identifiers, and to instead generate them using the hashes of the contents of each tree item

This commit is contained in:
2024-11-14 17:35:40 -07:00
parent 8a91f662dd
commit 6c10db760d
6 changed files with 198 additions and 183 deletions
+26 -31
View File
@@ -7,64 +7,59 @@ use ratatui::widgets::StatefulWidget;
use managarr_tree_widget::{Tree, TreeItem, TreeState};
#[must_use]
fn example_items() -> Vec<TreeItem<&'static str, &'static str>> {
fn example_items() -> Vec<TreeItem<&'static str>> {
vec![
TreeItem::new_leaf("a", "Alfa"),
TreeItem::new_leaf( "Alfa"),
TreeItem::new(
"b",
"Bravo",
vec![
TreeItem::new_leaf("c", "Charlie"),
TreeItem::new_leaf( "Charlie"),
TreeItem::new(
"d",
"Delta",
vec![
TreeItem::new_leaf("e", "Echo"),
TreeItem::new_leaf("f", "Foxtrot"),
TreeItem::new_leaf( "Echo"),
TreeItem::new_leaf( "Foxtrot"),
],
)
.expect("all item identifiers are unique"),
TreeItem::new_leaf("g", "Golf"),
TreeItem::new_leaf( "Golf"),
],
)
.expect("all item identifiers are unique"),
TreeItem::new_leaf("h", "Hotel"),
TreeItem::new_leaf( "Hotel"),
TreeItem::new(
"i",
"India",
vec![
TreeItem::new_leaf("j", "Juliett"),
TreeItem::new_leaf("k", "Kilo"),
TreeItem::new_leaf("l", "Lima"),
TreeItem::new_leaf("m", "Mike"),
TreeItem::new_leaf("n", "November"),
TreeItem::new_leaf( "Juliet"),
TreeItem::new_leaf("Kilo"),
TreeItem::new_leaf("Lima"),
TreeItem::new_leaf("Mike"),
TreeItem::new_leaf("November"),
],
)
.expect("all item identifiers are unique"),
TreeItem::new_leaf("o", "Oscar"),
TreeItem::new_leaf( "Oscar"),
TreeItem::new(
"p",
"Papa",
vec![
TreeItem::new_leaf("q", "Quebec"),
TreeItem::new_leaf("r", "Romeo"),
TreeItem::new_leaf("s", "Sierra"),
TreeItem::new_leaf("t", "Tango"),
TreeItem::new_leaf("u", "Uniform"),
TreeItem::new_leaf( "Quebec"),
TreeItem::new_leaf( "Romeo"),
TreeItem::new_leaf( "Sierra"),
TreeItem::new_leaf( "Tango"),
TreeItem::new_leaf( "Uniform"),
TreeItem::new(
"v",
"Victor",
vec![
TreeItem::new_leaf("w", "Whiskey"),
TreeItem::new_leaf("x", "Xray"),
TreeItem::new_leaf("y", "Yankee"),
TreeItem::new_leaf("Whiskey"),
TreeItem::new_leaf ("Xray"),
TreeItem::new_leaf( "Yankee"),
],
)
.expect("all item identifiers are unique"),
],
)
.expect("all item identifiers are unique"),
TreeItem::new_leaf("z", "Zulu"),
TreeItem::new_leaf( "Zulu"),
]
}
@@ -74,7 +69,7 @@ fn init(criterion: &mut Criterion) {
group.bench_function("empty", |bencher| {
bencher.iter(|| {
let items = Vec::<TreeItem<String, String>>::new();
let items = Vec::<TreeItem<String>>::new();
let _ = black_box(Tree::new(black_box(&items))).unwrap();
});
});
@@ -96,7 +91,7 @@ fn renders(criterion: &mut Criterion) {
let buffer_size = Rect::new(0, 0, 100, 100);
group.bench_function("empty", |bencher| {
let items: Vec<TreeItem<usize, String>> = vec![];
let items: Vec<TreeItem<String>> = vec![];
let tree = Tree::new(&items).unwrap();
let mut state = TreeState::default();
bencher.iter_batched(
@@ -112,8 +107,8 @@ fn renders(criterion: &mut Criterion) {
let items = example_items();
let tree = Tree::new(&items).unwrap();
let mut state = TreeState::default();
state.open(vec!["b"]);
state.open(vec!["b", "d"]);
state.open(vec![2]);
state.open(vec![2, 4]);
bencher.iter_batched(
|| (tree.clone(), Buffer::empty(buffer_size)),
|(tree, mut buffer)| {