use crate::prelude_dev::*;

pub trait OpPackTriAPI<T>
where
    Self: DeviceAPI<T> + DeviceRawAPI<MaybeUninit<T>>,
{
    fn pack_tri(
        &self,
        a: &mut <Self as DeviceRawAPI<MaybeUninit<T>>>::Raw,
        la: &Layout<IxD>,
        b: &<Self as DeviceRawAPI<T>>::Raw,
        lb: &Layout<IxD>,
        uplo: FlagUpLo,
    ) -> Result<()>;
}

pub trait OpUnpackTriAPI<T>
where
    Self: DeviceAPI<T> + DeviceRawAPI<MaybeUninit<T>>,
{
    fn unpack_tri(
        &self,
        a: &mut <Self as DeviceRawAPI<MaybeUninit<T>>>::Raw,
        la: &Layout<IxD>,
        b: &<Self as DeviceRawAPI<T>>::Raw,
        lb: &Layout<IxD>,
        uplo: FlagUpLo,
        symm: FlagSymm,
    ) -> Result<()>;
}
