37template <
unsigned N,
unsigned precisionBits = 12, std::
integral T =
int32_t>
38 requires((N >= 2) && (N <= 4))
41 FixedPoint<precisionBits, T>
x, y;
43 [[no_unique_address]] std::conditional_t<(N > 2), FixedPoint<precisionBits, T>,
EmptyZ> z;
45 [[no_unique_address]] std::conditional_t<(N > 3), FixedPoint<precisionBits, T>,
EmptyW> w;
47 if constexpr (N == 2) {
48 return (i == 0) ? x : y;
49 }
else if constexpr (N == 3) {
50 return (i == 0) ? x : (i == 1) ? y : z;
51 }
else if constexpr (N == 4) {
52 return (i == 0) ? x : (i == 1) ? y : (i == 2) ? z : w;
56 if constexpr (N == 2) {
57 return (i == 0) ? x : y;
58 }
else if constexpr (N == 3) {
59 return (i == 0) ? x : (i == 1) ? y : z;
60 }
else if constexpr (N == 4) {
61 return (i == 0) ? x : (i == 1) ? y : (i == 2) ? z : w;
66 requires((N == 2) && std::is_signed<T>::
value)
68 return {{.
x = x.template integer<int16_t>(), .y = y.template integer<int16_t>()}};
71 for (
unsigned i = 0; i < N; i++) {
77 for (
unsigned i = 0; i < N; i++) {
83 for (
unsigned i = 0; i < N; i++) {
89 for (
unsigned i = 0; i < N; i++) {
94 template <std::
integral U>
96 for (
unsigned i = 0; i < N; i++) {
101 template <std::
integral U>
103 for (
unsigned i = 0; i < N; i++) {
110 for (
unsigned i = 0; i < N; i++) {
117 for (
unsigned i = 0; i < N; i++) {
124 for (
unsigned i = 0; i < N; i++) {
131 for (
unsigned i = 0; i < N; i++) {
138 for (
unsigned i = 0; i < N; i++) {
143 template <std::
integral U>
146 for (
unsigned i = 0; i < N; i++) {
151 template <std::
integral U>
154 for (
unsigned i = 0; i < N; i++) {
163 for (
unsigned i = 0; i < N; i++) {
172 for (
unsigned i = 0; i < N; i++) {
181 for (
unsigned i = 0; i < N; i++) {
190 for (
unsigned i = 0; i < N; i++) {
199 for (
unsigned i = 0; i < N; i++) {
208 for (
unsigned i = 0; i < N; i++) {
217 for (
unsigned i = 0; i < N; i++) {
226 for (
unsigned i = 0; i < N; i++) {
237static_assert(
sizeof(
Vec2) == 8);
238static_assert(
sizeof(
Vec3) == 12);
239static_assert(
sizeof(
Vec4) == 16);
void * result
Definition memcpy.c:47
Definition cdrom-loader.hh:39
Vector< 4 > Vec4
Definition vector.hh:235
Vector< 3 > Vec3
Definition vector.hh:234
Vector< 2 > Vec2
Definition vector.hh:233
static constexpr Vector ZERO()
Definition vector.hh:159
static constexpr Vector LEFT()
Definition vector.hh:195
constexpr Vector operator*(U rhs) const
Definition vector.hh:144
FixedPoint< precisionBits, T > x
Definition vector.hh:41
static constexpr Vector ONE()
Definition vector.hh:168
constexpr Vector & operator/=(U rhs)
Definition vector.hh:102
constexpr Vector operator/(U rhs) const
Definition vector.hh:152
constexpr Vector operator-() const
Definition vector.hh:108
constexpr FixedPointType & operator[](unsigned i)
Definition vector.hh:64
constexpr Vector & operator+=(const Vector &rhs)
Definition vector.hh:70
constexpr Vector operator-(const Vector &rhs) const
Definition vector.hh:122
static constexpr Vector BACKWARD()
Definition vector.hh:222
constexpr Vector & operator*=(U rhs)
Definition vector.hh:95
constexpr Vector & operator-=(const Vector &rhs)
Definition vector.hh:76
static constexpr Vector RIGHT()
Definition vector.hh:204
static constexpr Vector UP()
Definition vector.hh:177
constexpr Vector operator*(const FixedPointType &rhs) const
Definition vector.hh:129
constexpr Vector operator/(const FixedPointType &rhs) const
Definition vector.hh:136
static constexpr Vector DOWN()
Definition vector.hh:186
constexpr Vector operator+(const Vector &rhs) const
Definition vector.hh:115
constexpr const FixedPointType & get(unsigned i) const
Definition vector.hh:55
FixedPoint< precisionBits, T > FixedPointType
Definition vector.hh:40
static constexpr Vector FORWARD()
Definition vector.hh:213
constexpr FixedPointType & get(unsigned i)
Definition vector.hh:46
constexpr Vector & operator*=(const FixedPointType &rhs)
Definition vector.hh:82
constexpr Vector & operator/=(const FixedPointType &rhs)
Definition vector.hh:88
static int value
Definition syscalls.h:534
The Vertex struct.
Definition common.hh:47
int16_t x
Definition common.hh:50