#[rustfmt::skip]
macro_rules! linked_list_array_node {
( $name:ident, $b:literal) => { devela::paste! {
pub(super) struct [<$name$b Node>] <T> {
next: [<NonMaxIndex$b>],
data: T,
}
impl<T: Default> Default for [<$name$b Node>]<T> {
fn default() -> Self {
Self {
next: None.into(),
data: T::default(),
}
}
}
impl<T: Clone> Clone for [<$name$b Node>]<T> {
#[inline]
fn clone(&self) -> Self {
Self {
next: self.next.clone(),
data: self.data.clone(),
}
}
}
impl<T: Copy> Copy for [<$name$b Node>]<T> {}
impl<T: Debug> fmt::Debug for [<$name$b Node>]<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct(stringify![[<$name$b Node>]])
.field("next", &self.next)
.field("data", &self.data)
.finish()
}
}
impl<T> [<$name$b Node>]<T> {
#[inline]
pub(super) const fn new_unlinked(data: T) -> Self {
Self {
next: [<NonMaxIndex$b>]::none(),
data,
}
}
#[inline]
pub(super) fn next(&self) -> [<NonMaxIndex$b>] {
self.next
}
#[inline]
pub(super) fn set_next(&mut self, index: [<NonMaxIndex$b>]) {
self.next = index;
}
#[inline]
pub(super) fn unlink(&mut self) {
self.next = [<NonMaxIndex$b>]::none();
}
#[inline]
pub(super) fn reset(&mut self, data: T) {
self.data = data;
self.next = [<NonMaxIndex$b>]::none();
}
#[inline]
pub(super) fn into_components(self) -> ([<NonMaxIndex$b>], T) {
(self.next, self.data)
}
}
}};
}
pub(super) use linked_list_array_node;