ggmath/
dir.rs

1/// `RIGHT` and `LEFT` constants where right is positive.
2pub mod right {
3    use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
4
5    /// `RIGHT` constant where right is positive.
6    pub trait RightExt {
7        /// Points right (right is positive).
8        const RIGHT: Self;
9    }
10
11    /// `LEFT` constant where right is positive.
12    pub trait NegLeftExt {
13        /// Points left (right is positive).
14        const LEFT: Self;
15    }
16
17    impl<T: ScalarOne> RightExt for T {
18        const RIGHT: Self = Self::ONE;
19    }
20
21    impl<T: ScalarNegOne> NegLeftExt for T {
22        const LEFT: Self = Self::NEG_ONE;
23    }
24
25    impl<T: ScalarZero + ScalarOne, A: Alignment> RightExt for Vector<2, T, A> {
26        const RIGHT: Self = Self::X;
27    }
28
29    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegLeftExt for Vector<2, T, A> {
30        const LEFT: Self = Self::NEG_X;
31    }
32
33    impl<T: ScalarZero + ScalarOne, A: Alignment> RightExt for Vector<3, T, A> {
34        const RIGHT: Self = Self::X;
35    }
36
37    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegLeftExt for Vector<3, T, A> {
38        const LEFT: Self = Self::NEG_X;
39    }
40
41    impl<T: ScalarZero + ScalarOne, A: Alignment> RightExt for Vector<4, T, A> {
42        const RIGHT: Self = Self::X;
43    }
44
45    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegLeftExt for Vector<4, T, A> {
46        const LEFT: Self = Self::NEG_X;
47    }
48}
49
50/// `LEFT` and `RIGHT` constants where left is positive.
51pub mod left {
52    use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
53
54    /// `LEFT` constant where left is positive.
55    pub trait LeftExt {
56        /// Points left (left is positive).
57        const LEFT: Self;
58    }
59
60    /// `RIGHT` constant where left is positive.
61    pub trait NegRightExt {
62        /// Points right (left is positive).
63        const RIGHT: Self;
64    }
65
66    impl<T: ScalarOne> LeftExt for T {
67        const LEFT: Self = Self::ONE;
68    }
69
70    impl<T: ScalarNegOne> NegRightExt for T {
71        const RIGHT: Self = Self::NEG_ONE;
72    }
73
74    impl<T: ScalarZero + ScalarOne, A: Alignment> LeftExt for Vector<2, T, A> {
75        const LEFT: Self = Self::X;
76    }
77
78    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegRightExt for Vector<2, T, A> {
79        const RIGHT: Self = Self::NEG_X;
80    }
81
82    impl<T: ScalarZero + ScalarOne, A: Alignment> LeftExt for Vector<3, T, A> {
83        const LEFT: Self = Self::X;
84    }
85
86    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegRightExt for Vector<3, T, A> {
87        const RIGHT: Self = Self::NEG_X;
88    }
89
90    impl<T: ScalarZero + ScalarOne, A: Alignment> LeftExt for Vector<4, T, A> {
91        const LEFT: Self = Self::X;
92    }
93
94    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegRightExt for Vector<4, T, A> {
95        const RIGHT: Self = Self::NEG_X;
96    }
97}
98
99/// `UP` and `DOWN` constants where up is positive.
100pub mod up {
101    use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
102
103    /// `UP` constant where up is positive.
104    pub trait UpExt {
105        /// Points up (up is positive).
106        const UP: Self;
107    }
108
109    /// `DOWN` constant where up is positive.
110    pub trait NegDownExt {
111        /// Points down (up is positive).
112        const DOWN: Self;
113    }
114
115    impl<T: ScalarOne> UpExt for T {
116        const UP: Self = Self::ONE;
117    }
118
119    impl<T: ScalarNegOne> NegDownExt for T {
120        const DOWN: Self = Self::NEG_ONE;
121    }
122
123    impl<T: ScalarZero + ScalarOne, A: Alignment> UpExt for Vector<2, T, A> {
124        const UP: Self = Self::Y;
125    }
126
127    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegDownExt for Vector<2, T, A> {
128        const DOWN: Self = Self::NEG_Y;
129    }
130
131    impl<T: ScalarZero + ScalarOne, A: Alignment> UpExt for Vector<3, T, A> {
132        const UP: Self = Self::Y;
133    }
134
135    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegDownExt for Vector<3, T, A> {
136        const DOWN: Self = Self::NEG_Y;
137    }
138
139    impl<T: ScalarZero + ScalarOne, A: Alignment> UpExt for Vector<4, T, A> {
140        const UP: Self = Self::Y;
141    }
142
143    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegDownExt for Vector<4, T, A> {
144        const DOWN: Self = Self::NEG_Y;
145    }
146}
147
148/// `DOWN` and `UP` constants where down is positive.
149pub mod down {
150    use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
151
152    /// `DOWN` constant where down is positive.
153    pub trait DownExt {
154        /// Points down (down is positive).
155        const DOWN: Self;
156    }
157
158    /// `UP` constant where down is positive.
159    pub trait NegUpExt {
160        /// Points up (down is positive).
161        const UP: Self;
162    }
163
164    impl<T: ScalarOne> DownExt for T {
165        const DOWN: Self = Self::ONE;
166    }
167
168    impl<T: ScalarNegOne> NegUpExt for T {
169        const UP: Self = Self::NEG_ONE;
170    }
171
172    impl<T: ScalarZero + ScalarOne, A: Alignment> DownExt for Vector<2, T, A> {
173        const DOWN: Self = Self::Y;
174    }
175
176    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegUpExt for Vector<2, T, A> {
177        const UP: Self = Self::NEG_Y;
178    }
179
180    impl<T: ScalarZero + ScalarOne, A: Alignment> DownExt for Vector<3, T, A> {
181        const DOWN: Self = Self::Y;
182    }
183
184    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegUpExt for Vector<3, T, A> {
185        const UP: Self = Self::NEG_Y;
186    }
187
188    impl<T: ScalarZero + ScalarOne, A: Alignment> DownExt for Vector<4, T, A> {
189        const DOWN: Self = Self::Y;
190    }
191
192    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegUpExt for Vector<4, T, A> {
193        const UP: Self = Self::NEG_Y;
194    }
195}
196
197/// `FORWARD` and `BACKWARD` constants where forwards is positive.
198pub mod forward {
199    use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
200
201    /// `FORWARD` constant where forwards is positive.
202    pub trait ForwardExt {
203        /// Points forward (forwards is positive).
204        const FORWARD: Self;
205    }
206
207    /// `BACKWARD` constant where forwards is positive.
208    pub trait NegBackwardExt {
209        /// Points backward (forwards is positive).
210        const BACKWARD: Self;
211    }
212
213    impl<T: ScalarOne> ForwardExt for T {
214        const FORWARD: Self = Self::ONE;
215    }
216
217    impl<T: ScalarNegOne> NegBackwardExt for T {
218        const BACKWARD: Self = Self::NEG_ONE;
219    }
220
221    impl<T: ScalarZero + ScalarOne, A: Alignment> ForwardExt for Vector<3, T, A> {
222        const FORWARD: Self = Self::Z;
223    }
224
225    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegBackwardExt for Vector<3, T, A> {
226        const BACKWARD: Self = Self::NEG_Z;
227    }
228
229    impl<T: ScalarZero + ScalarOne, A: Alignment> ForwardExt for Vector<4, T, A> {
230        const FORWARD: Self = Self::Z;
231    }
232
233    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegBackwardExt for Vector<4, T, A> {
234        const BACKWARD: Self = Self::NEG_Z;
235    }
236}
237
238/// `BACKWARD` and `FORWARD` constants where backwards is positive.
239pub mod backward {
240    use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
241
242    /// `BACKWARD` constant where backwards is positive.
243    pub trait BackwardExt {
244        /// Points backward (backwards is positive).
245        const BACKWARD: Self;
246    }
247
248    /// `FORWARD` constant where backwards is positive.
249    pub trait NegForwardExt {
250        /// Points forward (backwards is positive).
251        const FORWARD: Self;
252    }
253
254    impl<T: ScalarOne> BackwardExt for T {
255        const BACKWARD: Self = Self::ONE;
256    }
257
258    impl<T: ScalarNegOne> NegForwardExt for T {
259        const FORWARD: Self = Self::NEG_ONE;
260    }
261
262    impl<T: ScalarZero + ScalarOne, A: Alignment> BackwardExt for Vector<3, T, A> {
263        const BACKWARD: Self = Self::Z;
264    }
265
266    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegForwardExt for Vector<3, T, A> {
267        const FORWARD: Self = Self::NEG_Z;
268    }
269
270    impl<T: ScalarZero + ScalarOne, A: Alignment> BackwardExt for Vector<4, T, A> {
271        const BACKWARD: Self = Self::Z;
272    }
273
274    impl<T: ScalarZero + ScalarNegOne, A: Alignment> NegForwardExt for Vector<4, T, A> {
275        const FORWARD: Self = Self::NEG_Z;
276    }
277}