37#if __has_cpp_attribute(msvc::no_unique_address)
38#define PSYQO_NO_UNIQUE_ADDR [[msvc::no_unique_address]]
40#define PSYQO_NO_UNIQUE_ADDR [[no_unique_address]]
45template <
unsigned N,
unsigned precisionBits = 12, std::
integral T =
int32_t>
46 requires((N >= 2) && (N <= 4))
49 FixedPoint<precisionBits, T>
x, y;
55 if constexpr (N == 2) {
56 return (
i == 0) ? x : y;
57 }
else if constexpr (N == 3) {
58 return (
i == 0) ? x : (
i == 1) ? y : z;
59 }
else if constexpr (N == 4) {
60 return (
i == 0) ? x : (
i == 1) ? y : (
i == 2) ? z : w;
64 if constexpr (N == 2) {
65 return (
i == 0) ? x : y;
66 }
else if constexpr (N == 3) {
67 return (
i == 0) ? x : (
i == 1) ? y : z;
68 }
else if constexpr (N == 4) {
69 return (
i == 0) ? x : (
i == 1) ? y : (
i == 2) ? z : w;
74 requires((N == 2) && std::is_signed<T>::
value)
76 return {{.
x = x.template integer<int16_t>(), .y = y.template integer<int16_t>()}};
79 for (
unsigned i = 0;
i < N;
i++) {
85 for (
unsigned i = 0;
i < N;
i++) {
91 for (
unsigned i = 0;
i < N;
i++) {
97 for (
unsigned i = 0;
i < N;
i++) {
102 template <std::
integral U>
104 for (
unsigned i = 0;
i < N;
i++) {
109 template <std::
integral U>
111 for (
unsigned i = 0;
i < N;
i++) {
118 for (
unsigned i = 0;
i < N;
i++) {
125 for (
unsigned i = 0;
i < N;
i++) {
132 for (
unsigned i = 0;
i < N;
i++) {
139 for (
unsigned i = 0;
i < N;
i++) {
146 for (
unsigned i = 0;
i < N;
i++) {
151 template <std::
integral U>
154 for (
unsigned i = 0;
i < N;
i++) {
159 template <std::
integral U>
162 for (
unsigned i = 0;
i < N;
i++) {
171 for (
unsigned i = 0;
i < N;
i++) {
180 for (
unsigned i = 0;
i < N;
i++) {
189 for (
unsigned i = 0;
i < N;
i++) {
198 for (
unsigned i = 0;
i < N;
i++) {
207 for (
unsigned i = 0;
i < N;
i++) {
216 for (
unsigned i = 0;
i < N;
i++) {
225 for (
unsigned i = 0;
i < N;
i++) {
234 for (
unsigned i = 0;
i < N;
i++) {
245static_assert(
sizeof(
Vec2) == 8);
246static_assert(
sizeof(
Vec3) == 12);
247static_assert(
sizeof(
Vec4) == 16);
int i
Definition gte-regio.c:287
void * result
Definition memcpy.c:47
Vector< 4 > Vec4
Definition vector.hh:243
Vector< 3 > Vec3
Definition vector.hh:242
Vector< 2 > Vec2
Definition vector.hh:241
static constexpr Vector ZERO()
Definition vector.hh:167
static constexpr Vector LEFT()
Definition vector.hh:203
constexpr Vector operator*(U rhs) const
Definition vector.hh:152
FixedPoint< precisionBits, T > x
Definition vector.hh:49
static constexpr Vector ONE()
Definition vector.hh:176
constexpr Vector & operator/=(U rhs)
Definition vector.hh:110
constexpr Vector operator/(U rhs) const
Definition vector.hh:160
constexpr Vector operator-() const
Definition vector.hh:116
constexpr FixedPointType & operator[](unsigned i)
Definition vector.hh:72
constexpr Vector & operator+=(const Vector &rhs)
Definition vector.hh:78
constexpr Vector operator-(const Vector &rhs) const
Definition vector.hh:130
static constexpr Vector BACKWARD()
Definition vector.hh:230
constexpr Vector & operator*=(U rhs)
Definition vector.hh:103
constexpr Vector & operator-=(const Vector &rhs)
Definition vector.hh:84
static constexpr Vector RIGHT()
Definition vector.hh:212
static constexpr Vector UP()
Definition vector.hh:185
constexpr Vector operator*(const FixedPointType &rhs) const
Definition vector.hh:137
constexpr Vector operator/(const FixedPointType &rhs) const
Definition vector.hh:144
static constexpr Vector DOWN()
Definition vector.hh:194
constexpr Vector operator+(const Vector &rhs) const
Definition vector.hh:123
constexpr const FixedPointType & get(unsigned i) const
Definition vector.hh:63
FixedPoint< precisionBits, T > FixedPointType
Definition vector.hh:48
static constexpr Vector FORWARD()
Definition vector.hh:221
constexpr FixedPointType & get(unsigned i)
Definition vector.hh:54
constexpr Vector & operator*=(const FixedPointType &rhs)
Definition vector.hh:90
constexpr Vector & operator/=(const FixedPointType &rhs)
Definition vector.hh:96
static int value
Definition syscalls.h:535
The Vertex struct.
Definition common.hh:47
int16_t x
Definition common.hh:50
#define PSYQO_NO_UNIQUE_ADDR
Definition vector.hh:40