9#define SI_INLINE inline
10#define SI_INLINE_CONSTEXPR constexpr SI_INLINE
25 template <
class... T>
using vec_common_type_t = std::common_type_t<typename vec_value_type<T>::type...>;
28 template <
int N,
class T>
32 struct vec<2, T> :
vec<2, detail::vec_trivally_constructible<T>>
40 struct vec<2,
detail::vec_trivally_constructible<T>>
42 static_assert(std::is_arithmetic_v<T>);
48 static_assert(
sizeof(
vec) == 2 *
sizeof(T));
49 static_assert(std::is_trivially_copyable_v<vec>);
68 struct vec<3, T> :
vec<3, detail::vec_trivally_constructible<T>>
75 struct vec<3,
detail::vec_trivally_constructible<T>>
77 static_assert(std::is_arithmetic_v<T>);
83 static_assert(
sizeof(
vec) == 3 *
sizeof(T));
84 static_assert(std::is_trivially_copyable_v<vec>);
177 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; }
182 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; }
183 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; }
190 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; }
191 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) }; }
192 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) }; }
193 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) }; }
194 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) }; }
217 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; }
218 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) }; }
219 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) }; }
231 template <
long lengthExp,
long massExp,
long timeExp,
long temperatureExp,
long currentExp,
long substanceExp,
long intensityExp>
234 static constexpr long length = lengthExp;
235 static constexpr long mass = massExp;
236 static constexpr long time = timeExp;
243 template <
long Value>
249 template <
class,
class>
251 template <
class,
class>
260 template <
long Length,
long Mass,
long Time,
long Temperature,
long Current,
long Substance,
long Intensity>
266 template <
class Dimension,
class T>
272 template <
class Dimension,
class Ratio>
286#define SI_DIMENSION_OP(op_) dimension< \
287 Lhs::length op_ Rhs::length, \
288 Lhs::mass op_ Rhs::mass, \
289 Lhs::time op_ Rhs::time, \
290 Lhs::temperature op_ Rhs::temperature, \
291 Lhs::current op_ Rhs::current, \
292 Lhs::substance op_ Rhs::substance, \
293 Lhs::intensity op_ Rhs::intensity>
305#undef SI_DIMENSION_OP
317 template <
class Dimension,
class T>
327 return static_cast<bool>(m_value);
351 template <
class Dimension,
class T>
378 static_assert(std::is_floating_point_v<scalar_type>);
380 fill(
value, std::numeric_limits<scalar_type>::infinity());
381 return { Dimension(),
value };
387 static_assert(std::is_floating_point_v<scalar_type>);
389 fill(
value, std::numeric_limits<scalar_type>::quiet_NaN());
390 return { Dimension(),
value };
395 struct is_si : std::bool_constant<false> {};
397 template <
class Dimension,
class T>
408 template <
class T,
class = std::enable_if_t<!is_si_v<T>>>
421 template <
class T,
class U>
424 return value(std::forward<T>(x));
431 return decltype(
value(other)){};
435 template <
class Lhs,
class Rhs>
437 std::is_same_v<dimension_of_t<Lhs>,
dimension_of_t<Rhs>> || std::is_same_v<Lhs, zero_t> || std::is_same_v<Rhs, zero_t>;
439 template <
class Lhs,
class Rhs>
442 template <
class T,
class U =
void,
class V =
void>
445 template <
class T,
class Dimension>
452 template <
class T,
class Dimension,
class U>
460 template <
class T,
class Dimension,
class U>
468 template <
class T,
class Dimension,
class U>
476 template <
class T,
class Dimension,
class U>
484 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
491 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
498 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
505 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
512 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
519 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
527#define SI_RETURN_QUANTITY(dimension_, ...) \
528 if constexpr(is_dimensionless_v<dimension_>) return (__VA_ARGS__); \
529 else return quantity{dimension_(), (__VA_ARGS__)}
531 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
539 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
547 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
554 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
562 template <
class Dimension,
class T>
565 return value(x) < 0.0 ? -x : x;
568 template <
class Lhs,
class Rhs,
class = enable_for_si<Lhs, Rhs>>
575 template <
class Dimension,
class T>
581 template <
class Dimension,
class T>
588 SI_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)
593 template <
long Exponent,
class Dimension,
class T>
601 template <
long Degree,
class Dimension,
class T>
606 static_assert(std::is_same_v<dimension_multiply<result_dimension, value_dimension<Degree>>, Dimension>,
"cannot take root of this SI dimension");
611 template <
class Dimension,
class T>
616 static_assert(std::is_same_v<dimension_multiply<result_dimension, value_dimension<2>>, Dimension>,
"cannot take sqrt of this SI dimension");
621 template <
class Dimension,
class T>
628 template <
class T>
struct element_count : std::integral_constant<int, 1> {};
634 template <
class Value,
class Min,
class Max>
644 template <
long Num,
long Den>
653 template <
class Lhs,
class Rhs>
656 static constexpr auto factor = Lhs::factor * Rhs::factor;
659 template <
class Lhs,
class Rhs>
662 static constexpr auto factor = Lhs::factor / Rhs::factor;
671 template <
class Dimension,
class UnitRatio>
674 template <class T, class = std::enable_if_t<is_arithmetic<T>::value>>
679 if constexpr (std::is_same_v<tag_celsius, UnitRatio>)
683 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>)
685 SI_RETURN_QUANTITY(Dimension, (x +
static_cast<scalar_type
>(459.67)) *
static_cast<scalar_type
>(5. / 9));
692 template <
class T,
class U>
695 using common_type = std::common_type_t<T, U>;
698 if constexpr (std::is_same_v<tag_celsius, UnitRatio>)
702 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>)
712 template <
class T,
class U,
class V>
715 using common_type = std::common_type_t<T, U, V>;
718 if constexpr (std::is_same_v<tag_celsius, UnitRatio>)
722 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>)
737 if constexpr(std::is_same_v<tag_celsius, UnitRatio>)
738 return value(q) -
static_cast<scalar_type
>(273.15);
739 else if constexpr (std::is_same_v<tag_fahrenheit, UnitRatio>)
740 return value(q) *
static_cast<scalar_type
>(9. / 5) -
static_cast<scalar_type
>(459.67);
742 return value(q) /
static_cast<scalar_type
>(UnitRatio::factor);
746 template <
class Dimension,
long N>
749 template <class T, class = std::enable_if_t<is_arithmetic<T>::value>>
756 template <
long D,
class T>
762 template <
class T,
class U>
765 using common_type = std::common_type_t<T, U>;
770 template <
class T,
class U,
class V>
773 using common_type = std::common_type_t<T, U, V>;
800 template <
class Ratio>
806 template <class T, class = std::enable_if_t<is_arithmetic<T>::value>>
813 template <
class DimensionLhs,
class RatioLhs,
class DimensionRhs,
class RatioRhs>
819 template <
class DimensionLhs,
class RatioLhs,
class DimensionRhs,
class RatioRhs>
828 template <
class Dimension,
long long numerator = 1,
long long denumerator = 1>
SI_INLINE_CONSTEXPR quantity_storage()
Definition internal.h:321
friend SI_INLINE_CONSTEXPR T & value(quantity_storage &x)
Definition internal.h:338
friend SI_INLINE_CONSTEXPR const T & value(const quantity_storage &x)
Definition internal.h:333
#define SI_RETURN_QUANTITY(dimension_,...)
Definition internal.h:527
#define SI_INLINE_CONSTEXPR
Definition internal.h:10
#define SI_INLINE
Definition internal.h:9
#define SI_DIMENSION_OP(op_)
Definition internal.h:286
Definition internal.h:223
SI_INLINE_CONSTEXPR bool is_dimensionless_v
Definition internal.h:284
value_dimension< 0 > dimensionless
Definition internal.h:247
std::conditional_t< std::is_same_v< scalar_value_type_t< T >, SIdouble >, SIdouble, SIdouble > promoted_scalar_type
Definition internal.h:666
dimension_multiply_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_multiply
Definition internal.h:302
dimension_add_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_add
Definition internal.h:300
dimension< Value, Value, Value, Value, Value, Value, Value > value_dimension
Definition internal.h:244
SI_INLINE_CONSTEXPR long element_count_v
Definition internal.h:632
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator+=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:453
SI_INLINE_CONSTEXPR quantity< Dimension, T > abs(const quantity< Dimension, T > &x)
Definition internal.h:563
dimension_subtract_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_subtract
Definition internal.h:301
SI_INLINE auto normalize(const quantity< Dimension, T > &x)
Definition internal.h:576
SI_INLINE_CONSTEXPR quantity< Dimension, T > operator-(quantity< Dimension, T > x)
Definition internal.h:446
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T > > fill(T &x, T value)
Definition internal.h:346
SI_INLINE_CONSTEXPR const T & value(const T &x)
Definition internal.h:409
SI_INLINE_CONSTEXPR auto deangle(const quantity< Dimension, T > &x)
Definition internal.h:622
SI_INLINE_CONSTEXPR bool has_common_dimension_v
Definition internal.h:436
typename scalar_value_type< T >::type scalar_value_type_t
Definition internal.h:314
SI_INLINE_CONSTEXPR auto dot(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:569
SI_DIMENSION_OP(+) dimension_add_impl
Definition internal.h:295
SI_INLINE_CONSTEXPR auto operator/(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:555
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator/=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:477
typename dimension_of< std::decay_t< T > >::type dimension_of_t
Definition internal.h:280
SI_DIMENSION_OP(*) dimension_multiply_impl
Definition internal.h:297
SI_INLINE_CONSTEXPR auto operator!=(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:520
internal::vec2< T > vec2
Definition internal.h:225
SI_INLINE_CONSTEXPR auto operator>(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:499
std::enable_if_t< is_si_v< T >||is_si_v< U >||is_si_v< V > > enable_for_si
Definition internal.h:443
SI_INLINE_CONSTEXPR auto operator*(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:548
SI_INLINE_CONSTEXPR auto operator<=(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:492
SI_DIMENSION_OP(/) dimension_divide_impl
Definition internal.h:298
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator*=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:469
SI_INLINE_CONSTEXPR auto clamp(const Value &x, const Min &min, const Max &max)
Definition internal.h:635
SI_INLINE auto norm(const quantity< Dimension, T > &x)
Definition internal.h:582
internal::vec3< T > vec3
Definition internal.h:228
SI_INLINE_CONSTEXPR bool is_si_v
Definition internal.h:405
SI_INLINE auto pow(const quantity< Dimension, T > &x)
Definition internal.h:594
SI_INLINE auto root(const quantity< Dimension, T > &x)
Definition internal.h:602
std::conditional_t< std::is_same_v< Lhs, zero_t >, dimension_of_t< Rhs >, dimension_of_t< Lhs > > dimension_common
Definition internal.h:440
SI_INLINE_CONSTEXPR quantity< Dimension, T > & operator-=(quantity< Dimension, T > &lhs, const U &rhs)
Definition internal.h:461
SI_INLINE_CONSTEXPR auto operator+(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:532
dimension_divide_impl< dimension_of_t< Lhs >, dimension_of_t< Rhs > > dimension_divide
Definition internal.h:303
SI_INLINE_CONSTEXPR auto operator<(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:485
SI_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)
Definition internal.h:588
SI_DIMENSION_OP(-) dimension_subtract_impl
Definition internal.h:296
SI_INLINE_CONSTEXPR decltype(auto) value2(T &&x, U)
Definition internal.h:422
SI_INLINE auto sqrt(const quantity< Dimension, T > &x)
Definition internal.h:612
SI_INLINE_CONSTEXPR auto operator==(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:513
SI_INLINE_CONSTEXPR auto operator>=(const Lhs &lhs, const Rhs &rhs)
Definition internal.h:506
std::common_type_t< typename vec_value_type< T >::type... > vec_common_type_t
Definition internal.h:25
SI_INLINE_CONSTEXPR std::common_type_t< T, U, V > mix(T a, U b, V t)
Definition internal.h:217
SI_INLINE_CONSTEXPR vec3< detail::vec_common_type_t< T, U > > cross(const vec3< T > &lhs, const vec3< U > &rhs)
Definition internal.h:214
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:183
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T, U > > operator+(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:143
SI_INLINE_CONSTEXPR vec2< T > & operator-=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:125
SI_INLINE_CONSTEXPR std::enable_if_t< std::is_arithmetic_v< T >, T > sign(T x)
Definition internal.h:177
SI_INLINE auto distance(const vec2< T > &a, const vec2< U > &b)
Definition internal.h:210
SI_INLINE_CONSTEXPR vec2< T > & operator*=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:127
SI_INLINE_CONSTEXPR bool operator==(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:117
SI_INLINE_CONSTEXPR auto dot(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:197
SI_INLINE auto length(const vec2< T > &v)
Definition internal.h:201
SI_INLINE_CONSTEXPR vec2< T > & operator+=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:123
vec< 2, T > vec2
Definition internal.h:109
SI_INLINE_CONSTEXPR bool operator!=(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:119
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T, U > > operator*(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:147
SI_INLINE_CONSTEXPR vec2< T > operator-(const vec2< T > &v)
Definition internal.h:113
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T > > abs(const vec2< T > &v)
Definition internal.h:173
SI_INLINE_CONSTEXPR vec2< T > & operator/=(vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:129
SI_INLINE_CONSTEXPR vec2< detail::vec_common_type_t< T, U > > operator/(const vec2< T > &lhs, const vec2< U > &rhs)
Definition internal.h:149
SI_INLINE auto normalize(const vec2< T > &v)
Definition internal.h:206
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:182
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:190
vec< 3, T > vec3
Definition internal.h:110
Definition constants.h:12
double SIdouble
internal datatype to hold floating point values
Definition internal.h:16
detail::unit< detail::dimension_of_t< Dimension >, detail::ratio< numerator, denumerator > > unit
Definition internal.h:829
SI_INLINE_CONSTEXPR detail::zero_t zero
Definition internal.h:826
angle radians
basic unit of radians for angle
Definition internal.h:15
long double angle
basic datatype to hold a dimensionless angle, e.g. 3.1415
Definition internal.h:14
dimension< Length, Mass, Time, Temperature, Current, Substance, Intensity > type
Definition internal.h:263
Dimension type
Definition internal.h:269
Dimension type
Definition internal.h:275
Definition internal.h:256
dimensionless type
Definition internal.h:257
Definition internal.h:233
static constexpr long current
Definition internal.h:238
static constexpr long mass
Definition internal.h:235
static constexpr long time
Definition internal.h:236
static constexpr long temperature
Definition internal.h:237
static constexpr long intensity
Definition internal.h:240
static constexpr long substance
Definition internal.h:239
static constexpr long length
Definition internal.h:234
Definition internal.h:628
Definition internal.h:669
Definition internal.h:395
Definition internal.h:353
SI_INLINE_CONSTEXPR quantity(Dimension, const T &x)
Definition internal.h:364
T value_type
Definition internal.h:357
static SI_INLINE_CONSTEXPR quantity< Dimension, T > infinity()
Definition internal.h:375
SI_INLINE_CONSTEXPR quantity(zero_t={})
Definition internal.h:360
Dimension dimension_type
Definition internal.h:358
static SI_INLINE_CONSTEXPR quantity< Dimension, T > NaN()
Definition internal.h:384
SI_INLINE_CONSTEXPR quantity(const quantity< Dimension, U > &q)
Definition internal.h:370
Definition internal.h:655
static constexpr auto factor
Definition internal.h:656
Definition internal.h:661
static constexpr auto factor
Definition internal.h:662
Definition internal.h:646
static constexpr auto factor
Definition internal.h:647
typename scalar_value_type< T >::type type
Definition internal.h:311
int type
Definition internal.h:310
Definition internal.h:309
T type
Definition internal.h:309
Definition internal.h:650
Definition internal.h:651
SI_INLINE_CONSTEXPR auto operator()(T x, U y, V z) const
Definition internal.h:771
SI_INLINE_CONSTEXPR vec3< SIdouble > operator()(const quantity< Dimension, vec3< SIdouble > > &q) const
Definition internal.h:794
SI_INLINE_CONSTEXPR vec2< SIdouble > operator()(const quantity< Dimension, vec2< SIdouble > > &q) const
Definition internal.h:789
SI_INLINE_CONSTEXPR SIdouble operator()(const quantity< Dimension, SIdouble > &q) const
Definition internal.h:784
SI_INLINE_CONSTEXPR auto operator()(T value) const
Definition internal.h:750
SI_INLINE_CONSTEXPR auto operator()(T x, U y) const
Definition internal.h:763
SI_INLINE_CONSTEXPR auto operator()(const internal::vec< D, internal::detail::vec_trivally_constructible< T > > &value) const
Definition internal.h:757
SI_INLINE_CONSTEXPR T operator()(const quantity< Dimension, T > &q) const
Definition internal.h:779
SI_INLINE_CONSTEXPR const T & operator()(const T &value) const
Definition internal.h:807
Definition internal.h:673
SI_INLINE_CONSTEXPR auto operator()(T x, U y, V z) const
Definition internal.h:713
SI_INLINE_CONSTEXPR auto operator()(T x, U y) const
Definition internal.h:693
SI_INLINE_CONSTEXPR auto operator()(const quantity< Dimension, T > &q) const
Definition internal.h:733
SI_INLINE_CONSTEXPR auto operator()(const T &x) const
Definition internal.h:675
Definition internal.h:307
T type
Definition internal.h:22
T type
Definition internal.h:24
T type
Definition internal.h:23
SI_INLINE_CONSTEXPR vec()
Definition internal.h:36
SI_INLINE_CONSTEXPR vec()=default
T x
Definition internal.h:63
T y
Definition internal.h:64
SI_INLINE_CONSTEXPR vec(T x, T y)
Definition internal.h:46
SI_INLINE_CONSTEXPR vec(const vec< 3, U > &other)
Definition internal.h:59
SI_INLINE_CONSTEXPR vec(const vec< 2, U > &other)
Definition internal.h:53
SI_INLINE_CONSTEXPR vec()
Definition internal.h:71
SI_INLINE_CONSTEXPR vec(const vec< 3, U > &other)
Definition internal.h:91
SI_INLINE_CONSTEXPR vec(T x, T y, T z)
Definition internal.h:81
SI_INLINE_CONSTEXPR vec()=default
T x
Definition internal.h:101
T z
Definition internal.h:106
internal::vec< 2, detail::vec_trivally_constructible< T > > xy
Definition internal.h:104
T y
Definition internal.h:102
SI_INLINE_CONSTEXPR vec(const vec< 2, U > &xy, T z)
Definition internal.h:88