pub struct VecList<EntryData> { /* private fields */ }
Expand description
A semi-doubly linked list implemented with a vector.
This provides many of the benefits of an actual linked list with a few tradeoffs. First, due to the use of an underlying vector, an individual insert operation may be O(n) due to allocating more space for the vector. However, it is amortized O(1) and it avoids the frequent allocation that traditional linked lists suffer from.
Another tradeoff is that extending a traditional linked list with another list is O(1) but a vector based implementation is O(n). Splicing has a similar disadvantage.
Lastly, the vector based implementation is likely to have better cache locality in general.
Implementations
sourceimpl<EntryData> VecList<EntryData>
impl<EntryData> VecList<EntryData>
sourcepub fn back(&self) -> Option<&EntryData>
pub fn back(&self) -> Option<&EntryData>
Returns an immutable reference to the value at the back of the list, if it exists.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.back(), None);
list.push_back(0);
list.push_back(5);
assert_eq!(list.back(), Some(&5));
sourcepub fn back_mut(&mut self) -> Option<&mut EntryData>
pub fn back_mut(&mut self) -> Option<&mut EntryData>
Returns a mutable reference to the value at the back of the list, if it exists.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.back_mut(), None);
list.push_back(0);
list.push_back(5);
let mut back = list.back_mut().unwrap();
assert_eq!(back, &mut 5);
*back *= 2;
assert_eq!(list.back(), Some(&10));
sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns the capacity of the list.
Examples
use dlv_list::VecList;
let list: VecList<u32> = VecList::new();
assert_eq!(list.capacity(), 0);
let list: VecList<u32> = VecList::with_capacity(10);
assert_eq!(list.capacity(), 10);
sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Removes all values from the list and invalidates all existing indices.
Complexity: O(n)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_back(5);
assert!(!list.is_empty());
list.clear();
assert!(list.is_empty());
sourcepub fn contains(&self, value: &EntryData) -> bool where
EntryData: PartialEq,
pub fn contains(&self, value: &EntryData) -> bool where
EntryData: PartialEq,
Returns whether or not the list contains the given value.
Complexity: O(n)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert!(!list.contains(&0));
list.push_back(0);
assert!(list.contains(&0));
sourcepub fn drain(&mut self) -> Drain<'_, EntryData>ⓘNotable traits for Drain<'_, EntryData>impl<EntryData> Iterator for Drain<'_, EntryData> type Item = EntryData;
pub fn drain(&mut self) -> Drain<'_, EntryData>ⓘNotable traits for Drain<'_, EntryData>impl<EntryData> Iterator for Drain<'_, EntryData> type Item = EntryData;
Creates a draining iterator that removes all values from the list and yields them in order.
All values are removed even if the iterator is only partially consumed or not consumed at all.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_back(0);
list.push_back(5);
{
let mut iter = list.drain();
assert_eq!(iter.next(), Some(0));
assert_eq!(iter.next(), Some(5));
assert_eq!(iter.next(), None);
}
println!("{}", list.len());
assert!(list.is_empty());
sourcepub fn front(&self) -> Option<&EntryData>
pub fn front(&self) -> Option<&EntryData>
Returns an immutable reference to the value at the front of the list, if it exists.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.front(), None);
list.push_front(0);
list.push_front(5);
assert_eq!(list.front(), Some(&5));
sourcepub fn front_mut(&mut self) -> Option<&mut EntryData>
pub fn front_mut(&mut self) -> Option<&mut EntryData>
Returns a mutable reference to the value at the front of the list, if it exists.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.front_mut(), None);
list.push_front(0);
list.push_front(5);
let mut front = list.front_mut().unwrap();
assert_eq!(front, &mut 5);
*front *= 2;
assert_eq!(list.front(), Some(&10));
sourcepub fn get(&self, index: Index<EntryData>) -> Option<&EntryData>
pub fn get(&self, index: Index<EntryData>) -> Option<&EntryData>
Returns an immutable reference to the value at the given index.
If the index refers to an index not in the list anymore or if the index has been
invalidated, then None
will be returned.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index = list.push_front(0);
assert_eq!(list.get(index), Some(&0));
let index = list.push_front(5);
assert_eq!(list.get(index), Some(&5));
sourcepub fn get_mut(&mut self, index: Index<EntryData>) -> Option<&mut EntryData>
pub fn get_mut(&mut self, index: Index<EntryData>) -> Option<&mut EntryData>
Returns a mutable reference to the value at the given index.
If the index refers to an index not in the list anymore or if the index has been
invalidated, then None
will be returned.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index = list.push_front(0);
let value = list.get_mut(index).unwrap();
*value = 100;
assert_eq!(list.get(index), Some(&100));
sourcepub fn get_next_index(
&self,
index: Index<EntryData>
) -> Option<Index<EntryData>>
pub fn get_next_index(
&self,
index: Index<EntryData>
) -> Option<Index<EntryData>>
Returns the index of the value next to the value at the given index.
If the index refers to an index not in the list anymore or if the index has been
invalidated, then None
will be returned.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index_1 = list.push_back(0);
assert_eq!(list.get_next_index(index_1), None);
let index_2 = list.push_back(5);
assert_eq!(list.get_next_index(index_1), Some(index_2));
sourcepub fn get_previous_index(
&self,
index: Index<EntryData>
) -> Option<Index<EntryData>>
pub fn get_previous_index(
&self,
index: Index<EntryData>
) -> Option<Index<EntryData>>
Returns the index of the value previous to the value at the given index.
If the index refers to an index not in the list anymore or if the index has been
invalidated, then None
will be returned.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index_1 = list.push_front(0);
assert_eq!(list.get_previous_index(index_1), None);
let index_2 = list.push_front(5);
assert_eq!(list.get_previous_index(index_1), Some(index_2));
sourcepub fn indices(&self) -> Indices<'_, EntryData>ⓘNotable traits for Indices<'_, EntryData>impl<EntryData> Iterator for Indices<'_, EntryData> type Item = Index<EntryData>;
pub fn indices(&self) -> Indices<'_, EntryData>ⓘNotable traits for Indices<'_, EntryData>impl<EntryData> Iterator for Indices<'_, EntryData> type Item = Index<EntryData>;
Creates an indices iterator which will yield all indices of the list in order.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_front(0);
list.push_front(5);
let mut indices = list.indices();
let index = indices.next().unwrap();
assert_eq!(list.get(index), Some(&5));
let index = indices.next().unwrap();
assert_eq!(list.get(index), Some(&0));
assert_eq!(indices.next(), None);
sourcepub fn insert_after(
&mut self,
index: Index<EntryData>,
value: EntryData
) -> Index<EntryData>
pub fn insert_after(
&mut self,
index: Index<EntryData>,
value: EntryData
) -> Index<EntryData>
Inserts the given value after the value at the given index.
The index of the newly inserted value will be returned.
Complexity: amortized O(1)
Panics
Panics if the index refers to an index not in the list anymore or if the index has been invalidated. This is enforced because this function will consume the value to be inserted, and if it cannot be inserted (due to the index not being valid), then it will be lost.
Also panics if the new capacity overflows usize
.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_front(0);
let index_1 = list.push_front(5);
list.push_front(10);
let index_2 = list.insert_after(index_1, 1000);
assert_eq!(list.get_next_index(index_1), Some(index_2));
sourcepub fn insert_before(
&mut self,
index: Index<EntryData>,
value: EntryData
) -> Index<EntryData>
pub fn insert_before(
&mut self,
index: Index<EntryData>,
value: EntryData
) -> Index<EntryData>
Inserts the given value before the value at the given index.
The index of the newly inserted value will be returned.
Complexity: amortized O(1)
Panics
Panics if the index refers to an index not in the list anymore or if the index has been invalidated. This is enforced because this function will consume the value to be inserted, and if it cannot be inserted (due to the index not being valid), then it will be lost.
Also panics if the new capacity overflows usize
.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_front(0);
let index_1 = list.push_front(5);
list.push_front(10);
let index_2 = list.insert_before(index_1, 1000);
assert_eq!(list.get_previous_index(index_1), Some(index_2));
sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns whether or not the list is empty.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert!(list.is_empty());
list.push_back(0);
assert!(!list.is_empty());
sourcepub fn iter(&self) -> Iter<'_, EntryData>ⓘNotable traits for Iter<'entries, EntryData>impl<'entries, EntryData> Iterator for Iter<'entries, EntryData> type Item = &'entries EntryData;
pub fn iter(&self) -> Iter<'_, EntryData>ⓘNotable traits for Iter<'entries, EntryData>impl<'entries, EntryData> Iterator for Iter<'entries, EntryData> type Item = &'entries EntryData;
Creates an iterator that yields immutable references to values in the list in order.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_back(0);
list.push_back(10);
list.push_back(200);
list.push_back(-10);
let mut iter = list.iter();
assert_eq!(iter.next(), Some(&0));
assert_eq!(iter.next(), Some(&10));
assert_eq!(iter.next(), Some(&200));
assert_eq!(iter.next(), Some(&-10));
assert_eq!(iter.next(), None);
sourcepub fn iter_mut(&mut self) -> IterMut<'_, EntryData>ⓘNotable traits for IterMut<'entries, EntryData>impl<'entries, EntryData> Iterator for IterMut<'entries, EntryData> type Item = &'entries mut EntryData;
pub fn iter_mut(&mut self) -> IterMut<'_, EntryData>ⓘNotable traits for IterMut<'entries, EntryData>impl<'entries, EntryData> Iterator for IterMut<'entries, EntryData> type Item = &'entries mut EntryData;
Creates an iterator that yields mutable references to values in the list in order.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_back(0);
list.push_back(10);
list.push_back(200);
list.push_back(-10);
let mut iter = list.iter_mut();
assert_eq!(iter.next(), Some(&mut 0));
assert_eq!(iter.next(), Some(&mut 10));
assert_eq!(iter.next(), Some(&mut 200));
assert_eq!(iter.next(), Some(&mut -10));
assert_eq!(iter.next(), None);
sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of values in the list.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.len(), 0);
list.push_back(0);
list.push_back(1);
list.push_back(2);
assert_eq!(list.len(), 3);
sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new list with no initial capacity.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index = list.push_back(0);
assert_eq!(list.get(index), Some(&0));
sourcepub fn pack_to(
&mut self,
minimum_capacity: usize
) -> HashMap<Index<EntryData>, Index<EntryData>>
pub fn pack_to(
&mut self,
minimum_capacity: usize
) -> HashMap<Index<EntryData>, Index<EntryData>>
Reorganizes the existing values to ensure maximum cache locality and shrinks the list such
that the capacity is exactly [minimum_capacity
].
This function can be used to actually increase the capacity of the list.
Complexity: O(n)
Panics
Panics if the given minimum capacity is less than the current length of the list.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index_1 = list.push_back(5);
let index_2 = list.push_back(10);
let index_3 = list.push_front(100);
list.remove(index_1);
assert!(list.capacity() >= 3);
let mut map = list.pack_to(list.len() + 5);
assert_eq!(list.capacity(), 7);
assert_eq!(map.len(), 2);
let index_2 = map.remove(&index_2).unwrap();
let index_3 = map.remove(&index_3).unwrap();
assert_eq!(list.get(index_2), Some(&10));
assert_eq!(list.get(index_3), Some(&100));
let mut iter = list.iter();
assert_eq!(iter.next(), Some(&100));
assert_eq!(iter.next(), Some(&10));
assert_eq!(iter.next(), None);
sourcepub fn pack_to_fit(&mut self) -> HashMap<Index<EntryData>, Index<EntryData>>
pub fn pack_to_fit(&mut self) -> HashMap<Index<EntryData>, Index<EntryData>>
Reorganizes the existing values to ensure maximum cache locality and shrinks the list such that no additional capacity exists.
This is equivalent to calling VecList::pack_to
with the current length.
Complexity: O(n)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index_1 = list.push_back(5);
let index_2 = list.push_back(10);
let index_3 = list.push_front(100);
list.remove(index_1);
assert!(list.capacity() >= 3);
let mut map = list.pack_to_fit();
assert_eq!(list.capacity(), 2);
assert_eq!(map.len(), 2);
let index_2 = map.remove(&index_2).unwrap();
let index_3 = map.remove(&index_3).unwrap();
assert_eq!(list.get(index_2), Some(&10));
assert_eq!(list.get(index_3), Some(&100));
let mut iter = list.iter();
assert_eq!(iter.next(), Some(&100));
assert_eq!(iter.next(), Some(&10));
assert_eq!(iter.next(), None);
sourcepub fn pop_back(&mut self) -> Option<EntryData>
pub fn pop_back(&mut self) -> Option<EntryData>
Removes and returns the value at the back of the list, if it exists.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.pop_back(), None);
list.push_back(0);
list.push_back(1);
list.push_back(2);
assert_eq!(list.len(), 3);
assert_eq!(list.pop_back(), Some(2));
assert_eq!(list.len(), 2);
sourcepub fn pop_front(&mut self) -> Option<EntryData>
pub fn pop_front(&mut self) -> Option<EntryData>
Removes and returns the value at the front of the list, if it exists.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
assert_eq!(list.pop_front(), None);
list.push_front(0);
list.push_front(1);
list.push_front(2);
assert_eq!(list.len(), 3);
assert_eq!(list.pop_front(), Some(2));
assert_eq!(list.len(), 2);
sourcepub fn push_back(&mut self, value: EntryData) -> Index<EntryData>
pub fn push_back(&mut self, value: EntryData) -> Index<EntryData>
Inserts the given value to the back of the list.
The index of the newly inserted value will be returned.
Complexity: amortized O(1)
Panics
Panics if the new capacity overflows usize
.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index = list.push_back(0);
assert_eq!(list.get(index), Some(&0));
sourcepub fn push_front(&mut self, value: EntryData) -> Index<EntryData>
pub fn push_front(&mut self, value: EntryData) -> Index<EntryData>
Inserts the given value to the front of the list.
The index of the newly inserted value will be returned.
Complexity: amortized O(1)
Panics
Panics if the new capacity overflows usize
.
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index = list.push_front(0);
assert_eq!(list.get(index), Some(&0));
sourcepub fn remove(&mut self, index: Index<EntryData>) -> Option<EntryData>
pub fn remove(&mut self, index: Index<EntryData>) -> Option<EntryData>
Removes and returns the value at the given index, if it exists.
If the index refers to an index not in the list anymore or if the index has been
invalidated, then None
will be returned and the list will be unaffected.
Complexity: O(1)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
let index = list.push_back(0);
assert_eq!(list.remove(index), Some(0));
assert_eq!(list.remove(index), None);
sourcepub unsafe fn remove_sync(&mut self, index: Index<EntryData>) -> EntryData
pub unsafe fn remove_sync(&mut self, index: Index<EntryData>) -> EntryData
Removes the value at the given index.
This function is highly unsafe in the sense that it will break logical invariants for this type, but it does not expose any undefined behavior. Any further use of this type after calling this function is highly likely to cause a panic (but no memory unsafety). It should only be used when both of the following conditions apply:
- You only want to remove values from the list; no iteration, insertion or retrieval is
to be done afterwards. This is the only removal function that can be used after at least
one invocation of it (i.e., do not use
VecList::remove
, it will probably panic). - For some reason, you require the ability to parallelize independent removals from the list without locking. This is the primary reason this function is unsafe, as it does not try to maintain logical invariants since that would require accessing shared memory.
Panics
Panics if there is no value at the given index or if the generation does not match.
sourcepub fn reserve(&mut self, additional_capacity: usize)
pub fn reserve(&mut self, additional_capacity: usize)
Reserves capacity for the given expected size increase.
The collection may reserve more space to avoid frequent reallocations. After calling this
function, capacity will be greater than or equal to self.len() + additional_capacity
.
Does nothing if the current capacity is already sufficient.
Panics
Panics if the new capacity overflows usize
.
Examples
use dlv_list::VecList;
let mut list: VecList<u32> = VecList::new();
assert_eq!(list.capacity(), 0);
list.reserve(10);
assert!(list.capacity() >= 10);
sourcepub fn retain<Predicate>(&mut self, predicate: Predicate) where
Predicate: FnMut(&mut EntryData) -> bool,
pub fn retain<Predicate>(&mut self, predicate: Predicate) where
Predicate: FnMut(&mut EntryData) -> bool,
Removes all elements from the list not satisfying the given predicate.
Complexity: O(n)
Examples
use dlv_list::VecList;
let mut list = VecList::new();
list.push_back(0);
list.push_back(-1);
list.push_back(1);
list.push_back(-2);
list.retain(|&mut value| value >= 0);
let mut iter = list.iter();
assert_eq!(iter.next(), Some(&0));
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), None);
sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Creates a new list with the given capacity.
Examples
use dlv_list::VecList;
let mut list: VecList<u32> = VecList::new();
assert_eq!(list.capacity(), 0);
let mut list: VecList<u32> = VecList::with_capacity(10);
assert_eq!(list.capacity(), 10);
Trait Implementations
sourceimpl<'entries, EntryData> Extend<&'entries EntryData> for VecList<EntryData> where
EntryData: 'entries + Copy,
impl<'entries, EntryData> Extend<&'entries EntryData> for VecList<EntryData> where
EntryData: 'entries + Copy,
sourcefn extend<Iter>(&mut self, iter: Iter) where
Iter: IntoIterator<Item = &'entries EntryData>,
fn extend<Iter>(&mut self, iter: Iter) where
Iter: IntoIterator<Item = &'entries EntryData>,
Extends a collection with the contents of an iterator. Read more
sourcefn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Extends a collection with exactly one element.
sourcefn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
sourceimpl<EntryData> Extend<EntryData> for VecList<EntryData>
impl<EntryData> Extend<EntryData> for VecList<EntryData>
sourcefn extend<Iter>(&mut self, iter: Iter) where
Iter: IntoIterator<Item = EntryData>,
fn extend<Iter>(&mut self, iter: Iter) where
Iter: IntoIterator<Item = EntryData>,
Extends a collection with the contents of an iterator. Read more
sourcefn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)Extends a collection with exactly one element.
sourcefn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)Reserves capacity in a collection for the given number of additional elements. Read more
sourceimpl<EntryData> FromIterator<EntryData> for VecList<EntryData>
impl<EntryData> FromIterator<EntryData> for VecList<EntryData>
sourcefn from_iter<Iter>(iter: Iter) -> Self where
Iter: IntoIterator<Item = EntryData>,
fn from_iter<Iter>(iter: Iter) -> Self where
Iter: IntoIterator<Item = EntryData>,
Creates a value from an iterator. Read more
sourceimpl<EntryData> IntoIterator for VecList<EntryData>
impl<EntryData> IntoIterator for VecList<EntryData>
sourceimpl<'entries, EntryData> IntoIterator for &'entries VecList<EntryData>
impl<'entries, EntryData> IntoIterator for &'entries VecList<EntryData>
sourceimpl<'entries, EntryData> IntoIterator for &'entries mut VecList<EntryData>
impl<'entries, EntryData> IntoIterator for &'entries mut VecList<EntryData>
sourceimpl<EntryData> Ord for VecList<EntryData> where
EntryData: Ord,
impl<EntryData> Ord for VecList<EntryData> where
EntryData: Ord,
sourceimpl<'slice, EntryData> PartialEq<&'slice [EntryData]> for VecList<EntryData> where
EntryData: PartialEq,
impl<'slice, EntryData> PartialEq<&'slice [EntryData]> for VecList<EntryData> where
EntryData: PartialEq,
sourceimpl<EntryData> PartialEq<LinkedList<EntryData>> for VecList<EntryData> where
EntryData: PartialEq,
impl<EntryData> PartialEq<LinkedList<EntryData>> for VecList<EntryData> where
EntryData: PartialEq,
sourceimpl<EntryData> PartialEq<Vec<EntryData, Global>> for VecList<EntryData> where
EntryData: PartialEq,
impl<EntryData> PartialEq<Vec<EntryData, Global>> for VecList<EntryData> where
EntryData: PartialEq,
sourceimpl<EntryData> PartialEq<VecList<EntryData>> for VecList<EntryData> where
EntryData: PartialEq,
impl<EntryData> PartialEq<VecList<EntryData>> for VecList<EntryData> where
EntryData: PartialEq,
sourceimpl<EntryData> PartialOrd<VecList<EntryData>> for VecList<EntryData> where
EntryData: PartialOrd<EntryData>,
impl<EntryData> PartialOrd<VecList<EntryData>> for VecList<EntryData> where
EntryData: PartialOrd<EntryData>,
sourcefn partial_cmp(&self, other: &Self) -> Option<Ordering>
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl<EntryData> Eq for VecList<EntryData> where
EntryData: Eq,
Auto Trait Implementations
impl<EntryData> RefUnwindSafe for VecList<EntryData> where
EntryData: RefUnwindSafe,
impl<EntryData> Send for VecList<EntryData> where
EntryData: Send,
impl<EntryData> Sync for VecList<EntryData> where
EntryData: Sync,
impl<EntryData> Unpin for VecList<EntryData> where
EntryData: Unpin,
impl<EntryData> UnwindSafe for VecList<EntryData> where
EntryData: 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