pub struct ArrayList<T, const N: usize>where
Usize<N>: ChunkCapacity,{ /* private fields */ }Expand description
A dynamic container that combines the characteristics of a Vec and a LinkedList.
§Features
- Chunked Storage: Each chunk can hold up to
Nelements, reducing the overhead of individual allocations compared to a traditional linked list. - Flexible Operations: Index based lookups and efficient insertions, deletions, and access at arbitrary positions.
§Type Parameters
T: The type of elements stored in the list.N: The maximum number of elements that each chunk can hold.
§Example
use array_list::ArrayList;
let mut list: ArrayList<i64, 6> = ArrayList::new();
list.push_back(3);
list.push_front(1);
list.insert(1, 2);
assert!(!list.is_empty());
assert_eq!(list.len(), 3);
assert_eq!(list.pop_front(), Some(1));
assert_eq!(list.pop_front(), Some(2));
assert_eq!(list.pop_front(), Some(3));Implementations§
Source§impl<T, const N: usize> ArrayList<T, N>where
Usize<N>: ChunkCapacity,
impl<T, const N: usize> ArrayList<T, N>where
Usize<N>: ChunkCapacity,
Sourcepub const fn new() -> Self
pub const fn new() -> Self
Creates a new, empty ArrayList with no elements and no allocated chunks.
§Example
use array_list::ArrayList;
let list: ArrayList<i64, 6> = ArrayList::new();
assert!(list.is_empty());Sourcepub fn push_front(&mut self, value: T)
pub fn push_front(&mut self, value: T)
Adds an element to the front of the ArrayList.
The element is inserted at the beginning of the list, shifting existing elements forward if necessary. If the first chunk is full, a new one will be allocated to accommodate the element.
§Example
use array_list::ArrayList;
let mut list: ArrayList<i64, 6> = ArrayList::new();
list.push_front(10);
list.push_front(20);
assert_eq!(list.len(), 2);
assert_eq!(list.pop_front(), Some(20));
assert_eq!(list.pop_front(), Some(10));Sourcepub fn push_back(&mut self, value: T)
pub fn push_back(&mut self, value: T)
Adds an element to the back of the ArrayList.
The element is inserted at the end of the list. If the last chunk is full, a new one will be allocated to accommodate the element.
§Example
use array_list::ArrayList;
let mut list: ArrayList<i64, 6> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.len(), 2);
assert_eq!(list.pop_back(), Some(20));
assert_eq!(list.pop_back(), Some(10));Sourcepub fn insert(&mut self, index: usize, value: T)
pub fn insert(&mut self, index: usize, value: T)
Inserts an element at the specified index, shifting subsequent elements to the right. If the target chunk is full, a new one will be allocated to accommodate the element.
§Panics
- Panics if the
indexis out of bounds (greater than the list’s current length).
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 3> = ArrayList::new();
list.push_back(10);
list.push_back(30);
list.insert(1, 20);
assert_eq!(list.get(0), Some(&10));
assert_eq!(list.get(1), Some(&20));
assert_eq!(list.get(2), Some(&30));Sourcepub fn append(&mut self, other: &mut Self)
pub fn append(&mut self, other: &mut Self)
Moves all elements from the other list to the end of this one.
This reuses all the chunks from other list and moves them into self. After this operation, other becomes empty.
§Example
use array_list::ArrayList;
let mut list1: ArrayList<i32, 4> = ArrayList::new();
list1.push_back(1);
list1.push_back(2);
let mut list2: ArrayList<i32, 4> = ArrayList::new();
list2.push_back(3);
list2.push_back(4);
list1.append(&mut list2);
assert_eq!(list1.len(), 4);
assert_eq!(list1.get(0), Some(&1));
assert_eq!(list1.get(1), Some(&2));
assert_eq!(list1.get(2), Some(&3));
assert_eq!(list1.get(3), Some(&4));Sourcepub fn pop_front(&mut self) -> Option<T>
pub fn pop_front(&mut self) -> Option<T>
Removes and returns the first element of the ArrayList, if any.
If the list is empty, it returns None.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_front(10);
list.push_front(20);
assert_eq!(list.pop_front(), Some(20));
assert_eq!(list.pop_front(), Some(10));
assert_eq!(list.pop_front(), None);Sourcepub fn pop_back(&mut self) -> Option<T>
pub fn pop_back(&mut self) -> Option<T>
Removes and returns the last element of the ArrayList, if any.
If the list is empty, it returns None.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.pop_back(), Some(20));
assert_eq!(list.pop_back(), Some(10));
assert_eq!(list.pop_back(), None);Sourcepub fn remove(&mut self, index: usize) -> Option<T>
pub fn remove(&mut self, index: usize) -> Option<T>
Removes and returns the element at the specified index, shifting subsequent elements left.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
list.push_back(30);
list.push_back(40);
list.push_back(50);
assert_eq!(list.remove(1), Some(20));
assert_eq!(list.get(1), Some(&30));
assert_eq!(list.len(), 4);
assert_eq!(list.remove(10), None);Sourcepub fn clear(&mut self)
pub fn clear(&mut self)
Removes all elements from the ArrayList, effectively making it empty.
§Example
use array_list::ArrayList;
let mut list: ArrayList<i32, 4> = ArrayList::new();
list.push_back(1);
list.push_back(2);
list.push_back(3);
assert_eq!(list.len(), 3);
list.clear();
assert_eq!(list.len(), 0);
assert!(list.is_empty());
assert_eq!(list.front(), None);
assert_eq!(list.back(), None);Sourcepub fn front(&self) -> Option<&T>
pub fn front(&self) -> Option<&T>
Returns a reference to the first element of the ArrayList, if any.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.front(), Some(&10));
list.pop_front();
assert_eq!(list.front(), Some(&20));
list.pop_front();
assert_eq!(list.front(), None);Sourcepub fn front_mut(&mut self) -> Option<&mut T>
pub fn front_mut(&mut self) -> Option<&mut T>
Returns a mutable reference to the first element of the ArrayList, if any.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.front_mut(), Some(&mut 10));
list.pop_front();
assert_eq!(list.front_mut(), Some(&mut 20));
list.pop_front();
assert_eq!(list.front_mut(), None);Sourcepub fn back(&self) -> Option<&T>
pub fn back(&self) -> Option<&T>
Returns a reference to the last element of the ArrayList, if any.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.back(), Some(&20));
list.pop_back();
assert_eq!(list.back(), Some(&10));
list.pop_back();
assert_eq!(list.back(), None);Sourcepub fn back_mut(&mut self) -> Option<&mut T>
pub fn back_mut(&mut self) -> Option<&mut T>
Returns a mutable reference to the last element of the ArrayList, if any.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.back_mut(), Some(&mut 20));
list.pop_back();
assert_eq!(list.back_mut(), Some(&mut 10));
list.pop_back();
assert_eq!(list.back_mut(), None);Sourcepub fn get(&self, index: usize) -> Option<&T>
pub fn get(&self, index: usize) -> Option<&T>
Returns a reference to the element at the specified index, if any.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.get(0), Some(&10));
assert_eq!(list.get(1), Some(&20));
assert_eq!(list.get(2), None); // Out of boundsSourcepub fn get_mut(&mut self, index: usize) -> Option<&mut T>
pub fn get_mut(&mut self, index: usize) -> Option<&mut T>
Returns a mutable reference to the element at the specified index, if any.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<i64, 4> = ArrayList::new();
list.push_back(10);
list.push_back(20);
assert_eq!(list.get_mut(0), Some(&mut 10));
assert_eq!(list.get_mut(1), Some(&mut 20));
assert_eq!(list.get_mut(2), None); // Out of boundsSourcepub const fn len(&self) -> usize
pub const fn len(&self) -> usize
Returns the number of elements currently stored in the ArrayList.
§Example
use array_list::ArrayList;
let mut list: ArrayList<i64, 6> = ArrayList::new();
list.push_back(1);
list.push_back(2);
assert_eq!(list.len(), 2);Sourcepub const fn is_empty(&self) -> bool
pub const fn is_empty(&self) -> bool
Checks if the ArrayList is empty.
§Example
use array_list::ArrayList;
let mut list: ArrayList<i64, 6> = ArrayList::new();
assert!(list.is_empty());
list.push_back(1);
assert!(!list.is_empty());Sourcepub fn iter(&self) -> Iter<'_, T, N> ⓘ
pub fn iter(&self) -> Iter<'_, T, N> ⓘ
Provides an iterator over list’s elements.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<_, 2> = ArrayList::new();
list.push_back(0);
list.push_back(1);
list.push_back(2);
let mut iter = list.iter();
assert_eq!(iter.next(), Some(&0));
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);Sourcepub fn iter_mut(&mut self) -> IterMut<'_, T, N> ⓘ
pub fn iter_mut(&mut self) -> IterMut<'_, T, N> ⓘ
Provides a mutable iterator over list’s elements.
§Examples
use array_list::ArrayList;
let mut list: ArrayList<_, 2> = ArrayList::new();
list.push_back(0);
list.push_back(1);
list.push_back(2);
let mut iter = list.iter();
assert_eq!(iter.next(), Some(&0));
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);Sourcepub fn cursor_front(&self) -> Cursor<'_, T, N>
pub fn cursor_front(&self) -> Cursor<'_, T, N>
Provides a cursor at the front element.
The cursor is pointing to the “ghost” non-element if the list is empty.
Sourcepub fn cursor_back(&self) -> Cursor<'_, T, N>
pub fn cursor_back(&self) -> Cursor<'_, T, N>
Provides a cursor at the back element.
The cursor is pointing to the “ghost” non-element if the list is empty.
Sourcepub fn cursor_front_mut(&mut self) -> CursorMut<'_, T, N>
pub fn cursor_front_mut(&mut self) -> CursorMut<'_, T, N>
Provides a cursor at the front element.
The cursor is pointing to the “ghost” non-element if the list is empty.
Sourcepub fn cursor_back_mut(&mut self) -> CursorMut<'_, T, N>
pub fn cursor_back_mut(&mut self) -> CursorMut<'_, T, N>
Provides a cursor at the back element.
The cursor is pointing to the “ghost” non-element if the list is empty.
Trait Implementations§
Source§impl<'a, T, const N: usize> Extend<&'a T> for ArrayList<T, N>
impl<'a, T, const N: usize> Extend<&'a T> for ArrayList<T, N>
Source§fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = &'a T>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl<T, const N: usize> Extend<T> for ArrayList<T, N>where
Usize<N>: ChunkCapacity,
impl<T, const N: usize> Extend<T> for ArrayList<T, N>where
Usize<N>: ChunkCapacity,
Source§fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I)
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)