pub trait Query<B: BTreeTrait> {
type QueryArg: Clone;
// Required methods
fn init(target: &Self::QueryArg) -> Self;
fn find_node(
&mut self,
target: &Self::QueryArg,
child_caches: &[Child<B>]
) -> FindResult;
fn find_element(
&mut self,
target: &Self::QueryArg,
elements: &[B::Elem]
) -> FindResult;
// Provided methods
fn delete(
elements: &mut HeapVec<B::Elem>,
query: &Self::QueryArg,
elem_index: usize,
offset: usize
) -> Option<B::Elem> { ... }
fn drain_range<'a, 'b>(
elements: &'a mut HeapVec<B::Elem>,
start_query: &'b Self::QueryArg,
end_query: &'b Self::QueryArg,
start: Option<QueryResult>,
end: Option<QueryResult>
) -> Box<dyn Iterator<Item = B::Elem> + 'a> { ... }
fn delete_range(
elements: &mut HeapVec<B::Elem>,
start_query: &Self::QueryArg,
end_query: &Self::QueryArg,
start: Option<QueryResult>,
end: Option<QueryResult>
) { ... }
}