9#define SI_INLINE_CONSTEXPR constexpr inline
21 template <
class... T>
using vec_common_type_t = std::common_type_t<typename vec_value_type<T>::type...>;
24 template <
int N,
class T>
28 struct vec<2, T> :
vec<2, detail::vec_trivally_constructible<T>> {
34 struct vec<2,
detail::vec_trivally_constructible<T>> {
35 static_assert(std::is_arithmetic_v<T>);
38 static_assert(
sizeof(
vec) == 2 *
sizeof(T));
57 struct vec<3, T> :
vec<3, detail::vec_trivally_constructible<T>> {
63 struct vec<3,
detail::vec_trivally_constructible<T>> {
64 static_assert(std::is_arithmetic_v<T>);
67 static_assert(
sizeof(
vec) == 3 *
sizeof(T));
158 template <
class T> [[nodiscard]]
SI_INLINE_CONSTEXPR std::enable_if_t<std::is_arithmetic_v<T>, T>
sign(T x) {
return x > 0 ? 1 : x < 0 ? -1 : 0; }
163 template <
class T,
class U> [[nodiscard]]
SI_INLINE_CONSTEXPR std::enable_if_t<std::is_arithmetic_v<T> && std::is_arithmetic_v<U>, std::common_type_t<T, U>>
min(T lhs, U rhs) {
return (rhs < lhs) ? rhs : lhs; }
164 template <
class T,
class U> [[nodiscard]]
SI_INLINE_CONSTEXPR std::enable_if_t<std::is_arithmetic_v<T> && std::is_arithmetic_v<U>, std::common_type_t<T, U>>
max(T lhs, U rhs) {
return (lhs < rhs) ? rhs : lhs; }
171 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR std::enable_if_t<std::is_arithmetic_v<T>, std::common_type_t<T, U, V>>
clamp(T value, U
min, V
max) {
return (
min > value) ?
min : (
max < value) ?
max : value; }
172 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR vec2<detail::vec_common_type_t<T, U, V>>
clamp(
const vec2<T>& value, U
min, V
max) {
return {
clamp(value.x,
min,
max),
clamp(value.y,
min,
max) }; }
173 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR vec2<detail::vec_common_type_t<T, U, V>>
clamp(
const vec2<T>& value,
const vec2<U>&
min,
const vec2<V>&
max) {
return {
clamp(value.x,
min.x,
max.x),
clamp(value.y,
min.y,
max.y) }; }
174 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR vec3<detail::vec_common_type_t<T, U, V>>
clamp(
const vec3<T>& value, U
min, V
max) {
return {
clamp(value.x,
min,
max),
clamp(value.y,
min,
max),
clamp(value.z,
min,
max) }; }
175 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR vec3<detail::vec_common_type_t<T, U, V>>
clamp(
const vec3<T>& value,
const vec3<U>&
min,
const vec3<V>&
max) {
return {
clamp(value.x,
min.x,
max.x),
clamp(value.y,
min.y,
max.y),
clamp(value.z,
min.z,
max.z) }; }
182 template <
class T> [[nodiscard]]
inline auto length(
const vec2<T>& v) {
return std::sqrt(
dot(v, v)); }
183 template <
class T> [[nodiscard]]
inline auto length(
const vec3<T>& v) {
return std::sqrt(
dot(v, v)); }
187 template <
class T> [[nodiscard]]
inline auto normalize(
const vec2<T>& v) {
auto l =
length(v);
return v * (l ? (1 / l) : 0); }
188 template <
class T> [[nodiscard]]
inline auto normalize(
const vec3<T>& v) {
auto l =
length(v);
return v * (l ? (1 / l) : 0); }
198 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR std::common_type_t<T, U, V>
mix(T a, U b, V t) {
return (1 - t) * a + t * b; }
199 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR vec2<detail::vec_common_type_t<T, U, V>>
mix(
const vec2<T>& a,
const vec2<U>& b, V t) {
return {
mix(a.
x, b.
x, t),
mix(a.
y, b.
y, t) }; }
200 template <
class T,
class U,
class V> [[nodiscard]]
SI_INLINE_CONSTEXPR vec3<detail::vec_common_type_t<T, U, V>>
mix(
const vec3<T>& a,
const vec3<U>& b, V t) {
return {
mix(a.
x, b.
x, t),
mix(a.
y, b.
y, t),
mix(a.
z, b.
z, t) }; }
211 template <
long lengthExp,
long massExp,
long timeExp,
long temperatureExp,
long currentExp,
long substanceExp,
long intensityExp>
213 static constexpr long length = lengthExp;
214 static constexpr long mass = massExp;
215 static constexpr long time = timeExp;
222 template <
long Value>
228 template <
class,
class>
230 template <
class,
class>
238 template <
long Length,
long Mass,
long Time,
long Temperature,
long Current,
long Substance,
long Intensity>
243 template <
class Dimension,
class T>
248 template <
class Dimension,
class Ratio>
261#define SI_DIMENSION_OP(op_) dimension< \
262 Lhs::length op_ Rhs::length, \
263 Lhs::mass op_ Rhs::mass, \
264 Lhs::time op_ Rhs::time, \
265 Lhs::temperature op_ Rhs::temperature, \
266 Lhs::current op_ Rhs::current, \
267 Lhs::substance op_ Rhs::substance, \
268 Lhs::intensity op_ Rhs::intensity>
279#undef SI_DIMENSION_OP
291 template <
class Dimension,
class T>
299 return static_cast<bool>(m_value);
320 template <
class Dimension,
class T>
340 static_assert(std::is_floating_point_v<scalar_type>);
342 fill(
value, std::numeric_limits<scalar_type>::infinity());
343 return { Dimension(),
value };
348 static_assert(std::is_floating_point_v<scalar_type>);
350 fill(
value, std::numeric_limits<scalar_type>::quiet_NaN());
351 return { Dimension(),
value };
356 struct is_si : std::bool_constant<false> {};
358 template <
class Dimension,
class T>
369 template <
class T,
class = std::enable_if_t<!is_si_v<T>>>
376 template <
class T,
class U>
382 return decltype(
value(other)){};
386 template <
class Lhs,
class Rhs>
389 template <
class Lhs,
class Rhs>
392 template <
class T,
class U =
void,
class V =
void>
395 template <
class T,
class Dimension>
401 template <
class T,
class Dimension,
class U>
408 template <
class T,
class Dimension,
class U>
415 template <
class T,
class Dimension,
class U>
422 template <
class T,
class Dimension,
class U>
429 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
435 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
441 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
447 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
453 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
459 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
466#define SI_RETURN_QUANTITY(dimension_, ...) \
467 if constexpr(is_dimensionless_v<dimension_>) return (__VA_ARGS__); \
468 else return quantity{dimension_(), (__VA_ARGS__)}
470 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
477 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
484 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
490 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
497 template <
class Dimension,
class T>
499 return value(x) < 0.0 ? -x : x;
502 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
508 template <
class Dimension,
class T>
513 template <
class Dimension,
class T>
519 inline auto distance(
const quantity<
dimension<1, 0, 0, 0, 0, 0, 0>, T>& a,
const quantity<
dimension<1, 0, 0, 0, 0, 0, 0>, T>& b) {
523 template <
long Exponent,
class Dimension,
class T>
530 template <
long Degree,
class Dimension,
class T>
534 static_assert(std::is_same_v<dimension_multiply<result_dimension, value_dimension<Degree>>, Dimension>,
"cannot take root of this SI dimension");
538 template <
class Dimension,
class T>
542 static_assert(std::is_same_v<dimension_multiply<result_dimension, value_dimension<2>>, Dimension>,
"cannot take sqrt of this SI dimension");
546 template <
class Dimension,
class T>
552 template <
class T>
struct element_count : std::integral_constant<int, 1> {};
558 template <
class Value,
class Min,
class Max>
566 template <
long Num,
long Den>
574 template <
class Lhs,
class Rhs>
576 static constexpr auto factor = Lhs::factor * Rhs::factor;
579 template <
class Lhs,
class Rhs>
581 static constexpr auto factor = Lhs::factor / Rhs::factor;
590 template <
class Dimension,
class UnitRatio>
592 template <class T, class = std::enable_if_t<is_arithmetic<T>::value>>
595 if constexpr (std::is_same_v<tag_celsius, UnitRatio>) {
598 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>) {
599 SI_RETURN_QUANTITY(Dimension, (x +
static_cast<scalar_type
>(459.67)) *
static_cast<scalar_type
>(5. / 9));
605 template <
class T,
class U>
607 using common_type = std::common_type_t<T, U>;
610 if constexpr (std::is_same_v<tag_celsius, UnitRatio>) {
613 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>) {
621 template <
class T,
class U,
class V>
623 using common_type = std::common_type_t<T, U, V>;
626 if constexpr (std::is_same_v<tag_celsius, UnitRatio>) {
629 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>) {
642 if constexpr(std::is_same_v<tag_celsius, UnitRatio>)
643 return value(q) -
static_cast<scalar_type
>(273.15);
644 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>)
645 return value(q) *
static_cast<scalar_type
>(9. / 5) -
static_cast<scalar_type
>(459.67);
647 return value(q) /
static_cast<scalar_type
>(UnitRatio::factor);
651 template <
class Dimension,
long N>
653 template <class T, class = std::enable_if_t<is_arithmetic<T>::value>>
659 template <
long D,
class T>
664 template <
class T,
class U>
666 using common_type = std::common_type_t<T, U>;
670 template <
class T,
class U,
class V>
672 using common_type = std::common_type_t<T, U, V>;
694 template <
class Ratio>
699 template <class T, class = std::enable_if_t<is_arithmetic<T>::value>>
705 template <
class DimensionLhs,
class RatioLhs,
class DimensionRhs,
class RatioRhs>
710 template <
class DimensionLhs,
class RatioLhs,
class DimensionRhs,
class RatioRhs>
718 template <
class Dimension,
long long numerator = 1,
long long denumerator = 1>
SI_INLINE_CONSTEXPR quantity_storage()
Definition internal.h:294
friend SI_INLINE_CONSTEXPR T & value(quantity_storage &x)
Definition internal.h:309
friend SI_INLINE_CONSTEXPR const T & value(const quantity_storage &x)
Definition internal.h:305
#define SI_RETURN_QUANTITY(dimension_,...)
Definition internal.h:466
#define SI_INLINE_CONSTEXPR
Definition internal.h:9
#define SI_DIMENSION_OP(op_)
Definition internal.h:261
Definition internal.h:203
SI_INLINE_CONSTEXPR bool is_dimensionless_v
Definition internal.h:259
value_dimension< 0 > dimensionless
Definition internal.h:226
std::conditional_t< std::is_same_v< scalar_value_type_t< T >, SIdouble >, SIdouble, SIdouble > promoted_scalar_type
Definition internal.h:585
dimension_multiply_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_multiply
Definition internal.h:276
dimension_add_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_add
Definition internal.h:274
dimension< Value, Value, Value, Value, Value, Value, Value > value_dimension
Definition internal.h:223
SI_INLINE_CONSTEXPR long element_count_v
Definition internal.h:556
auto norm(const quantity< Dimension, T > &x)
Definition internal.h:514
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator+=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:402
SI_INLINE_CONSTEXPR quantity< Dimension, T > abs(const quantity< Dimension, T > &x)
Definition internal.h:498
dimension_subtract_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_subtract
Definition internal.h:275
auto root(const quantity< Dimension, T > &x)
Definition internal.h:531
SI_INLINE_CONSTEXPR quantity< Dimension, T > operator-(quantity< Dimension, T > x)
Definition internal.h:396
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T > > fill(T &x, T value)
Definition internal.h:316
SI_INLINE_CONSTEXPR const T & value(const T &x)
Definition internal.h:370
SI_INLINE_CONSTEXPR auto deangle(const quantity< Dimension, T > &x)
Definition internal.h:547
SI_INLINE_CONSTEXPR bool has_common_dimension_v
Definition internal.h:387
typename scalar_value_type< T >::type scalar_value_type_t
Definition internal.h:288
SI_INLINE_CONSTEXPR auto dot(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:503
SI_DIMENSION_OP(+) dimension_add_impl
Definition internal.h:270
SI_INLINE_CONSTEXPR auto operator/(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:491
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator/=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:423
typename dimension_of< std::decay_t< T > >::type dimension_of_t
Definition internal.h:255
auto distance(const quantity< dimension< 1, 0, 0, 0, 0, 0, 0 >, T > &a, const quantity< dimension< 1, 0, 0, 0, 0, 0, 0 >, T > &b)
Definition internal.h:519
SI_DIMENSION_OP(*) dimension_multiply_impl
Definition internal.h:272
SI_INLINE_CONSTEXPR auto operator!=(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:460
internal::vec2< T > vec2
Definition internal.h:205
SI_INLINE_CONSTEXPR auto operator>(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:442
std::enable_if_t< is_si_v< T >||is_si_v< U >||is_si_v< V > > enable_for_si
Definition internal.h:393
SI_INLINE_CONSTEXPR auto operator*(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:485
SI_INLINE_CONSTEXPR auto operator<=(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:436
SI_DIMENSION_OP(/) dimension_divide_impl
Definition internal.h:273
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator*=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:416
SI_INLINE_CONSTEXPR auto clamp(const Value &x, const Min &min, const Max &max)
Definition internal.h:559
internal::vec3< T > vec3
Definition internal.h:208
SI_INLINE_CONSTEXPR bool is_si_v
Definition internal.h:366
std::conditional_t< std::is_same_v< Lhs, zero_t >, dimension_of_t< Rhs >, dimension_of_t< Lhs > > dimension_common
Definition internal.h:390
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator-=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:409
SI_INLINE_CONSTEXPR auto operator+(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:471
dimension_divide_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_divide
Definition internal.h:277
SI_INLINE_CONSTEXPR auto operator<(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:430
auto normalize(const quantity< Dimension, T > &x)
Definition internal.h:509
auto pow(const quantity< Dimension, T > &x)
Definition internal.h:524
SI_DIMENSION_OP(-) dimension_subtract_impl
Definition internal.h:271
SI_INLINE_CONSTEXPR decltype(auto) value2(T &&x, U)
Definition internal.h:377
auto sqrt(const quantity< Dimension, T > &x)
Definition internal.h:539
SI_INLINE_CONSTEXPR auto operator==(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:454
SI_INLINE_CONSTEXPR auto operator>=(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:448
std::common_type_t< typename vec_value_type< T >::type... > vec_common_type_t
Definition internal.h:21
SI_INLINE_CONSTEXPR std::common_type_t< T, U, V > mix(T a, U b, V t)
Definition internal.h:198
SI_INLINE_CONSTEXPR vec3< detail::vec_common_type_t< T, U > > cross(const vec3< T > &lhs, const vec3< U > &rhs)
Definition internal.h:195
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T > &&std::is_arithmetic_v< U >, std::common_type_t< T, U > > max(T lhs, U rhs)
Definition internal.h:164
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T, U > > operator+(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:124
SI_INLINE_CONSTEXPR vec2< T > & operator-=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:106
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T >, T > sign(T x)
Definition internal.h:158
SI_INLINE_CONSTEXPR vec2< T > & operator*=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:108
SI_INLINE_CONSTEXPR bool operator==(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:98
SI_INLINE_CONSTEXPR auto dot(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:178
SI_INLINE_CONSTEXPR vec2< T > & operator+=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:104
vec< 2, T > vec2
Definition internal.h:90
SI_INLINE_CONSTEXPR bool operator!=(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:100
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T, U > > operator*(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:128
auto normalize(const vec2< T > &v)
Definition internal.h:187
SI_INLINE_CONSTEXPR vec2< T > operator-(const vec2< T > &v)
Definition internal.h:94
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T > > abs(const vec2< T > &v)
Definition internal.h:154
SI_INLINE_CONSTEXPR vec2< T > & operator/=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:110
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T, U > > operator/(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:130
auto distance(const vec2< T > &a, const vec2< U > &b)
Definition internal.h:191
auto length(const vec2< T > &v)
Definition internal.h:182
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T > &&std::is_arithmetic_v< U >, std::common_type_t< T, U > > min(T lhs, U rhs)
Definition internal.h:163
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T >, std::common_type_t< T, U, V > > clamp(T value, U min, V max)
Definition internal.h:171
vec< 3, T > vec3
Definition internal.h:91
Definition constants.h:12
double SIdouble
internal datatype to hold floating point values
Definition internal.h:14
detail::unit< detail::dimension_of_t< Dimension >, detail::ratio< numerator, denumerator > > unit
Definition internal.h:719
SI_INLINE_CONSTEXPR detail::zero_t zero
Definition internal.h:716
angle radians
basic unit of radians for angle
Definition internal.h:13
long double angle
basic datatype to hold a dimensionless angle, e.g. 3.1415
Definition internal.h:12
dimension< Length, Mass, Time, Temperature, Current, Substance, Intensity > type
Definition internal.h:240
Dimension type
Definition internal.h:245
Dimension type
Definition internal.h:250
Definition internal.h:234
dimensionless type
Definition internal.h:235
Definition internal.h:212
static constexpr long current
Definition internal.h:217
static constexpr long mass
Definition internal.h:214
static constexpr long time
Definition internal.h:215
static constexpr long temperature
Definition internal.h:216
static constexpr long intensity
Definition internal.h:219
static constexpr long substance
Definition internal.h:218
static constexpr long length
Definition internal.h:213
Definition internal.h:552
Definition internal.h:588
Definition internal.h:356
Definition internal.h:322
SI_INLINE_CONSTEXPR quantity(Dimension, const T &x)
Definition internal.h:329
T value_type
Definition internal.h:324
static SI_INLINE_CONSTEXPR quantity< Dimension, T > infinity()
Definition internal.h:338
SI_INLINE_CONSTEXPR quantity(zero_t={})
Definition internal.h:327
Dimension dimension_type
Definition internal.h:325
static SI_INLINE_CONSTEXPR quantity< Dimension, T > NaN()
Definition internal.h:346
SI_INLINE_CONSTEXPR quantity(const quantity< Dimension, U > &q)
Definition internal.h:334
Definition internal.h:575
static constexpr auto factor
Definition internal.h:576
Definition internal.h:580
static constexpr auto factor
Definition internal.h:581
Definition internal.h:567
static constexpr auto factor
Definition internal.h:568
typename scalar_value_type< T >::type type
Definition internal.h:285
int type
Definition internal.h:284
Definition internal.h:283
T type
Definition internal.h:283
Definition internal.h:571
Definition internal.h:572
SI_INLINE_CONSTEXPR auto operator()(T x, U y, V z) const
Definition internal.h:671
SI_INLINE_CONSTEXPR vec3< SIdouble > operator()(const quantity< Dimension, vec3< SIdouble > > &q) const
Definition internal.h:689
SI_INLINE_CONSTEXPR vec2< SIdouble > operator()(const quantity< Dimension, vec2< SIdouble > > &q) const
Definition internal.h:685
SI_INLINE_CONSTEXPR SIdouble operator()(const quantity< Dimension, SIdouble > &q) const
Definition internal.h:681
SI_INLINE_CONSTEXPR auto operator()(T value) const
Definition internal.h:654
SI_INLINE_CONSTEXPR auto operator()(T x, U y) const
Definition internal.h:665
SI_INLINE_CONSTEXPR auto operator()(const internal::vec< D, internal::detail::vec_trivally_constructible< T > > &value) const
Definition internal.h:660
SI_INLINE_CONSTEXPR T operator()(const quantity< Dimension, T > &q) const
Definition internal.h:677
SI_INLINE_CONSTEXPR const T & operator()(const T &value) const
Definition internal.h:700
Definition internal.h:591
SI_INLINE_CONSTEXPR auto operator()(T x, U y, V z) const
Definition internal.h:622
SI_INLINE_CONSTEXPR auto operator()(T x, U y) const
Definition internal.h:606
SI_INLINE_CONSTEXPR auto operator()(const quantity< Dimension, T > &q) const
Definition internal.h:639
SI_INLINE_CONSTEXPR auto operator()(const T &x) const
Definition internal.h:593
Definition internal.h:281
T type
Definition internal.h:18
T type
Definition internal.h:20
T type
Definition internal.h:19
SI_INLINE_CONSTEXPR vec()
Definition internal.h:30
SI_INLINE_CONSTEXPR vec()=default
T x
Definition internal.h:52
T y
Definition internal.h:53
SI_INLINE_CONSTEXPR vec(T x, T y)
Definition internal.h:37
SI_INLINE_CONSTEXPR vec(const vec< 3, U > &other)
Definition internal.h:48
SI_INLINE_CONSTEXPR vec(const vec< 2, U > &other)
Definition internal.h:42
SI_INLINE_CONSTEXPR vec()
Definition internal.h:59
SI_INLINE_CONSTEXPR vec(const vec< 3, U > &other)
Definition internal.h:74
SI_INLINE_CONSTEXPR vec(T x, T y, T z)
Definition internal.h:66
SI_INLINE_CONSTEXPR vec()=default
T x
Definition internal.h:82
T z
Definition internal.h:87
internal::vec< 2, detail::vec_trivally_constructible< T > > xy
Definition internal.h:85
T y
Definition internal.h:83
SI_INLINE_CONSTEXPR vec(const vec< 2, U > &xy, T z)
Definition internal.h:71