use seize::LocalGuard;
use crate::alloc_trait::TreeAllocator;
use crate::policy::LeafPolicy;
use crate::policy::RefPolicy as RefLeafPolicy;
use crate::tree::MassTreeGeneric;
use super::iterator::RangeBound;
impl<P, A> MassTreeGeneric<P, A>
where
P: LeafPolicy + RefLeafPolicy,
A: TreeAllocator<P>,
{
pub fn scan_ref<F>(
&self,
start: RangeBound<'_>,
end: RangeBound<'_>,
visitor: F,
guard: &LocalGuard<'_>,
) -> usize
where
F: FnMut(&[u8], &P::Value) -> bool,
{
self.range_forward(start, end, guard).for_each_ref(visitor)
}
pub fn scan_batch_ref<F>(
&self,
start: RangeBound<'_>,
end: RangeBound<'_>,
visitor: F,
guard: &LocalGuard<'_>,
) -> usize
where
F: FnMut(&[u8], &P::Value) -> bool,
{
self.range_forward(start, end, guard)
.for_each_batch_ref(visitor)
}
pub fn scan_intra_leaf_batch_ref<F>(
&self,
start: RangeBound<'_>,
end: RangeBound<'_>,
visitor: F,
guard: &LocalGuard<'_>,
) -> usize
where
F: FnMut(&[u8], &P::Value) -> bool,
{
self.range_forward(start, end, guard)
.for_each_intra_leaf_batch_ref(visitor)
}
pub fn scan_rev_batch_ref<F>(
&self,
start: RangeBound<'_>,
end: RangeBound<'_>,
visitor: F,
guard: &LocalGuard<'_>,
) -> usize
where
F: FnMut(&[u8], &P::Value) -> bool,
{
self.range(start, end, guard).rev_for_each_ref(visitor)
}
}