orx-split-vec 3.8.0

An efficient constant access time vector with dynamic capacity and pinned elements.
Documentation
pub(super) const FIRST_FRAGMENT_CAPACITY_POW: usize = 2;
pub(super) const FIRST_FRAGMENT_CAPACITY: usize = usize::pow(2, FIRST_FRAGMENT_CAPACITY_POW as u32);
pub(super) const SIZE_USIZE: usize = core::mem::size_of::<usize>() * 8;
pub(super) const OFFSET_FRAGMENT_IDX: usize = SIZE_USIZE - FIRST_FRAGMENT_CAPACITY_POW - 1;

const fn fragment_capacity(fragment_idx: usize) -> usize {
    usize::pow(2, (fragment_idx + FIRST_FRAGMENT_CAPACITY_POW) as u32)
}

const fn cumulative_capacity(fragment_idx: usize) -> usize {
    usize::pow(2, (fragment_idx + FIRST_FRAGMENT_CAPACITY_POW + 1) as u32) - FIRST_FRAGMENT_CAPACITY
}

const fn capacities_len() -> usize {
    #[cfg(target_pointer_width = "32")]
    return 30;

    #[cfg(target_pointer_width = "64")]
    return 33;
}

pub(super) const CAPACITIES: [usize; capacities_len() - 1] = [
    fragment_capacity(0),
    fragment_capacity(1),
    fragment_capacity(2),
    fragment_capacity(3),
    fragment_capacity(4),
    fragment_capacity(5),
    fragment_capacity(6),
    fragment_capacity(7),
    fragment_capacity(8),
    fragment_capacity(9),
    fragment_capacity(10),
    fragment_capacity(11),
    fragment_capacity(12),
    fragment_capacity(13),
    fragment_capacity(14),
    fragment_capacity(15),
    fragment_capacity(16),
    fragment_capacity(17),
    fragment_capacity(18),
    fragment_capacity(19),
    fragment_capacity(20),
    fragment_capacity(21),
    fragment_capacity(22),
    fragment_capacity(23),
    fragment_capacity(24),
    fragment_capacity(25),
    fragment_capacity(26),
    fragment_capacity(27),
    fragment_capacity(28),
    #[cfg(target_pointer_width = "64")]
    fragment_capacity(29),
    #[cfg(target_pointer_width = "64")]
    fragment_capacity(30),
    #[cfg(target_pointer_width = "64")]
    fragment_capacity(31),
];

pub(super) const CUMULATIVE_CAPACITIES: [usize; capacities_len()] = [
    0,
    cumulative_capacity(0),
    cumulative_capacity(1),
    cumulative_capacity(2),
    cumulative_capacity(3),
    cumulative_capacity(4),
    cumulative_capacity(5),
    cumulative_capacity(6),
    cumulative_capacity(7),
    cumulative_capacity(8),
    cumulative_capacity(9),
    cumulative_capacity(10),
    cumulative_capacity(11),
    cumulative_capacity(12),
    cumulative_capacity(13),
    cumulative_capacity(14),
    cumulative_capacity(15),
    cumulative_capacity(16),
    cumulative_capacity(17),
    cumulative_capacity(18),
    cumulative_capacity(19),
    cumulative_capacity(20),
    cumulative_capacity(21),
    cumulative_capacity(22),
    cumulative_capacity(23),
    cumulative_capacity(24),
    cumulative_capacity(25),
    cumulative_capacity(26),
    cumulative_capacity(27),
    cumulative_capacity(28),
    #[cfg(target_pointer_width = "64")]
    cumulative_capacity(29),
    #[cfg(target_pointer_width = "64")]
    cumulative_capacity(30),
    #[cfg(target_pointer_width = "64")]
    cumulative_capacity(31),
];