use ariadnetor_core::backend::MemoryOrder;
use crate::TensorLayout;
#[derive(Clone, Debug)]
pub struct DenseLayout {
shape: Vec<usize>,
order: MemoryOrder,
}
impl DenseLayout {
pub fn new(shape: Vec<usize>, order: MemoryOrder) -> Self {
Self { shape, order }
}
pub fn shape(&self) -> &[usize] {
&self.shape
}
pub fn rank(&self) -> usize {
self.shape.len()
}
pub fn order(&self) -> MemoryOrder {
self.order
}
}
impl TensorLayout for DenseLayout {
fn shape(&self) -> &[usize] {
&self.shape
}
fn storage_extent(&self) -> usize {
self.shape.iter().product()
}
}