traaains/utils/interval_tree/
mod.rs1mod heap;
2mod stack;
3
4pub use heap::IntervalBitmapVec;
5pub use stack::IntervalBitmap;
6
7pub const fn interval_to_nodes(size: usize) -> usize {
10 2 * size.next_power_of_two() - 1
11}
12
13pub const fn nodes_to_bitfields(nodes: usize) -> usize {
15 nodes / usize::BITS as usize + 1
16}
17
18pub const fn interval_to_bitfields(size: usize) -> usize {
19 nodes_to_bitfields(interval_to_nodes(size))
20}
21
22pub const fn interval_to_internal(size: usize) -> usize {
25 size.next_power_of_two() - 1
26}
27
28pub const fn leaves_to_depth(size: usize) -> usize {
30 size.next_power_of_two().ilog2() as usize
31}
32
33pub fn parent_for(index: usize) -> Option<usize> {
36 index.checked_sub(1)?.checked_div(2)
37}
38
39pub fn left_child(index: usize) -> usize {
42 index * 2 + 1
43}
44
45pub fn right_child(index: usize) -> usize {
46 index * 2 + 2
47}