faer 0.24.0

linear algebra library
Documentation
use super::*;
use crate::into_range::IntoRange;
use crate::{Idx, IdxInc, assert, debug_assert};
impl<'a, R: Shape, T, Rs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>>
	ColIndex<RowRange> for ColRef<'a, T, R, Rs>
{
	type Target = ColRef<'a, T, RowRange::Len<R>, Rs>;

	#[track_caller]
	#[inline]
	fn get(this: Self, row: RowRange) -> Self::Target {
		let row = row.into_range(R::start(), this.nrows().end());
		assert!(all(row.start <= row.end, row.end <= this.nrows()));
		let nrows = unsafe {
			RowRange::Len::<R>::new_unbound(
				row.end.unbound() - row.start.unbound(),
			)
		};
		this.subrows(row.start, nrows)
	}

	#[track_caller]
	#[inline]
	unsafe fn get_unchecked(this: Self, row: RowRange) -> Self::Target {
		let row = row.into_range(R::start(), this.nrows().end());
		debug_assert!(all(row.start <= row.end, row.end <= this.nrows(),));
		let nrows = unsafe {
			RowRange::Len::<R>::new_unbound(
				row.end.unbound() - row.start.unbound(),
			)
		};
		this.subrows(row.start, nrows)
	}
}
impl<'a, R: Shape, T, Rs: Stride, RowRange: IntoRange<IdxInc<R>, Len<R>: 'a>>
	ColIndex<RowRange> for ColMut<'a, T, R, Rs>
{
	type Target = ColMut<'a, T, RowRange::Len<R>, Rs>;

	#[track_caller]
	#[inline]
	fn get(this: Self, row: RowRange) -> Self::Target {
		let row = row.into_range(R::start(), this.nrows().end());
		assert!(all(row.start <= row.end, row.end <= this.nrows()));
		let nrows = unsafe {
			RowRange::Len::<R>::new_unbound(
				row.end.unbound() - row.start.unbound(),
			)
		};
		this.subrows_mut(row.start, nrows)
	}

	#[track_caller]
	#[inline]
	unsafe fn get_unchecked(this: Self, row: RowRange) -> Self::Target {
		let row = row.into_range(R::start(), this.nrows().end());
		debug_assert!(all(row.start <= row.end, row.end <= this.nrows(),));
		let nrows = unsafe {
			RowRange::Len::<R>::new_unbound(
				row.end.unbound() - row.start.unbound(),
			)
		};
		this.subrows_mut(row.start, nrows)
	}
}
macro_rules! idx_impl {
    ($R:ty $(, $tt:tt)?) => {
        impl <'a $(, $tt)?, T, Rs : Stride > ColIndex < Idx <$R >> for ColRef <'a, T, $R,
        Rs > { type Target = &'a T; #[track_caller] #[inline] fn get(this : Self, row :
        Idx <$R >) -> Self::Target { this.at(row) } #[track_caller] #[inline] unsafe fn
        get_unchecked(this : Self, row : Idx <$R >) -> Self::Target { this
        .at_unchecked(row) } } impl <'a $(, $tt)?, T, Rs : Stride > ColIndex < Idx <$R >>
        for ColMut <'a, T, $R, Rs > { type Target = &'a mut T; #[track_caller] #[inline]
        fn get(this : Self, row : Idx <$R >) -> Self::Target { this.at_mut(row) }
        #[track_caller] #[inline] unsafe fn get_unchecked(this : Self, row : Idx <$R >)
        -> Self::Target { this.at_mut_unchecked(row) } }
    };
}
idx_impl!(usize);
idx_impl!(Dim <'N >, 'N);