debugs n stuff

This commit is contained in:
Piotr Osiewicz 2025-08-11 09:50:20 +02:00
parent 2be18a200f
commit 74a6c78fff
3 changed files with 28 additions and 32 deletions

View file

@ -205,7 +205,7 @@ where
#[track_caller]
pub fn prev(&mut self) {
self.search_backward(|_| Ordering::Greater)
self.search_backward(|_| Ordering::Equal)
}
#[track_caller]
@ -283,7 +283,7 @@ where
#[track_caller]
pub fn next(&mut self) {
self.search_forward(|_| Ordering::Less)
self.search_forward(|_| Ordering::Equal)
}
#[track_caller]
@ -322,25 +322,18 @@ where
if entry.index < child_summaries.len() {
let index = child_summaries[entry.index..]
.partition_point(|item| filter_node(item).is_lt());
if index < child_summaries.len() - entry.index {
entry.index += index;
}
let position = Some(entry.index)
.filter(|index| *index < child_summaries.len())
.unwrap_or(child_summaries.len());
entry.index += index;
if let Some(summary) = child_summaries.get(position) {
if let Some(summary) = child_summaries.get(entry.index) {
entry.position.add_summary(summary, self.cx);
self.position.add_summary(summary, self.cx);
}
}
dbg!((entry.index, child_trees.len()));
child_trees.get(entry.index)
}
Node::Leaf { item_summaries, .. } => {
dbg!("Ayo");
if !descend {
let item_summary = &item_summaries[entry.index];
entry.index += 1;
@ -351,15 +344,10 @@ where
if entry.index < item_summaries.len() {
let index = item_summaries[entry.index..]
.partition_point(|item| filter_node(item).is_lt());
if index < item_summaries.len() - entry.index {
entry.index += index;
}
entry.index += index;
let position = Some(entry.index)
.filter(|index| *index < item_summaries.len())
.unwrap_or(item_summaries.len());
if let Some(summary) = item_summaries.get(position) {
entry.index += index;
if let Some(summary) = item_summaries.get(entry.index) {
entry.position.add_summary(summary, self.cx);
self.position.add_summary(summary, self.cx);
}

View file

@ -5,6 +5,7 @@ use arrayvec::ArrayVec;
pub use cursor::{Cursor, FilterCursor, Iter};
use rayon::prelude::*;
use std::borrow::Cow;
use std::fmt::Debug;
use std::marker::PhantomData;
use std::mem;
use std::{cmp::Ordering, fmt, iter::FromIterator, sync::Arc};
@ -54,7 +55,6 @@ impl Summary for &'static () {
}
fn add_summary(&mut self, _: &Self, _: &()) {}
// fn sub_summary(&mut self, _: &Self, _: &()) {}
}
/// Each [`Summary`] type can have more than one [`Dimension`] type that it measures.
@ -214,14 +214,20 @@ impl<T: Item> SumTree<T> {
let mut iter = iter.into_iter().fuse().peekable();
while iter.peek().is_some() {
let items: ArrayVec<T, { 2 * TREE_BASE }> = iter.by_ref().take(2 * TREE_BASE).collect();
let item_summaries: ArrayVec<T::Summary, { 2 * TREE_BASE }> =
items.iter().map(|item| item.summary(cx)).collect();
let mut summary = item_summaries[0].clone();
for item_summary in &item_summaries[1..] {
<T::Summary as Summary>::add_summary(&mut summary, item_summary, cx);
}
let item_summaries: ArrayVec<T::Summary, { 2 * TREE_BASE }> = items
.iter()
.scan(None, |previous_item, item| {
let summary = item.summary(cx);
let current_item = if let Some(mut base) = previous_item.take() {
<T::Summary as Summary>::add_summary(&mut base, &summary, cx);
base
} else {
summary
};
_ = previous_item.insert(current_item.clone());
Some(current_item)
})
.collect();
nodes.push(Node::Leaf {
items,
item_summaries,
@ -1189,9 +1195,11 @@ mod tests {
// Multiple-element tree
let mut tree = SumTree::default();
tree.extend(vec![1, 2, 3, 4, 5, 6], &());
let mut cursor = tree.cursor::<IntegersSummary>(&());
assert_eq!(cursor.slice(&Count(2), Bias::Right).items(&()), [1, 2]);
let slice = cursor.slice(&Count(2), Bias::Right);
assert_eq!(slice.items(&()), [1, 2]);
assert_eq!(cursor.item(), Some(&3));
assert_eq!(cursor.prev_item(), Some(&2));
assert_eq!(cursor.next_item(), Some(&4));

View file

@ -406,9 +406,9 @@ mod tests {
map.insert("baa", 3);
map.insert("baaab", 4);
map.insert("c", 5);
dbg!(&map);
let result = map
.iter_from(&"ba")
let items = map.iter_from(&"ba");
let result = items
.take_while(|(key, _)| key.starts_with("ba"))
.collect::<Vec<_>>();