pub fn reserve_range(&mut self, ids: RangeInclusive<Long>) -> RangeInclusive<Short>
    where
        Short: TypedNumber<N = usize> + Copy,
        Long: Copy + Eq + std::hash::Hash + TypedNumber<N = u128>,
    {
        let inner_start = ids.start().as_number() >> SHIFT;
        let inner_end = ids.end().as_number() >> SHIFT;
        let mut previous = None;
        for i in inner_start..inner_end {
            let short = self.table.shorten(i);
            if let Some(prev) = previous {
                assert!(prev == short - 1);
            }
            previous = Some(short);
        }

        let r: RangeInclusive<Short> = self.shorten(*ids.start())..=self.shorten(*ids.end());

        debug_assert_eq!(
            (ids.end().as_number() - ids.start().as_number()),
            ((r.end().as_number() - r.start().as_number()) as u128)
        );
        r
    }
/// For a range of Long Id_s which must either:
/// Have never been seen before by this IdCompressor
/// OR
/// Is a subset of a range already reserved by this IdCompressor,
/// get the corresponding range of Short ids.
/// After calling this, the normal `shorten` and `full` functions can be used with these ids.
///
/// Performance: Ranges are effectively rounded up and down to multiples of 2^SHIFT, so consider allocating ids accordingly.
For a range of Long Id_s which must either:
Have never been seen before by this IdCompressor
OR
Is a subset of a range already reserved by this IdCompressor,
get the corresponding range of Short ids.
After calling this, the normal `shorten` and `full` functions can be used with these ids.

Ranges are effectively rounded up and down to multiples of 2^SHIFT, so consider allocating ids accordingly.
For a range of Long Id_s which must either : Have never been seen before by this IdCompressor OR Is a subset of a range already reserved by this IdCompressor get the corresponding range of Short ids . After calling this the normal ` shorten ` and ` full ` functions can be used with these ids . Ranges are effectively rounded up and down to multiples of 2^SHIFT so consider allocating ids accordingly .
pub fn reserve_range(&mut self, ids: RangeInclusive<Long>) -> RangeInclusive<Short>
    where
        Short: TypedNumber<N = usize> + Copy,
        Long: Copy + Eq + std::hash::Hash + TypedNumber<N = u128>,
    {
        let inner_start = ids.start().as_number() >> SHIFT;
        let inner_end = ids.end().as_number() >> SHIFT;
        let mut previous = None;
        for i in inner_start..inner_end {
            let short = self.table.shorten(i);
            if let Some(prev) = previous {
                assert!(prev == short - 1);
            }
            previous = Some(short);
        }
        let r: RangeInclusive<Short> = self.shorten(*ids.start())..=self.shorten(*ids.end());
        debug_assert_eq!(
            (ids.end().as_number() - ids.start().as_number()),
            ((r.end().as_number() - r.start().as_number()) as u128)
        );
        r
    }
pub fn reserve_range ( & mut self , ids : RangeInclusive < Long > ) -> RangeInclusive < Short > where Short : TypedNumber < N = usize > + Copy , Long : Copy + Eq + std :: hash :: Hash + TypedNumber < N = u128 > , { let inner_start = ids . start ( ) . as_number ( ) >> SHIFT ; let inner_end = ids . end ( ) . as_number ( ) >> SHIFT ; let mut previous = None ; for i in inner_start .. inner_end { let short = self . table . shorten ( i ) ; if let Some ( prev ) = previous { assert ! ( prev short 1 ) ; } previous = Some ( short ) ; } let r : RangeInclusive < Short > = self . shorten ( * ids . start ( ) ) ..= self . shorten ( * ids . end ( ) ) ; debug_assert_eq ! ( ( ids end ( ) as_number ( ) ids start ( ) as_number ( ) ) ( ( r end ( ) as_number ( ) r start ( ) as_number ( ) ) as u128 ) ) ; r }
For a range of Long Id_s which must either:
Have never been seen before by this IdCompressor
OR
Is a subset of a range already reserved by this IdCompressor,
get the corresponding range of Short ids.
For a range of Long Id_s which must either : Have never been seen before by this IdCompressor OR Is a subset of a range already reserved by this IdCompressor get the corresponding range of Short ids .
&mut self
ids
RangeInclusive<Long>
&mut self
ids
RangeInclusive<Long>