Skip to main content

grafix_toolbox/kit/policies/math/
tuple.rs

1pub use {apply::*, math::*, swizzle::s::*};
2
3pub trait TupleAllAny {
4	fn all(&self) -> bool;
5	fn any(&self) -> bool;
6}
7pub trait TupleIdentity: Default + Copy {
8	fn one() -> Self;
9	#[inline(always)]
10	fn zero() -> Self {
11		Self::default()
12	}
13}
14
15impl TupleAllAny for (bool, bool) {
16	#[inline(always)]
17	fn all(&self) -> bool {
18		self.0 && self.1
19	}
20	#[inline(always)]
21	fn any(&self) -> bool {
22		self.0 || self.1
23	}
24}
25impl TupleAllAny for (bool, bool, bool) {
26	#[inline(always)]
27	fn all(&self) -> bool {
28		self.0 && self.1 && self.2
29	}
30	#[inline(always)]
31	fn any(&self) -> bool {
32		self.0 || self.1 || self.2
33	}
34}
35impl TupleAllAny for (bool, bool, bool, bool) {
36	#[inline(always)]
37	fn all(&self) -> bool {
38		self.0 && self.1 && self.2 && self.3
39	}
40	#[inline(always)]
41	fn any(&self) -> bool {
42		self.0 || self.1 || self.2 || self.3
43	}
44}
45
46impl<T: ToZero> TupleIdentity for vec2<T> {
47	#[inline(always)]
48	fn one() -> Self {
49		Self::to(1)
50	}
51}
52impl<T: ToZero> TupleIdentity for vec3<T> {
53	#[inline(always)]
54	fn one() -> Self {
55		Self::to(1)
56	}
57}
58impl<T: ToZero> TupleIdentity for vec4<T> {
59	#[inline(always)]
60	fn one() -> Self {
61		Self::to(1)
62	}
63}
64impl<T: ToZero, const N: usize> TupleIdentity for [T; N]
65where
66	Self: Default,
67{
68	#[inline(always)]
69	fn one() -> Self {
70		[T::to(1); N]
71	}
72}
73
74trait_alias!(ToZero, Cast<u32> + Default + Copy);
75
76mod apply;
77mod math;
78mod swizzle;
79
80use super::pre::*;