Skip to content

Commit d1ac069

Browse files
committed
Reuse operators to implement other operators for glm::vec
1 parent 83bd47e commit d1ac069

11 files changed

+393
-1122
lines changed

glm/detail/type_vec1.hpp

+3-35
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# include "_swizzle_func.hpp"
1111
#endif
1212
#include <cstddef>
13+
#include "vec_common_operators.hpp"
1314

1415
namespace glm
1516
{
@@ -104,18 +105,8 @@ namespace glm
104105
// -- Conversion vector constructors --
105106

106107
/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
107-
template<typename U, qualifier P>
108-
GLM_CTOR_DECL GLM_EXPLICIT vec(vec<2, U, P> const& v);
109-
/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
110-
template<typename U, qualifier P>
111-
GLM_CTOR_DECL GLM_EXPLICIT vec(vec<3, U, P> const& v);
112-
/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
113-
template<typename U, qualifier P>
114-
GLM_CTOR_DECL GLM_EXPLICIT vec(vec<4, U, P> const& v);
115-
116-
/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)
117-
template<typename U, qualifier P>
118-
GLM_CTOR_DECL GLM_EXPLICIT vec(vec<1, U, P> const& v);
108+
template<length_t L,typename U, qualifier P>
109+
GLM_CTOR_DECL GLM_EXPLICIT vec(vec<L, U, P> const& v);
119110

120111
// -- Swizzle constructors --
121112
/*
@@ -154,8 +145,6 @@ namespace glm
154145

155146
GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++();
156147
GLM_FUNC_DISCARD_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--();
157-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int);
158-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int);
159148

160149
// -- Unary bit operators --
161150

@@ -187,9 +176,6 @@ namespace glm
187176

188177
// -- Unary operators --
189178

190-
template<typename T, qualifier Q>
191-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v);
192-
193179
template<typename T, qualifier Q>
194180
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v);
195181

@@ -198,9 +184,6 @@ namespace glm
198184
template<typename T, qualifier Q>
199185
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar);
200186

201-
template<typename T, qualifier Q>
202-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v);
203-
204187
template<typename T, qualifier Q>
205188
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
206189

@@ -216,9 +199,6 @@ namespace glm
216199
template<typename T, qualifier Q>
217200
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar);
218201

219-
template<typename T, qualifier Q>
220-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v);
221-
222202
template<typename T, qualifier Q>
223203
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
224204

@@ -243,27 +223,18 @@ namespace glm
243223
template<typename T, qualifier Q>
244224
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar);
245225

246-
template<typename T, qualifier Q>
247-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v);
248-
249226
template<typename T, qualifier Q>
250227
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
251228

252229
template<typename T, qualifier Q>
253230
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar);
254231

255-
template<typename T, qualifier Q>
256-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v);
257-
258232
template<typename T, qualifier Q>
259233
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
260234

261235
template<typename T, qualifier Q>
262236
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar);
263237

264-
template<typename T, qualifier Q>
265-
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v);
266-
267238
template<typename T, qualifier Q>
268239
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
269240

@@ -293,9 +264,6 @@ namespace glm
293264
template<typename T, qualifier Q>
294265
GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
295266

296-
template<typename T, qualifier Q>
297-
GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);
298-
299267
template<qualifier Q>
300268
GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);
301269

glm/detail/type_vec1.inl

+2-83
Original file line numberDiff line numberDiff line change
@@ -38,26 +38,8 @@ namespace glm
3838
// -- Conversion vector constructors --
3939

4040
template<typename T, qualifier Q>
41-
template<typename U, qualifier P>
42-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v)
43-
: x(static_cast<T>(v.x))
44-
{}
45-
46-
template<typename T, qualifier Q>
47-
template<typename U, qualifier P>
48-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v)
49-
: x(static_cast<T>(v.x))
50-
{}
51-
52-
template<typename T, qualifier Q>
53-
template<typename U, qualifier P>
54-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v)
55-
: x(static_cast<T>(v.x))
56-
{}
57-
58-
template<typename T, qualifier Q>
59-
template<typename U, qualifier P>
60-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v)
41+
template<length_t L,typename U, qualifier P>
42+
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<L, U, P> const& v)
6143
: x(static_cast<T>(v.x))
6244
{}
6345

@@ -174,22 +156,6 @@ namespace glm
174156
return *this;
175157
}
176158

177-
template<typename T, qualifier Q>
178-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int)
179-
{
180-
vec<1, T, Q> Result(*this);
181-
++*this;
182-
return Result;
183-
}
184-
185-
template<typename T, qualifier Q>
186-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int)
187-
{
188-
vec<1, T, Q> Result(*this);
189-
--*this;
190-
return Result;
191-
}
192-
193159
// -- Unary bit operators --
194160

195161
template<typename T, qualifier Q>
@@ -290,12 +256,6 @@ namespace glm
290256

291257
// -- Unary constant operators --
292258

293-
template<typename T, qualifier Q>
294-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v)
295-
{
296-
return v;
297-
}
298-
299259
template<typename T, qualifier Q>
300260
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v)
301261
{
@@ -312,13 +272,6 @@ namespace glm
312272
v.x + scalar);
313273
}
314274

315-
template<typename T, qualifier Q>
316-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v)
317-
{
318-
return vec<1, T, Q>(
319-
scalar + v.x);
320-
}
321-
322275
template<typename T, qualifier Q>
323276
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
324277
{
@@ -355,13 +308,6 @@ namespace glm
355308
v.x * scalar);
356309
}
357310

358-
template<typename T, qualifier Q>
359-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v)
360-
{
361-
return vec<1, T, Q>(
362-
scalar * v.x);
363-
}
364-
365311
template<typename T, qualifier Q>
366312
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
367313
{
@@ -420,13 +366,6 @@ namespace glm
420366
v.x & scalar);
421367
}
422368

423-
template<typename T, qualifier Q>
424-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v)
425-
{
426-
return vec<1, T, Q>(
427-
scalar & v.x);
428-
}
429-
430369
template<typename T, qualifier Q>
431370
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
432371
{
@@ -441,13 +380,6 @@ namespace glm
441380
v.x | scalar);
442381
}
443382

444-
template<typename T, qualifier Q>
445-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v)
446-
{
447-
return vec<1, T, Q>(
448-
scalar | v.x);
449-
}
450-
451383
template<typename T, qualifier Q>
452384
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
453385
{
@@ -462,13 +394,6 @@ namespace glm
462394
v.x ^ scalar);
463395
}
464396

465-
template<typename T, qualifier Q>
466-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v)
467-
{
468-
return vec<1, T, Q>(
469-
scalar ^ v.x);
470-
}
471-
472397
template<typename T, qualifier Q>
473398
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
474399
{
@@ -533,12 +458,6 @@ namespace glm
533458
return detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x);
534459
}
535460

536-
template<typename T, qualifier Q>
537-
GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)
538-
{
539-
return !(v1 == v2);
540-
}
541-
542461
template<qualifier Q>
543462
GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)
544463
{

0 commit comments

Comments
 (0)