Struct flatk::Offsets [−][src]
Expand description
A collection of offsets into another collection. This newtype is intended to verify basic invariants about offsets into another collection, namely that the collection is monotonically increasing and non-empty.
Implementations
Unchecked version of RemovePrefix::remove_prefix
.
Safety
This function may cause undefined behaviour in safe APIs if calling this function produces
an empty offsets
collection.
Remove n
offsets from the end.
Safety
This function may cause undefined behaviour in safe APIs if calling this function produces
an empty offsets
collection.
Returns an iterator over chunk sizes represented by the stored Offsets
.
pub fn values(&self) -> OffsetValues<'_>ⓘNotable traits for OffsetValues<'a>impl<'a> Iterator for OffsetValues<'a> type Item = usize;
pub fn values(&self) -> OffsetValues<'_>ⓘNotable traits for OffsetValues<'a>impl<'a> Iterator for OffsetValues<'a> type Item = usize;
impl<'a> Iterator for OffsetValues<'a> type Item = usize;
Returns an iterator over offset values.
Construct a set Offsets
from a given set of offsets.
Panics
The given offsets
must be a non-empty collection, otherwise this function will panic.
Moves an offset back by a specified amount.
This effectively transfers by
elements to the specified at
chunk from the preceeding chunk.
Panics
This function panics if at
is out of bounds.
If at
it zero, the beginning of the indexed range is simply extended, but an overflow
panic will be caused if the first offset is moved below zero since offsets are represented
by unsigned integers.
It is a logic error to move an offset past its preceeding offset because this will break the monotonicity of the offset sequence, which can cause panics from other function on the Offsets.
Example
use flatk::Offsets;
let mut o = Offsets::new(vec![0, 4, 9]);
o.move_back(1, 2);
assert_eq!(o, vec![0, 2, 9].into());
Moves an offset forward by a specified amount.
This effectively transfers by
elements to the specified at
chunk from the succeeding chunk.
If at
indexes the last offset, then the indexed range is simply increased.
Panics
This function panics if at
is out of bounds.
It is a logic error to move an offset past its succeeding offset because this will break the monotonicity of the offset sequence, which can cause panics from other function on the Offsets.
Example
use flatk::Offsets;
let mut o = Offsets::new(vec![0, 4, 9]);
o.move_forward(1, 2);
assert_eq!(o, vec![0, 6, 9].into());
Extend the last offset.
This effectively increases the last chunk size.
This function is the same as self.move_forward(self.len() - 1, by)
.
Example
use flatk::Offsets;
let mut o = Offsets::new(vec![0, 4, 9]);
o.extend_last(2);
assert_eq!(o, vec![0, 4, 11].into());
Shrink the last offset.
This effectively decreases the last chunk size.
This function is the same as self.move_back(self.len() - 1, by)
.
Panics
It is a logic error to move an offset past its preceeding offset because this will break the monotonicity of the offset sequence, which can cause panics from other function on the Offsets.
Example
use flatk::Offsets;
let mut o = Offsets::new(vec![0, 4, 9]);
o.shrink_last(2);
assert_eq!(o, vec![0, 4, 7].into());
Trait Implementations
Binary search the offsets for a given offset off
.
off
is expected to be with respect to the beginning of the range represented by the
current offsets. In other words, we are searching for offsets, not raw offset values
stored in Offsets
.
The semantics of this function are identical to Rust’s std::slice::binary_search
.
A default set of offsets must allocate.
Extend this set of offsets with a given iterator of offsets.
This operation automatically shifts the merged offsets in the iterator
to start from the last offset in self
.
Note that there will be 1 less offset added to self
than produced by
iter
since the first offset is only used to determine the relative
magnitude of the rest and corresponds to the last offset in self
.
extend_one
)Extends a collection with exactly one element.
extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
Convert ClumpedOffsets
into owned Offsets
.
This function causes allocations.
Convert Offsets
to owned ClumpedOffsets
.
This function causes allocations.
Example
use flatk::{Offsets, ClumpedOffsets};
let offsets = Offsets::new(vec![0, 3, 6, 9, 12, 16, 20, 24, 27, 30, 33, 36, 39]);
let clumped_offsets = ClumpedOffsets::new(vec![0, 4, 7, 12], vec![0, 12, 24, 39]);
assert_eq!(ClumpedOffsets::from(offsets), clumped_offsets);
Creates a value from an iterator. Read more
A version of offset_value
without bounds checking.
Safety
It is assumed that index
is strictly less than self.num_offsets()
.
Get the total number of offsets.
This is one more than the number of chunks represented.
Get the length of the chunk at the given index. Read more
Get the length of the chunk at the given index without bounds checking. Read more
Return the raw value corresponding to the offset at the given index. Read more
Returns the offset at the given index with respect to (minus) the first offset.
This function returns the total length of data
if index
is equal to
self.len()
. Read more
A version of offset
without bounds checking. Read more
Get the last offset. Read more
Get the first offset. Read more
Get the raw value corresponding to the last offset.
Get the raw value corresponding to the first offset.
fn into_offset_values_and_sizes(self) -> OffsetValuesAndSizes<'a>ⓘNotable traits for OffsetValuesAndSizes<'a>impl<'a> Iterator for OffsetValuesAndSizes<'a> type Item = (usize, usize);
fn into_offset_values_and_sizes(self) -> OffsetValuesAndSizes<'a>ⓘNotable traits for OffsetValuesAndSizes<'a>impl<'a> Iterator for OffsetValuesAndSizes<'a> type Item = (usize, usize);
impl<'a> Iterator for OffsetValuesAndSizes<'a> type Item = (usize, usize);
Returns an iterator over offset value and chunk size pairs.
type Iter = OffsetValuesAndSizes<'a>
Returns a parallel iterator over chunk sizes represented by the stored Offsets
.
type ParIter = ParOffsetValuesAndSizes<'a>
fn into_values(self) -> OffsetValues<'a>ⓘNotable traits for OffsetValues<'a>impl<'a> Iterator for OffsetValues<'a> type Item = usize;
fn into_values(self) -> OffsetValues<'a>ⓘNotable traits for OffsetValues<'a>impl<'a> Iterator for OffsetValues<'a> type Item = usize;
impl<'a> Iterator for OffsetValues<'a> type Item = usize;
Returns an iterator over offset values represented by the stored Offsets
.
type Iter = OffsetValues<'a>
Attempts to isolate a value in the given set at this index. Read more
Attempts to isolate a value in the given set at this index. Read more
Remove the first n
offsets.
Panics
This function will panic if all offsets are removed, which violates the Offsets
invariant
that there must always be at least one offset.
Same as split_offsets_at
, but in addition, return the offset of the middle element
(intersection): this is the value offsets[mid] - offsets[0]
.
Panics
Calling this function with an empty slice or with mid
greater than or equal to its length
will cause a panic.
Splits a slice of offsets at the given index into two slices such that each
slice is a valid slice of offsets. This means that the element at index
mid
is shared between the two output slices.
Panics
Calling this function with an empty slice or with mid
greater than or equal to its length
will cause a panic.
Auto Trait Implementations
impl<O> RefUnwindSafe for Offsets<O> where
O: RefUnwindSafe,
impl<O> UnwindSafe for Offsets<O> where
O: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
type Output = <I as IsolateIndex<S>>::Output
Unchecked version of isolate
. Read more