grafix_toolbox/kit/policies/math/
tuple.rs

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