Struct stack_graphs::arena::ReversibleList
source · [−]#[repr(C)]pub struct ReversibleList<T> { /* private fields */ }Expand description
An arena-allocated list that can be reversed.
Well, that is, you can reverse a List just fine by yourself. This type takes care of
doing that for you, and importantly, saves the result so that if you only have to compute the
reversal once even if you need to access it multiple times.
Implementations
sourceimpl<T> ReversibleList<T>
impl<T> ReversibleList<T>
sourcepub fn new_arena() -> ReversibleListArena<T>
pub fn new_arena() -> ReversibleListArena<T>
Creates a new ReversibleListArena that will manage lists of this type.
sourcepub fn empty() -> ReversibleList<T>
pub fn empty() -> ReversibleList<T>
Returns an empty list.
sourcepub fn have_reversal(&self, arena: &ReversibleListArena<T>) -> bool
pub fn have_reversal(&self, arena: &ReversibleListArena<T>) -> bool
Returns whether we have already calculated the reversal of this list.
sourcepub fn push_front(&mut self, arena: &mut ReversibleListArena<T>, head: T)
pub fn push_front(&mut self, arena: &mut ReversibleListArena<T>, head: T)
Pushes a new element onto the front of this list.
sourcepub fn pop_front<'a>(
&mut self,
arena: &'a ReversibleListArena<T>
) -> Option<&'a T>
pub fn pop_front<'a>(
&mut self,
arena: &'a ReversibleListArena<T>
) -> Option<&'a T>
Removes and returns the element at the front of this list. If the list is empty, returns
None.
sourcepub fn iter<'a>(
self,
arena: &'a ReversibleListArena<T>
) -> impl Iterator<Item = &'a T> + 'a
pub fn iter<'a>(
self,
arena: &'a ReversibleListArena<T>
) -> impl Iterator<Item = &'a T> + 'a
Returns an iterator over the elements of this list.
sourceimpl<T> ReversibleList<T> where
T: Clone,
impl<T> ReversibleList<T> where
T: Clone,
sourcepub fn reverse(&mut self, arena: &mut ReversibleListArena<T>)
pub fn reverse(&mut self, arena: &mut ReversibleListArena<T>)
Reverses the list. Since we’re already caching everything in an arena, we make sure to only calculate the reversal once, returning it as-is if you call this function multiple times.
sourcepub fn ensure_reversal_available(&mut self, arena: &mut ReversibleListArena<T>)
pub fn ensure_reversal_available(&mut self, arena: &mut ReversibleListArena<T>)
Ensures that the reversal of this list is available. It can be useful to precalculate this when you have mutable access to the arena, so that you can then reverse and un-reverse the list later when you only have shared access to it.
sourceimpl<T> ReversibleList<T>
impl<T> ReversibleList<T>
sourcepub fn reverse_reused(
&mut self,
arena: &ReversibleListArena<T>
) -> Result<(), ()>
pub fn reverse_reused(
&mut self,
arena: &ReversibleListArena<T>
) -> Result<(), ()>
Reverses the list, assuming that the reversal has already been computed. If it hasn’t we return an error.
sourceimpl<T> ReversibleList<T>
impl<T> ReversibleList<T>
pub fn equals_with<F>(
self,
arena: &ReversibleListArena<T>,
other: ReversibleList<T>,
eq: F
) -> bool where
F: FnMut(&T, &T) -> bool,
pub fn cmp_with<F>(
self,
arena: &ReversibleListArena<T>,
other: ReversibleList<T>,
cmp: F
) -> Ordering where
F: FnMut(&T, &T) -> Ordering,
sourceimpl<T> ReversibleList<T> where
T: Eq,
impl<T> ReversibleList<T> where
T: Eq,
pub fn equals(
self,
arena: &ReversibleListArena<T>,
other: ReversibleList<T>
) -> bool
sourceimpl<T> ReversibleList<T> where
T: Ord,
impl<T> ReversibleList<T> where
T: Ord,
pub fn cmp(
self,
arena: &ReversibleListArena<T>,
other: ReversibleList<T>
) -> Ordering
Trait Implementations
sourceimpl<T> Clone for ReversibleList<T>
impl<T> Clone for ReversibleList<T>
sourcefn clone(&self) -> ReversibleList<T>
fn clone(&self) -> ReversibleList<T>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
sourceimpl<T> Niche for ReversibleList<T> where
Handle<ReversibleListCell<T>>: Niche,
impl<T> Niche for ReversibleList<T> where
Handle<ReversibleListCell<T>>: Niche,
type Output = MaybeUninit<ReversibleList<T>>
type Output = MaybeUninit<ReversibleList<T>>
The type that is used to store values of Self inside of a ControlledOption. This might
be Self itself, if your niche is a valid instance of the type, but which violates some
runtime constraint. But if you cannot easily create your niche as an instance of Self,
you can use some other type, you can use some other type instead. Read more
sourcefn none() -> Self::Output
fn none() -> Self::Output
Returns the niche value for this type that should be used to represent None for a
ControlledOption. Read more
sourcefn is_none(value: &Self::Output) -> bool
fn is_none(value: &Self::Output) -> bool
Returns whether value is the niche value for this type.
impl<T> Copy for ReversibleList<T>
Auto Trait Implementations
impl<T> !RefUnwindSafe for ReversibleList<T>
impl<T> Send for ReversibleList<T>
impl<T> Sync for ReversibleList<T>
impl<T> Unpin for ReversibleList<T> where
T: Unpin,
impl<T> UnwindSafe for ReversibleList<T> where
T: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<T> FmtForward for T
impl<T> FmtForward for T
fn fmt_binary(self) -> FmtBinary<Self> where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self> where
Self: Binary,
Causes self to use its Binary implementation when Debug-formatted.
fn fmt_display(self) -> FmtDisplay<Self> where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self> where
Self: Display,
Causes self to use its Display implementation when
Debug-formatted. Read more
fn fmt_lower_exp(self) -> FmtLowerExp<Self> where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self> where
Self: LowerExp,
Causes self to use its LowerExp implementation when
Debug-formatted. Read more
fn fmt_lower_hex(self) -> FmtLowerHex<Self> where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self> where
Self: LowerHex,
Causes self to use its LowerHex implementation when
Debug-formatted. Read more
fn fmt_octal(self) -> FmtOctal<Self> where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self> where
Self: Octal,
Causes self to use its Octal implementation when Debug-formatted.
fn fmt_pointer(self) -> FmtPointer<Self> where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self> where
Self: Pointer,
Causes self to use its Pointer implementation when
Debug-formatted. Read more
fn fmt_upper_exp(self) -> FmtUpperExp<Self> where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self> where
Self: UpperExp,
Causes self to use its UpperExp implementation when
Debug-formatted. Read more
fn fmt_upper_hex(self) -> FmtUpperHex<Self> where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self> where
Self: UpperHex,
Causes self to use its UpperHex implementation when
Debug-formatted. Read more
impl<T> Pipe for T where
T: ?Sized,
impl<T> Pipe for T where
T: ?Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
Pipes by value. This is generally the method you want to use. Read more
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R where
R: 'a,
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
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R where
R: 'a,
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
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R where
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
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
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,
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
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,
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.
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,
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. Read more
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,
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.
impl<T> Tap for T
impl<T> Tap for T
fn tap_borrow<B>(self, func: impl for<'_> FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl for<'_> FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
Immutable access to the Borrow<B> of a value. Read more
fn tap_borrow_mut<B>(self, func: impl for<'_> FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl for<'_> FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
Mutable access to the BorrowMut<B> of a value. Read more
fn tap_ref<R>(self, func: impl for<'_> FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl for<'_> FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
Immutable access to the AsRef<R> view of a value. Read more
fn tap_ref_mut<R>(self, func: impl for<'_> FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl for<'_> FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
Mutable access to the AsMut<R> view of a value. Read more
fn tap_deref<T>(self, func: impl for<'_> FnOnce(&T)) -> Self where
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl for<'_> FnOnce(&T)) -> Self where
Self: Deref<Target = T>,
T: ?Sized,
Immutable access to the Deref::Target of a value. Read more
fn tap_deref_mut<T>(self, func: impl for<'_> FnOnce(&mut T)) -> Self where
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl for<'_> FnOnce(&mut T)) -> Self where
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
Mutable access to the Deref::Target of a value. Read more
fn tap_dbg(self, func: impl for<'_> FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl for<'_> FnOnce(&Self)) -> Self
Calls .tap() only in debug builds, and is erased in release builds.
fn tap_mut_dbg(self, func: impl for<'_> FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl for<'_> FnOnce(&mut Self)) -> Self
Calls .tap_mut() only in debug builds, and is erased in release
builds. Read more
fn tap_borrow_dbg<B>(self, func: impl for<'_> FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl for<'_> FnOnce(&B)) -> Self where
Self: Borrow<B>,
B: ?Sized,
Calls .tap_borrow() only in debug builds, and is erased in release
builds. Read more
fn tap_borrow_mut_dbg<B>(self, func: impl for<'_> FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl for<'_> FnOnce(&mut B)) -> Self where
Self: BorrowMut<B>,
B: ?Sized,
Calls .tap_borrow_mut() only in debug builds, and is erased in release
builds. Read more
fn tap_ref_dbg<R>(self, func: impl for<'_> FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl for<'_> FnOnce(&R)) -> Self where
Self: AsRef<R>,
R: ?Sized,
Calls .tap_ref() only in debug builds, and is erased in release
builds. Read more
fn tap_ref_mut_dbg<R>(self, func: impl for<'_> FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl for<'_> FnOnce(&mut R)) -> Self where
Self: AsMut<R>,
R: ?Sized,
Calls .tap_ref_mut() only in debug builds, and is erased in release
builds. Read more