Struct vecmat::Vector [−][src]
#[repr(transparent)]pub struct Vector<T, const N: usize> { /* fields omitted */ }
Vector of fixed size.
Implementations
impl<T, const N: usize> Vector<T, N>
[src]
pub fn uninit() -> Vector<MaybeUninit<T>, N>
[src]
Create a vector with uninitialized content.
impl<T, const N: usize> Vector<MaybeUninit<T>, N>
[src]
pub unsafe fn assume_init(self) -> Vector<T, N>
[src]
Assume that vector content is initialized.
impl<T, const N: usize> Vector<T, N>
[src]
impl<T, const N: usize> Vector<T, N> where
T: Default,
[src]
T: Default,
impl<T, const N: usize> Vector<T, N> where
T: Copy,
[src]
T: Copy,
impl<T, const N: usize> Vector<T, N>
[src]
pub fn from_array(array: [T; N]) -> Self
[src]
Create from array.
pub fn into_array(self) -> [T; N]
[src]
Convert to array.
pub fn as_array(&self) -> &[T; N]
[src]
Get a reference to underlying array.
pub fn as_mut_array(&mut self) -> &mut [T; N]
[src]
Get a mutable reference to underlying array.
impl<T, const N: usize> Vector<T, N>
[src]
pub fn as_ptr(&self) -> *const T
[src]
Get pointer to the first element.
pub fn as_mut_ptr(&mut self) -> *mut T
[src]
Get mutable pointer to the first element.
pub unsafe fn get_unchecked(&self, i: usize) -> &T
[src]
Get reference to the elements without boundary checking.
pub unsafe fn get_unchecked_mut(&mut self, i: usize) -> &mut T
[src]
Get mutable reference to the elements without boundary checking.
impl<T, const N: usize> Vector<T, N>
[src]
pub fn iter(&self) -> Iter<'_, T>
[src]
Returns iterator over vector element refrences.
pub fn iter_mut(&mut self) -> IterMut<'_, T>
[src]
Returns iterator over vector element mutable refrences.
impl<T, const N: usize> Vector<T, N>
[src]
pub fn try_from_iter<I>(iter: I) -> Option<Self> where
I: Iterator<Item = T>,
[src]
I: Iterator<Item = T>,
Try to conctruct a vector from iterator.
If iterator conatains less items than vector, then Err
is returned.
impl<const N: usize> Vector<usize, N>
[src]
impl<T, const N: usize> Vector<T, N>
[src]
pub fn for_each<F: FnMut(T)>(self, f: F)
[src]
Call closure for each element of the vector passing it by value.
pub fn map<U, F: FnMut(T) -> U>(self, f: F) -> Vector<U, N>
[src]
Map vector elements.
pub fn zip<U>(self, other: Vector<U, N>) -> Vector<(T, U), N>
[src]
Zip two vectors into one.
pub fn enumerate(self) -> Vector<(usize, T), N>
[src]
Enumerate vector elements.
impl<T, U, const N: usize> Vector<(T, U), N>
[src]
impl<T, const N: usize> Vector<T, N>
[src]
pub fn fold<S, F: FnMut(S, T) -> S>(self, s: S, f: F) -> S
[src]
pub fn fold_first<F: FnMut(T, T) -> T>(self, f: F) -> T
[src]
pub fn scan<S, U, F: FnMut(&mut S, T) -> U>(self, s: S, f: F) -> Vector<U, N>
[src]
impl<T, const N: usize> Vector<T, N> where
T: Add<Output = T> + Mul<Output = T> + Copy,
[src]
T: Add<Output = T> + Mul<Output = T> + Copy,
pub fn square_length(self) -> T
[src]
impl<T, const N: usize> Vector<T, N> where
T: Float,
[src]
T: Float,
impl<T, const N: usize> Vector<T, N>
[src]
pub fn sum(self) -> T where
T: Add<Output = T>,
[src]
T: Add<Output = T>,
pub fn max(self) -> T where
T: PartialOrd,
[src]
T: PartialOrd,
pub fn min(self) -> T where
T: PartialOrd,
[src]
T: PartialOrd,
impl<const N: usize> Vector<bool, N>
[src]
impl<const N: usize> Vector<bool, N>
[src]
impl<T, const N: usize> Vector<T, N> where
T: Integer,
[src]
T: Integer,
pub fn div_floor(self, other: Vector<T, N>) -> Vector<T, N>
[src]
pub fn mod_floor(self, other: Vector<T, N>) -> Vector<T, N>
[src]
pub fn div_mod_floor(self, other: Vector<T, N>) -> (Vector<T, N>, Vector<T, N>)
[src]
impl<T, const N: usize> Vector<T, N> where
T: PartialEq,
[src]
T: PartialEq,
pub fn veq(self, other: Vector<T, N>) -> Vector<bool, N>
[src]
pub fn vne(self, other: Vector<T, N>) -> Vector<bool, N>
[src]
impl<T, const N: usize> Vector<T, N> where
T: PartialOrd,
[src]
T: PartialOrd,
pub fn vlt(self, other: Vector<T, N>) -> Vector<bool, N>
[src]
pub fn vle(self, other: Vector<T, N>) -> Vector<bool, N>
[src]
pub fn vgt(self, other: Vector<T, N>) -> Vector<bool, N>
[src]
pub fn vge(self, other: Vector<T, N>) -> Vector<bool, N>
[src]
impl<T> Vector<T, 2> where
T: Copy,
[src]
T: Copy,
impl<T> Vector<T, 3> where
T: Copy,
[src]
T: Copy,
impl<T> Vector<T, 4> where
T: Copy,
[src]
T: Copy,
pub fn x(&self) -> T
[src]
pub fn y(&self) -> T
[src]
pub fn z(&self) -> T
[src]
pub fn w(&self) -> T
[src]
impl<T> Vector<T, 2>
[src]
pub fn x_ref(&self) -> &T
[src]
pub fn y_ref(&self) -> &T
[src]
pub fn x_mut(&mut self) -> &mut T
[src]
pub fn y_mut(&mut self) -> &mut T
[src]
impl<T> Vector<T, 3>
[src]
pub fn x_ref(&self) -> &T
[src]
pub fn y_ref(&self) -> &T
[src]
pub fn z_ref(&self) -> &T
[src]
pub fn x_mut(&mut self) -> &mut T
[src]
pub fn y_mut(&mut self) -> &mut T
[src]
pub fn z_mut(&mut self) -> &mut T
[src]
impl<T> Vector<T, 4>
[src]
pub fn x_ref(&self) -> &T
[src]
pub fn y_ref(&self) -> &T
[src]
pub fn z_ref(&self) -> &T
[src]
pub fn w_ref(&self) -> &T
[src]
pub fn x_mut(&mut self) -> &mut T
[src]
pub fn y_mut(&mut self) -> &mut T
[src]
pub fn z_mut(&mut self) -> &mut T
[src]
pub fn w_mut(&mut self) -> &mut T
[src]
impl<T> Vector<T, 2> where
T: Mul<Output = T> + Sub<Output = T> + Copy,
[src]
T: Mul<Output = T> + Sub<Output = T> + Copy,
impl<T> Vector<T, 3> where
T: Mul<Output = T> + Sub<Output = T> + Copy,
[src]
T: Mul<Output = T> + Sub<Output = T> + Copy,
impl<T> Vector<T, 4> where
T: Mul<Output = T> + Sub<Output = T> + Zero + Copy,
[src]
T: Mul<Output = T> + Sub<Output = T> + Zero + Copy,
pub fn cross(self, other: Vector<T, 4>) -> Vector<T, 4>
[src]
Cross product of first three components, fourth one is set to zero.
impl<T> Vector<T, 2>
[src]
pub fn from_tuple((x, y): (T, T)) -> Self
[src]
pub fn into_tuple(self) -> (T, T)
[src]
impl<T> Vector<T, 3>
[src]
pub fn from_tuple((x, y, z): (T, T, T)) -> Self
[src]
pub fn into_tuple(self) -> (T, T, T)
[src]
impl<T> Vector<T, 4>
[src]
pub fn from_tuple((x, y, z, w): (T, T, T, T)) -> Self
[src]
pub fn into_tuple(self) -> (T, T, T, T)
[src]
Trait Implementations
impl<T, const N: usize> AbsDiffEq<Vector<T, N>> for Vector<T, N> where
T: AbsDiffEq<Epsilon = T> + Copy,
[src]
T: AbsDiffEq<Epsilon = T> + Copy,
type Epsilon = T
Used for specifying relative comparisons.
fn default_epsilon() -> Self::Epsilon
[src]
fn abs_diff_eq(&self, other: &Self, epsilon: Self::Epsilon) -> bool
[src]
pub fn abs_diff_ne(&self, other: &Rhs, epsilon: Self::Epsilon) -> bool
[src]
impl<T, const N: usize> Add<Vector<T, N>> for Vector<T, N> where
T: Add<Output = T>,
[src]
T: Add<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the +
operator.
fn add(self, vec: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> AddAssign<Vector<T, N>> for Vector<T, N> where
T: AddAssign,
[src]
T: AddAssign,
fn add_assign(&mut self, vec: Vector<T, N>)
[src]
impl<T, const N: usize> AsMut<[T; N]> for Vector<T, N>
[src]
impl<T, const M: usize, const N: usize> AsMut<Vector<Vector<T, N>, M>> for Matrix<T, M, N>
[src]
impl<T, const N: usize> AsRef<[T; N]> for Vector<T, N>
[src]
impl<T, const M: usize, const N: usize> AsRef<Vector<Vector<T, N>, M>> for Matrix<T, M, N>
[src]
impl<T, const N: usize> BitAnd<Vector<T, N>> for Vector<T, N> where
T: BitAnd<Output = T>,
[src]
T: BitAnd<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the &
operator.
fn bitand(self, other: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> BitAndAssign<Vector<T, N>> for Vector<T, N> where
T: BitAndAssign,
[src]
T: BitAndAssign,
fn bitand_assign(&mut self, other: Vector<T, N>)
[src]
impl<T, const N: usize> BitOr<Vector<T, N>> for Vector<T, N> where
T: BitOr<Output = T>,
[src]
T: BitOr<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the |
operator.
fn bitor(self, other: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> BitOrAssign<Vector<T, N>> for Vector<T, N> where
T: BitOrAssign,
[src]
T: BitOrAssign,
fn bitor_assign(&mut self, other: Vector<T, N>)
[src]
impl<T, const N: usize> BitXor<Vector<T, N>> for Vector<T, N> where
T: BitXor<Output = T>,
[src]
T: BitXor<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the ^
operator.
fn bitxor(self, other: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> BitXorAssign<Vector<T, N>> for Vector<T, N> where
T: BitXorAssign,
[src]
T: BitXorAssign,
fn bitxor_assign(&mut self, other: Vector<T, N>)
[src]
impl<T: Clone, const N: usize> Clone for Vector<T, N>
[src]
impl<T: Copy, const N: usize> Copy for Vector<T, N>
[src]
impl<T, const N: usize> Debug for Vector<T, N> where
T: Debug,
[src]
T: Debug,
impl<T, const N: usize> Default for Vector<T, N> where
T: Default,
[src]
T: Default,
impl<T, const N: usize> Display for Vector<T, N> where
T: Display,
[src]
T: Display,
impl<D: Distribution<T>, T, const N: usize> Distribution<Vector<T, N>> for VectorDistribution<D, T, N>
[src]
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Vector<T, N>
[src]
pub fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> where
R: Rng,
[src]
R: Rng,
impl<T, const N: usize> Distribution<Vector<T, N>> for Normal where
Normal: Distribution<T>,
[src]
Normal: Distribution<T>,
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Vector<T, N>
[src]
pub fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> where
R: Rng,
[src]
R: Rng,
impl<T: Float, const N: usize> Distribution<Vector<T, N>> for NonZero where
Normal: Distribution<Vector<T, N>>,
[src]
Normal: Distribution<Vector<T, N>>,
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Vector<T, N>
[src]
pub fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> where
R: Rng,
[src]
R: Rng,
impl<T: Float, const N: usize> Distribution<Vector<T, N>> for Unit where
NonZero: Distribution<Vector<T, N>>,
[src]
NonZero: Distribution<Vector<T, N>>,
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Vector<T, N>
[src]
pub fn sample_iter<R>(self, rng: R) -> DistIter<Self, R, T> where
R: Rng,
[src]
R: Rng,
impl<T, const N: usize> Div<T> for Vector<T, N> where
T: Div<Output = T> + Copy,
[src]
T: Div<Output = T> + Copy,
type Output = Vector<T, N>
The resulting type after applying the /
operator.
fn div(self, a: T) -> Self::Output
[src]
impl<T, const N: usize> Div<Vector<T, N>> for Vector<T, N> where
T: Div<Output = T>,
[src]
T: Div<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the /
operator.
fn div(self, vec: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> DivAssign<T> for Vector<T, N> where
T: DivAssign + Copy,
[src]
T: DivAssign + Copy,
fn div_assign(&mut self, a: T)
[src]
impl<T, const N: usize> DivAssign<Vector<T, N>> for Vector<T, N> where
T: DivAssign,
[src]
T: DivAssign,
fn div_assign(&mut self, vec: Vector<T, N>)
[src]
impl<T, const M: usize, const N: usize> Dot<Matrix<T, M, N>> for Vector<T, M> where
T: Mul<Output = T> + Add<Output = T> + Copy,
[src]
T: Mul<Output = T> + Add<Output = T> + Copy,
type Output = Vector<T, N>
Dot product output type.
fn dot(self, mat: Matrix<T, M, N>) -> Self::Output
[src]
impl<T, const M: usize, const N: usize> Dot<Vector<T, N>> for Matrix<T, M, N> where
T: Mul<Output = T> + Add<Output = T> + Copy,
[src]
T: Mul<Output = T> + Add<Output = T> + Copy,
type Output = Vector<T, M>
Dot product output type.
fn dot(self, vec: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> Dot<Vector<T, N>> for Vector<T, N> where
T: Mul<Output = T> + Add<Output = T>,
[src]
T: Mul<Output = T> + Add<Output = T>,
impl<T, const N: usize> From<&'_ [T; N]> for Vector<T, N> where
T: Copy,
[src]
T: Copy,
impl<T, const M: usize, const N: usize> From<&'_ Vector<Vector<T, N>, M>> for Matrix<T, M, N> where
T: Copy,
[src]
T: Copy,
impl<'a, T, const M: usize, const N: usize> From<&'a Matrix<T, M, N>> for &'a Vector<Vector<T, N>, M>
[src]
impl<'a, T, const M: usize, const N: usize> From<&'a mut Matrix<T, M, N>> for &'a mut Vector<Vector<T, N>, M>
[src]
impl<T, const N: usize> From<[T; N]> for Vector<T, N>
[src]
impl<T> From<(T, T, T, T)> for Vector<T, 4>
[src]
impl<T> From<(T, T, T)> for Vector<T, 3>
[src]
impl<T> From<(T, T)> for Vector<T, 2>
[src]
impl<T, const M: usize, const N: usize> From<Matrix<T, M, N>> for Vector<Vector<T, N>, M>
[src]
impl<T, const N: usize> From<Shift<T, N>> for Vector<T, N>
[src]
impl<T> From<Vector<T, 2_usize>> for Complex<T>
[src]
impl<T> From<Vector<T, 4_usize>> for Quaternion<T>
[src]
impl<T, const N: usize> From<Vector<T, N>> for Shift<T, N>
[src]
impl<T, const M: usize, const N: usize> From<Vector<Vector<T, N>, M>> for Matrix<T, M, N>
[src]
impl<T, const N: usize> Index<usize> for Vector<T, N>
[src]
impl<T, const N: usize> IndexMut<usize> for Vector<T, N>
[src]
impl<T, const N: usize> IntoIterator for Vector<T, N>
[src]
type Item = T
The type of the elements being iterated over.
type IntoIter = IntoIter<T, N>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
impl<'a, T, const N: usize> IntoIterator for &'a Vector<T, N>
[src]
type Item = &'a T
The type of the elements being iterated over.
type IntoIter = Iter<'a, T>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
impl<'a, T, const N: usize> IntoIterator for &'a mut Vector<T, N>
[src]
type Item = &'a mut T
The type of the elements being iterated over.
type IntoIter = IterMut<'a, T>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
impl<T, const N: usize> Mul<T> for Vector<T, N> where
T: Mul<Output = T> + Copy,
[src]
T: Mul<Output = T> + Copy,
type Output = Vector<T, N>
The resulting type after applying the *
operator.
fn mul(self, a: T) -> Self::Output
[src]
impl<T, const N: usize> Mul<Vector<T, N>> for Vector<T, N> where
T: Mul<Output = T>,
[src]
T: Mul<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the *
operator.
fn mul(self, vec: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> MulAssign<T> for Vector<T, N> where
T: MulAssign + Copy,
[src]
T: MulAssign + Copy,
fn mul_assign(&mut self, a: T)
[src]
impl<T, const N: usize> MulAssign<Vector<T, N>> for Vector<T, N> where
T: MulAssign,
[src]
T: MulAssign,
fn mul_assign(&mut self, vec: Vector<T, N>)
[src]
impl<T, const N: usize> Neg for Vector<T, N> where
T: Neg<Output = T>,
[src]
T: Neg<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the -
operator.
fn neg(self) -> Self::Output
[src]
impl<T, const N: usize> NormL1 for Vector<T, N> where
T: NormL1<Output = T> + Add<Output = T>,
[src]
T: NormL1<Output = T> + Add<Output = T>,
impl<T, const N: usize> NormL2 for Vector<T, N> where
T: Float,
[src]
T: Float,
impl<T, const N: usize> NormLInf for Vector<T, N> where
T: NormLInf<Output = T> + PartialOrd,
[src]
T: NormLInf<Output = T> + PartialOrd,
impl<T, const N: usize> Not for Vector<T, N> where
T: Not<Output = T>,
[src]
T: Not<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the !
operator.
fn not(self) -> Self::Output
[src]
impl<T, const M: usize, const N: usize> Outer<Vector<T, N>> for Vector<T, M> where
T: Mul<Output = T> + Copy,
[src]
T: Mul<Output = T> + Copy,
type Output = Matrix<T, M, N>
Outer product output type.
fn outer(self, other: Vector<T, N>) -> Self::Output
[src]
impl<T: PartialEq, const N: usize> PartialEq<Vector<T, N>> for Vector<T, N>
[src]
impl<T, const N: usize> Rem<T> for Vector<T, N> where
T: Rem<Output = T> + Copy,
[src]
T: Rem<Output = T> + Copy,
type Output = Vector<T, N>
The resulting type after applying the %
operator.
fn rem(self, a: T) -> Self::Output
[src]
impl<T, const N: usize> Rem<Vector<T, N>> for Vector<T, N> where
T: Rem<Output = T>,
[src]
T: Rem<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the %
operator.
fn rem(self, vec: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> RemAssign<T> for Vector<T, N> where
T: RemAssign + Copy,
[src]
T: RemAssign + Copy,
fn rem_assign(&mut self, a: T)
[src]
impl<T, const N: usize> RemAssign<Vector<T, N>> for Vector<T, N> where
T: RemAssign,
[src]
T: RemAssign,
fn rem_assign(&mut self, vec: Vector<T, N>)
[src]
impl<T, const N: usize> StructuralPartialEq for Vector<T, N>
[src]
impl<T, const N: usize> Sub<Vector<T, N>> for Vector<T, N> where
T: Sub<Output = T>,
[src]
T: Sub<Output = T>,
type Output = Vector<T, N>
The resulting type after applying the -
operator.
fn sub(self, vec: Vector<T, N>) -> Self::Output
[src]
impl<T, const N: usize> SubAssign<Vector<T, N>> for Vector<T, N> where
T: SubAssign,
[src]
T: SubAssign,
fn sub_assign(&mut self, vec: Vector<T, N>)
[src]
impl<'a, T, const N: usize> TryFrom<&'a [T]> for Vector<T, N> where
T: Copy,
[src]
T: Copy,
type Error = ()
The type returned in the event of a conversion error.
fn try_from(s: &'a [T]) -> Result<Self, Self::Error>
[src]
impl<T, const N: usize> Zero for Vector<T, N> where
T: Zero,
[src]
T: Zero,
Auto Trait Implementations
impl<T, const N: usize> RefUnwindSafe for Vector<T, N> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, const N: usize> Send for Vector<T, N> where
T: Send,
T: Send,
impl<T, const N: usize> Sync for Vector<T, N> where
T: Sync,
T: Sync,
impl<T, const N: usize> Unpin for Vector<T, N> where
T: Unpin,
T: Unpin,
impl<T, const N: usize> UnwindSafe for Vector<T, N> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, Rhs> NumAssignOps<Rhs> for T where
T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>,
[src]
T: AddAssign<Rhs> + SubAssign<Rhs> + MulAssign<Rhs> + DivAssign<Rhs> + RemAssign<Rhs>,
impl<T, Rhs, Output> NumOps<Rhs, Output> for T where
T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,
[src]
T: Sub<Rhs, Output = Output> + Mul<Rhs, Output = Output> + Div<Rhs, Output = Output> + Add<Rhs, Output = Output> + Rem<Rhs, Output = Output>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,