1pub mod right {
3 use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
4
5 pub trait RightExt {
7 const RIGHT: Self;
9 }
10
11 pub trait NegLeftExt {
13 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
50pub mod left {
52 use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
53
54 pub trait LeftExt {
56 const LEFT: Self;
58 }
59
60 pub trait NegRightExt {
62 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
99pub mod up {
101 use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
102
103 pub trait UpExt {
105 const UP: Self;
107 }
108
109 pub trait NegDownExt {
111 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
148pub mod down {
150 use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
151
152 pub trait DownExt {
154 const DOWN: Self;
156 }
157
158 pub trait NegUpExt {
160 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
197pub mod forward {
199 use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
200
201 pub trait ForwardExt {
203 const FORWARD: Self;
205 }
206
207 pub trait NegBackwardExt {
209 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
238pub mod backward {
240 use crate::{Alignment, ScalarNegOne, ScalarOne, ScalarZero, Vector};
241
242 pub trait BackwardExt {
244 const BACKWARD: Self;
246 }
247
248 pub trait NegForwardExt {
250 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}