Struct Vec2d

Source
pub struct Vec2d<T>(/* private fields */);
Expand description

Compact representation of a Vec<Vec<T>>

Implementations§

Source§

impl<T> Vec2d<T>

Source

pub fn new() -> Self

Create a new empty Vec2d.

This is equivalent to Self::with_capacity(0, 0).

Source

pub fn with_capacity(vectors: usize, elements_sum: usize) -> Self

Create a new empty Vec2d with at least the specified capacities.

A Vec2d internally contains two Vecs, one for the elements of all the inner vectors and one for the indices where these inner vectors begin. vectors is the capacity for the latter and elements_sum is the capacity for the former Vec.

Source

pub fn reserve_vectors(&mut self, additional: usize)

Reserve space for at least additional more inner vectors. Note that this will not reserve space for elements of the inner vectors. To that end, use Self::reserve_elements().

This is essentially a wrapper around Vec::reserve(), so the documentation there provides more details.

Source

pub fn reserve_elements(&mut self, additional: usize)

Reserve space for at least additional more elements in the inner vectors. The space is shared between the inner vectors: After reserving space for n additional elements, pushing, e.g., two vectors with k1 + k2 <= n elements will not lead to a reallocation.

This is essentially a wrapper around Vec::reserve(), so the documentation there provides more details.

Source

pub fn len(&self) -> usize

Get the number of inner vectors

Source

pub fn is_empty(&self) -> bool

true iff there are no inner vectors

Equivalent to self.len() == 0

Source

pub fn get(&self, index: usize) -> Option<&[T]>

Get the vector at index if there is one

Source

pub fn get_mut(&mut self, index: usize) -> Option<&mut [T]>

Get the vector at index if there is one

Source

pub fn first(&self) -> Option<&[T]>

Get the first vector if there is one

Source

pub fn first_mut(&mut self) -> Option<&mut [T]>

Get the first vector if there is one

Source

pub fn last(&self) -> Option<&[T]>

Get the last vector if there is one

Source

pub fn last_mut(&mut self) -> Option<&mut [T]>

Get the last vector if there is one

Source

pub fn iter(&self) -> Vec2dIter<'_, T>

Iterate over the inner vector

Source

pub fn push_vec(&mut self)

Add an empty inner vector

Elements can be added to that vector using Self::push_element()

Source

pub fn pop_vec(&mut self) -> bool

Remove the last vector (if there is one)

Returns true iff the outer vector was non-empty before removal.

Source

pub fn truncate(&mut self, len: usize)

Truncate the outer vector to len inner vectors

If len is greater or equal to self.len(), this is a no-op.

Source

pub fn push_element(&mut self, element: T)

Push an element to the last vector

The vector list must be non-empty.

Source

pub fn push_elements(&mut self, iter: impl IntoIterator<Item = T>)

Extend the last vector by the elements from iter

There must be at least one inner vector (i.e., !self.is_empty()).

Source

pub fn all_elements(&self) -> &[T]

Get a slice containing all elements, ignoring the boundaries of the inner vectors

Source

pub fn all_elements_mut(&mut self) -> &mut [T]

Get a slice containing all elements, ignoring the boundaries of the inner vectors

Source§

impl<T: Clone> Vec2d<T>

Source

pub fn resize_last(&mut self, new_len: usize, value: T)

Resize the last vector in-place such that its length is equal to new_len

If new_len is greater than the current length, the vector is extended by the difference, with each additional slot filled with value. If new_len is less than len, the Vec is simply truncated.

Trait Implementations§

Source§

impl<T: Clone> Clone for Vec2d<T>

Source§

fn clone(&self) -> Vec2d<T>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for Vec2d<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Default for Vec2d<T>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl<'a, T: Copy> Extend<&'a [T]> for Vec2d<T>

Source§

fn extend<I: IntoIterator<Item = &'a [T]>>(&mut self, iter: I)

Extends a collection with the contents of an iterator. Read more
Source§

fn extend_one(&mut self, item: A)

🔬This is a nightly-only experimental API. (extend_one)
Extends a collection with exactly one element.
Source§

fn extend_reserve(&mut self, additional: usize)

🔬This is a nightly-only experimental API. (extend_one)
Reserves capacity in a collection for the given number of additional elements. Read more
Source§

impl<'a, T: Copy> FromIterator<&'a [T]> for Vec2d<T>

Source§

fn from_iter<I: IntoIterator<Item = &'a [T]>>(iter: I) -> Self

Creates a value from an iterator. Read more
Source§

impl<T> Index<usize> for Vec2d<T>

Source§

type Output = [T]

The returned type after indexing.
Source§

fn index(&self, index: usize) -> &[T]

Performs the indexing (container[index]) operation. Read more
Source§

impl<T> IndexMut<usize> for Vec2d<T>

Source§

fn index_mut(&mut self, index: usize) -> &mut [T]

Performs the mutable indexing (container[index]) operation. Read more
Source§

impl<T: PartialEq> PartialEq for Vec2d<T>

Source§

fn eq(&self, other: &Vec2d<T>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<T: Eq> Eq for Vec2d<T>

Source§

impl<T> StructuralPartialEq for Vec2d<T>

Auto Trait Implementations§

§

impl<T> Freeze for Vec2d<T>

§

impl<T> RefUnwindSafe for Vec2d<T>
where T: RefUnwindSafe,

§

impl<T> Send for Vec2d<T>
where T: Send,

§

impl<T> Sync for Vec2d<T>
where T: Sync,

§

impl<T> Unpin for Vec2d<T>
where T: Unpin,

§

impl<T> UnwindSafe for Vec2d<T>
where T: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
Source§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
Source§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
Source§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.