#[repr(packed)]
pub struct FlexZeroSlice { /* private fields */ }
Expand description

A zero-copy “slice” that efficiently represents [usize].

Implementations

Constructs a new empty FlexZeroSlice.

use zerovec::vecs::FlexZeroSlice;

const EMPTY_SLICE: &FlexZeroSlice = FlexZeroSlice::new_empty();

assert!(EMPTY_SLICE.is_empty());
assert_eq!(EMPTY_SLICE.len(), 0);
assert_eq!(EMPTY_SLICE.first(), None);

Safely constructs a FlexZeroSlice from a byte array.

Examples
use zerovec::vecs::FlexZeroSlice;

const FZS: &FlexZeroSlice = match FlexZeroSlice::parse_byte_slice(&[
    2, // width
    0x42, 0x00, // first value
    0x07, 0x09, // second value
    0xFF, 0xFF, // third value
]) {
    Ok(v) => v,
    Err(_) => panic!("invalid bytes")
};

assert!(!FZS.is_empty());
assert_eq!(FZS.len(), 3);
assert_eq!(FZS.first(), Some(0x0042));
assert_eq!(FZS.get(0), Some(0x0042));
assert_eq!(FZS.get(1), Some(0x0907));
assert_eq!(FZS.get(2), Some(0xFFFF));
assert_eq!(FZS.get(3), None);
assert_eq!(FZS.last(), Some(0xFFFF));

Constructs a FlexZeroSlice without checking invariants.

Panics

Panics if bytes is empty.

Safety

Must be called on a valid FlexZeroSlice byte array.

Returns this slice as its underlying &[u8] byte buffer representation.

Useful for serialization.

Example
use zerovec::vecs::FlexZeroSlice;

let bytes: &[u8] = &[2, 0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let fzv = FlexZeroSlice::parse_byte_slice(bytes).expect("valid bytes");

assert_eq!(bytes, fzv.as_bytes());

Borrows this FlexZeroSlice as a FlexZeroVec::Borrowed.

Returns the number of elements in the FlexZeroSlice.

Returns whether there are zero elements in the FlexZeroSlice.

Gets the element at index, or None if index >= self.len().

Examples
use zerovec::vecs::FlexZeroVec;

let fzv: FlexZeroVec = [22, 33].iter().copied().collect();
assert_eq!(fzv.get(0), Some(22));
assert_eq!(fzv.get(1), Some(33));
assert_eq!(fzv.get(2), None);

Gets the element at index without checking bounds.

Safety

index must be in-range.

Gets the first element of the slice, or None if the slice is empty.

Gets the last element of the slice, or None if the slice is empty.

Gets an iterator over the elements of the slice as usize.

Gets an iterator over pairs of elements.

The second element of the final pair is None.

Examples
use zerovec::vecs::FlexZeroVec;

let nums: &[usize] = &[211, 281, 421, 461];
let fzv: FlexZeroVec = nums.iter().copied().collect();

let mut pairs_it = fzv.iter_pairs();

assert_eq!(pairs_it.next(), Some((211, Some(281))));
assert_eq!(pairs_it.next(), Some((281, Some(421))));
assert_eq!(pairs_it.next(), Some((421, Some(461))));
assert_eq!(pairs_it.next(), Some((461, None)));
assert_eq!(pairs_it.next(), None);

Creates a Vec<usize> from a FlexZeroSlice (or FlexZeroVec).

Examples
use zerovec::vecs::FlexZeroVec;

let nums: &[usize] = &[211, 281, 421, 461];
let fzv: FlexZeroVec = nums.iter().copied().collect();
let vec: Vec<usize> = fzv.to_vec();

assert_eq!(nums, vec.as_slice());

Binary searches a sorted FlexZeroSlice for the given usize value.

Examples
use zerovec::vecs::FlexZeroVec;

let nums: &[usize] = &[211, 281, 421, 461];
let fzv: FlexZeroVec = nums.iter().copied().collect();

assert_eq!(fzv.binary_search(0), Err(0));
assert_eq!(fzv.binary_search(211), Ok(0));
assert_eq!(fzv.binary_search(250), Err(1));
assert_eq!(fzv.binary_search(281), Ok(1));
assert_eq!(fzv.binary_search(300), Err(2));
assert_eq!(fzv.binary_search(421), Ok(2));
assert_eq!(fzv.binary_search(450), Err(3));
assert_eq!(fzv.binary_search(461), Ok(3));
assert_eq!(fzv.binary_search(462), Err(4));

Binary searches a sorted range of a FlexZeroSlice for the given usize value.

The indices in the return value are relative to the start of the range.

Examples
use zerovec::vecs::FlexZeroVec;

// Make a FlexZeroVec with two sorted ranges: 0..3 and 3..5
let nums: &[usize] = &[111, 222, 444, 333, 555];
let fzv: FlexZeroVec = nums.iter().copied().collect();

// Search in the first range:
assert_eq!(fzv.binary_search_in_range(0, 0..3), Some(Err(0)));
assert_eq!(fzv.binary_search_in_range(111, 0..3), Some(Ok(0)));
assert_eq!(fzv.binary_search_in_range(199, 0..3), Some(Err(1)));
assert_eq!(fzv.binary_search_in_range(222, 0..3), Some(Ok(1)));
assert_eq!(fzv.binary_search_in_range(399, 0..3), Some(Err(2)));
assert_eq!(fzv.binary_search_in_range(444, 0..3), Some(Ok(2)));
assert_eq!(fzv.binary_search_in_range(999, 0..3), Some(Err(3)));

// Search in the second range:
assert_eq!(fzv.binary_search_in_range(0, 3..5), Some(Err(0)));
assert_eq!(fzv.binary_search_in_range(333, 3..5), Some(Ok(0)));
assert_eq!(fzv.binary_search_in_range(399, 3..5), Some(Err(1)));
assert_eq!(fzv.binary_search_in_range(555, 3..5), Some(Ok(1)));
assert_eq!(fzv.binary_search_in_range(999, 3..5), Some(Err(2)));

// Out-of-bounds range:
assert_eq!(fzv.binary_search_in_range(0, 4..6), None);

Binary searches a sorted FlexZeroSlice according to a predicate function.

Binary searches a sorted range of a FlexZeroSlice according to a predicate function.

The indices in the return value are relative to the start of the range.

Binary searches a FlexZeroSlice by its indices.

The predicate function is passed in-bounds indices into the FlexZeroSlice.

Binary searches a range of a FlexZeroSlice by its indices.

The predicate function is passed in-bounds indices into the FlexZeroSlice, which are relative to the start of the entire slice.

The indices in the return value are relative to the start of the range.

Trait Implementations

Converts this type into a shared reference of the (usually inferred) input type.

Returns a TokenStream that would evalutate to self. Read more

Formats the value using the given formatter. Read more

This impl can be made available by enabling the optional serde feature of the zerovec crate

Deserialize this value from the given Serde deserializer. Read more

Converts to this type from the input type.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

This impl can be made available by enabling the optional serde feature of the zerovec crate

Serialize this value into the given Serde serializer. Read more

Clone the other C into a struct that may retain references into C.

Clone the other C into a struct that may retain references into C.

The type returned by Self::get()

A fully borrowed version of this

Create a new, empty borrowed variant

Search for a key in a sorted vector, returns Ok(index) if found, returns Err(insert_index) if not found, where insert_index is the index where it should be inserted to maintain sort order. Read more

Search for a key within a certain range in a sorted vector. Returns None if the range is out of bounds, and Ok or Err in the same way as zvl_binary_search. Indices are returned relative to the start of the range. Read more

Search for a key in a sorted vector by a predicate, returns Ok(index) if found, returns Err(insert_index) if not found, where insert_index is the index where it should be inserted to maintain sort order. Read more

Search for a key within a certain range in a sorted vector by a predicate. Returns None if the range is out of bounds, and Ok or Err in the same way as zvl_binary_search. Indices are returned relative to the start of the range. Read more

Get element at index

The length of this vector

Construct a borrowed variant by borrowing from &self. Read more

Obtain a reference to T, passed to a closure Read more

Check if this vector is in ascending order according to Ts Ord impl

Check if this vector is empty

Compare this type with a Self::GetType. This must produce the same result as if g were converted to Self Read more

Compare two values of Self::GetType. This must produce the same result as if both a and b were converted to Self Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more