1#ifndef NNGN_MATH_VEC4_H
2#define NNGN_MATH_VEC4_H
12struct vec4_base :
public vec<vec4_base, T, 4> {
21 : x{p_x}, y{p_y},
z{p_z},
w{p_w} {}
34 constexpr vec2_base<T> v0 ## v1() const { return {this->v0, this->v1}; }
40#define S(v0, v1, v2) \
41 constexpr vec3_base<T> v0 ## v1 ## v2() const \
42 { return {this->v0, this->v1, this->v2}; }
43 S(x,x,x)
S(x,x,y)
S(x,x,
z)
S(x,x,
w)
S(x,y,x)
S(x,y,y)
S(x,y,
z)
S(x,y,
w)
44 S(x,
z,x)
S(x,
z,y)
S(x,
z,
z)
S(x,
z,
w)
S(x,
w,x)
S(x,
w,y)
S(x,
w,
z)
S(x,
w,
w)
45 S(y,x,x)
S(y,x,y)
S(y,x,
z)
S(y,x,
w)
S(y,y,x)
S(y,y,y)
S(y,y,
z)
S(y,y,
w)
46 S(y,
z,x)
S(y,
z,y)
S(y,
z,
z)
S(y,
z,
w)
S(y,
w,x)
S(y,
w,y)
S(y,
w,
z)
S(y,
w,
w)
47 S(
z,x,x)
S(
z,x,y)
S(
z,x,
z)
S(
z,x,
w)
S(
z,y,x)
S(
z,y,y)
S(
z,y,
z)
S(
z,y,
w)
48 S(
z,
z,x)
S(
z,
z,y)
S(
z,
z,
z)
S(
z,
z,
w)
S(
z,
w,x)
S(
z,
w,y)
S(
z,
w,
z)
S(
z,
w,
w)
49 S(
w,x,x)
S(
w,x,y)
S(
w,x,
z)
S(
w,x,
w)
S(
w,y,x)
S(
w,y,y)
S(
w,y,
z)
S(
w,y,
w)
50 S(
w,
z,x)
S(
w,
z,y)
S(
w,
z,
z)
S(
w,
z,
w)
S(
w,
w,x)
S(
w,
w,y)
S(
w,
w,
z)
S(
w,
w,
w)
52#define S(v0, v1, v2, v3) \
53 constexpr vec4_base<T> v0 ## v1 ## v2 ## v3() const \
54 { return {this->v0, this->v1, this->v2, this->v3}; }
55 S(x,x,x,x)
S(x,x,x,y)
S(x,x,x,
z)
S(x,x,x,
w)
56 S(x,x,y,x)
S(x,x,y,y)
S(x,x,y,
z)
S(x,x,y,
w)
57 S(x,x,
z,x)
S(x,x,
z,y)
S(x,x,
z,
z)
S(x,x,
z,
w)
58 S(x,x,
w,x)
S(x,x,
w,y)
S(x,x,
w,
z)
S(x,x,
w,
w)
59 S(x,y,x,x)
S(x,y,x,y)
S(x,y,x,
z)
S(x,y,x,
w)
60 S(x,y,y,x)
S(x,y,y,y)
S(x,y,y,
z)
S(x,y,y,
w)
61 S(x,y,
z,x)
S(x,y,
z,y)
S(x,y,
z,
z)
S(x,y,
z,
w)
62 S(x,y,
w,x)
S(x,y,
w,y)
S(x,y,
w,
z)
S(x,y,
w,
w)
63 S(x,
z,x,x)
S(x,
z,x,y)
S(x,
z,x,
z)
S(x,
z,x,
w)
64 S(x,
z,y,x)
S(x,
z,y,y)
S(x,
z,y,
z)
S(x,
z,y,
w)
65 S(x,
z,
z,x)
S(x,
z,
z,y)
S(x,
z,
z,
z)
S(x,
z,
z,
w)
66 S(x,
z,
w,x)
S(x,
z,
w,y)
S(x,
z,
w,
z)
S(x,
z,
w,
w)
67 S(x,
w,x,x)
S(x,
w,x,y)
S(x,
w,x,
z)
S(x,
w,x,
w)
68 S(x,
w,y,x)
S(x,
w,y,y)
S(x,
w,y,
z)
S(x,
w,y,
w)
69 S(x,
w,
z,x)
S(x,
w,
z,y)
S(x,
w,
z,
z)
S(x,
w,
z,
w)
70 S(x,
w,
w,x)
S(x,
w,
w,y)
S(x,
w,
w,
z)
S(x,
w,
w,
w)
71 S(y,x,x,x)
S(y,x,x,y)
S(y,x,x,
z)
S(y,x,x,
w)
72 S(y,x,y,x)
S(y,x,y,y)
S(y,x,y,
z)
S(y,x,y,
w)
73 S(y,x,
z,x)
S(y,x,
z,y)
S(y,x,
z,
z)
S(y,x,
z,
w)
74 S(y,x,
w,x)
S(y,x,
w,y)
S(y,x,
w,
z)
S(y,x,
w,
w)
75 S(y,y,x,x)
S(y,y,x,y)
S(y,y,x,
z)
S(y,y,x,
w)
76 S(y,y,y,x)
S(y,y,y,y)
S(y,y,y,
z)
S(y,y,y,
w)
77 S(y,y,
z,x)
S(y,y,
z,y)
S(y,y,
z,
z)
S(y,y,
z,
w)
78 S(y,y,
w,x)
S(y,y,
w,y)
S(y,y,
w,
z)
S(y,y,
w,
w)
79 S(y,
z,x,x)
S(y,
z,x,y)
S(y,
z,x,
z)
S(y,
z,x,
w)
80 S(y,
z,y,x)
S(y,
z,y,y)
S(y,
z,y,
z)
S(y,
z,y,
w)
81 S(y,
z,
z,x)
S(y,
z,
z,y)
S(y,
z,
z,
z)
S(y,
z,
z,
w)
82 S(y,
z,
w,x)
S(y,
z,
w,y)
S(y,
z,
w,
z)
S(y,
z,
w,
w)
83 S(y,
w,x,x)
S(y,
w,x,y)
S(y,
w,x,
z)
S(y,
w,x,
w)
84 S(y,
w,y,x)
S(y,
w,y,y)
S(y,
w,y,
z)
S(y,
w,y,
w)
85 S(y,
w,
z,x)
S(y,
w,
z,y)
S(y,
w,
z,
z)
S(y,
w,
z,
w)
86 S(y,
w,
w,x)
S(y,
w,
w,y)
S(y,
w,
w,
z)
S(y,
w,
w,
w)
87 S(
z,x,x,x)
S(
z,x,x,y)
S(
z,x,x,
z)
S(
z,x,x,
w)
88 S(
z,x,y,x)
S(
z,x,y,y)
S(
z,x,y,
z)
S(
z,x,y,
w)
89 S(
z,x,
z,x)
S(
z,x,
z,y)
S(
z,x,
z,
z)
S(
z,x,
z,
w)
90 S(
z,x,
w,x)
S(
z,x,
w,y)
S(
z,x,
w,
z)
S(
z,x,
w,
w)
91 S(
z,y,x,x)
S(
z,y,x,y)
S(
z,y,x,
z)
S(
z,y,x,
w)
92 S(
z,y,y,x)
S(
z,y,y,y)
S(
z,y,y,
z)
S(
z,y,y,
w)
93 S(
z,y,
z,x)
S(
z,y,
z,y)
S(
z,y,
z,
z)
S(
z,y,
z,
w)
94 S(
z,y,
w,x)
S(
z,y,
w,y)
S(
z,y,
w,
z)
S(
z,y,
w,
w)
95 S(
z,
z,x,x)
S(
z,
z,x,y)
S(
z,
z,x,
z)
S(
z,
z,x,
w)
96 S(
z,
z,y,x)
S(
z,
z,y,y)
S(
z,
z,y,
z)
S(
z,
z,y,
w)
97 S(
z,
z,
z,x)
S(
z,
z,
z,y)
S(
z,
z,
z,
z)
S(
z,
z,
z,
w)
98 S(
z,
z,
w,x)
S(
z,
z,
w,y)
S(
z,
z,
w,
z)
S(
z,
z,
w,
w)
99 S(
z,
w,x,x)
S(
z,
w,x,y)
S(
z,
w,x,
z)
S(
z,
w,x,
w)
100 S(
z,
w,y,x)
S(
z,
w,y,y)
S(
z,
w,y,
z)
S(
z,
w,y,
w)
101 S(
z,
w,
z,x)
S(
z,
w,
z,y)
S(
z,
w,
z,
z)
S(
z,
w,
z,
w)
102 S(
z,
w,
w,x)
S(
z,
w,
w,y)
S(
z,
w,
w,
z)
S(
z,
w,
w,
w)
103 S(
w,x,x,x)
S(
w,x,x,y)
S(
w,x,x,
z)
S(
w,x,x,
w)
104 S(
w,x,y,x)
S(
w,x,y,y)
S(
w,x,y,
z)
S(
w,x,y,
w)
105 S(
w,x,
z,x)
S(
w,x,
z,y)
S(
w,x,
z,
z)
S(
w,x,
z,
w)
106 S(
w,x,
w,x)
S(
w,x,
w,y)
S(
w,x,
w,
z)
S(
w,x,
w,
w)
107 S(
w,y,x,x)
S(
w,y,x,y)
S(
w,y,x,
z)
S(
w,y,x,
w)
108 S(
w,y,y,x)
S(
w,y,y,y)
S(
w,y,y,
z)
S(
w,y,y,
w)
109 S(
w,y,
z,x)
S(
w,y,
z,y)
S(
w,y,
z,
z)
S(
w,y,
z,
w)
110 S(
w,y,
w,x)
S(
w,y,
w,y)
S(
w,y,
w,
z)
S(
w,y,
w,
w)
111 S(
w,
z,x,x)
S(
w,
z,x,y)
S(
w,
z,x,
z)
S(
w,
z,x,
w)
112 S(
w,
z,y,x)
S(
w,
z,y,y)
S(
w,
z,y,
z)
S(
w,
z,y,
w)
113 S(
w,
z,
z,x)
S(
w,
z,
z,y)
S(
w,
z,
z,
z)
S(
w,
z,
z,
w)
114 S(
w,
z,
w,x)
S(
w,
z,
w,y)
S(
w,
z,
w,
z)
S(
w,
z,
w,
w)
115 S(
w,
w,x,x)
S(
w,
w,x,y)
S(
w,
w,x,
z)
S(
w,
w,x,
w)
116 S(
w,
w,y,x)
S(
w,
w,y,y)
S(
w,
w,y,
z)
S(
w,
w,y,
w)
117 S(
w,
w,
z,x)
S(
w,
w,
z,y)
S(
w,
w,
z,
z)
S(
w,
w,
z,
w)
118 S(
w,
w,
w,x)
S(
w,
w,
w,y)
S(
w,
w,
w,
z)
S(
w,
w,
w,
w)
123struct vec_type<
T, 4> : std::type_identity<vec4_base<T>> {};
125using ivec4 = vec4_base<std::int32_t>;
126using uvec4 = vec4_base<std::uint32_t>;
127using zvec4 = vec4_base<std::size_t>;
128using vec4 = vec4_base<float>;
129using dvec4 = vec4_base<double>;
131static_assert(offsetof(ivec4, y) ==
sizeof(ivec4::type));
132static_assert(offsetof(uvec4, y) ==
sizeof(uvec4::type));
133static_assert(offsetof( vec4, y) ==
sizeof( vec4::type));
134static_assert(offsetof(dvec4, y) ==
sizeof(dvec4::type));
135static_assert(offsetof(ivec4,
z) ==
sizeof(ivec4::type) * 2);
136static_assert(offsetof(uvec4,
z) ==
sizeof(uvec4::type) * 2);
137static_assert(offsetof( vec4,
z) ==
sizeof( vec4::type) * 2);
138static_assert(offsetof(dvec4,
z) ==
sizeof(dvec4::type) * 2);
139static_assert(offsetof(ivec4,
w) ==
sizeof(ivec4::type) * 3);
140static_assert(offsetof(uvec4,
w) ==
sizeof(uvec4::type) * 3);
141static_assert(offsetof( vec4,
w) ==
sizeof( vec4::type) * 3);
142static_assert(offsetof(dvec4,
w) ==
sizeof(dvec4::type) * 3);
v[1]
Definition: math.lua:19
w
Definition: strict.lua:12
#define S(v0, v1)
Definition: vec4.h:52
constexpr vec4_base(T p_x, T p_y, T p_z)
Definition: vec4.h:18
constexpr vec4_base(T v)
Definition: vec4.h:15
constexpr vec4_base(T p_x, const vec2_base< T > &v, T p_w)
Definition: vec4.h:24
constexpr vec3_base< T > persp_div() const
Definition: vec4.h:32
constexpr vec4_base()=default
constexpr vec4_base(const vec2_base< T > &u, const vec2_base< T > &v)
Definition: vec4.h:26
constexpr vec4_base(const vec2_base< T > &v, T p_z, T p_w)
Definition: vec4.h:22
constexpr vec4_base(T p_x, T p_y, T p_z, T p_w)
Definition: vec4.h:20
constexpr vec4_base(const vec3_base< T > &v, T p_w)
Definition: vec4.h:28
constexpr vec4_base(T p_x, const vec3_base< T > &v)
Definition: vec4.h:30
constexpr vec4_base(T p_x, T p_y)
Definition: vec4.h:16