use crate::indexing::SpIndex;
use crate::sparse::prelude::*;
use std::ops::Deref;
pub trait SpMatView<N, I: SpIndex, Iptr: SpIndex = I> {
fn view(&self) -> CsMatViewI<N, I, Iptr>;
fn transpose_view(&self) -> CsMatViewI<N, I, Iptr>;
}
impl<N, I, Iptr, IpStorage, IndStorage, DataStorage> SpMatView<N, I, Iptr>
for CsMatBase<N, I, IpStorage, IndStorage, DataStorage, Iptr>
where
I: SpIndex,
Iptr: SpIndex,
IpStorage: Deref<Target = [Iptr]>,
IndStorage: Deref<Target = [I]>,
DataStorage: Deref<Target = [N]>,
{
fn view(&self) -> CsMatViewI<N, I, Iptr> {
self.view()
}
fn transpose_view(&self) -> CsMatViewI<N, I, Iptr> {
self.transpose_view()
}
}
pub trait SpVecView<N, I: SpIndex> {
fn view(&self) -> CsVecViewI<N, I>;
}
impl<N, I, IndStorage, DataStorage> SpVecView<N, I>
for CsVecBase<IndStorage, DataStorage, N, I>
where
IndStorage: Deref<Target = [I]>,
DataStorage: Deref<Target = [N]>,
I: SpIndex,
{
fn view(&self) -> CsVecViewI<N, I> {
self.view()
}
}