use core::cell::Cell;
use crate::span::Span;
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct Links<T, I, P>
where
T: Copy,
{
pub(crate) data: Cell<T>,
pub(crate) span: Span<I>,
pub(crate) parent: Option<P>,
pub(crate) prev: Option<P>,
pub(crate) next: Option<P>,
pub(crate) first: Option<P>,
pub(crate) last: Option<P>,
}
#[test]
fn test_size() {
macro_rules! test {
($data:ty, $index:ty, $width:ty, $max_align:expr) => {
assert!(
(
std::mem::size_of::<Links<$data, $index, <$width as crate::pointer::Width>::Pointer>>() as isize
-
(std::mem::size_of::<$data>() as isize + ((<$index>::BITS * 2) / 8) as isize + ((<$width>::BITS * 5) / 8) as isize)
).abs() <= $max_align
);
}
}
test!([u8; 8], u32, u16, 4);
test!([u8; 8], u32, u32, 4);
test!([u8; 8], u32, u64, 4);
test!([u8; 8], u32, u128, 4);
}