Changeset c62013e for libcfa/src/vec/vec4.hfa
- Timestamp:
- Jul 14, 2026, 9:26:24 PM (5 hours ago)
- Branches:
- master
- Children:
- a12816e7
- Parents:
- f41b161
- File:
-
- 1 edited
-
libcfa/src/vec/vec4.hfa (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/vec/vec4.hfa
rf41b161 rc62013e 19 19 #include "vec.hfa" 20 20 21 forall (T) {21 forall( T ) { 22 22 struct vec4 { 23 23 T x, y, z, w; … … 25 25 } 26 26 27 forall (T) { 28 static inline { 29 30 void ?{}(vec4(T)& v, T x, T y, T z, T w) { 27 static inline forall( T ) { 28 void ?{}( vec4( T )& v, T x, T y, T z, T w ) { 31 29 v.[x, y, z, w] = [x, y, z, w]; 32 30 } 33 31 34 forall( | zero_assign(T))35 void ?{}( vec4(T)& vec, zero_t) with (vec) {32 forall( | zero_assign( T ) ) 33 void ?{}( vec4( T )& vec, zero_t ) with ( vec ) { 36 34 x = y = z = w = 0; 37 35 } 38 36 39 void ?{}( vec4(T)& vec, T val) with (vec) {37 void ?{}( vec4( T )& vec, T val ) with ( vec ) { 40 38 x = y = z = w = val; 41 39 } 42 40 43 void ?{}( vec4(T)& vec, vec4(T) other) with (vec) {41 void ?{}( vec4( T )& vec, vec4( T ) other ) with ( vec ) { 44 42 [x,y,z,w] = other.[x,y,z,w]; 45 43 } 46 44 47 void ?=?( vec4(T)& vec, vec4(T) other) with (vec) {45 void ?=?( vec4( T )& vec, vec4( T ) other ) with ( vec ) { 48 46 [x,y,z,w] = other.[x,y,z,w]; 49 47 } 50 forall(| zero_assign(T)) 51 void ?=?(vec4(T)& vec, zero_t) with (vec) { 48 49 forall( | zero_assign( T ) ) 50 void ?=?( vec4( T )& vec, zero_t ) with ( vec ) { 52 51 x = y = z = w = 0; 53 52 } … … 56 55 57 56 // - 58 forall(| subtract(T)) { 59 vec4(T) ?-?(vec4(T) u, vec4(T) v) { 60 return [u.x - v.x, u.y - v.y, u.z - v.z, u.w - v.w]; 61 } 62 vec4(T)& ?-=?(vec4(T)& u, vec4(T) v) { 63 u = u - v; 64 return u; 65 } 66 } 67 forall(| negate(T)) { 68 vec4(T) -?(vec4(T) v) with (v) { 69 return [-x, -y, -z, -w]; 70 } 71 } 72 forall(| { T --?(T&); }) { 73 vec4(T)& --?(vec4(T)& v) { 74 --v.x; 75 --v.y; 76 --v.z; 77 --v.w; 78 return v; 79 } 80 vec4(T) ?--(vec4(T)& v) { 81 vec4(T) copy = v; 82 --v; 83 return copy; 84 } 57 forall( | subtract( T ) ) { 58 vec4( T ) ?-?( vec4( T ) u, vec4( T ) v ) { 59 return [u.x - v.x, u.y - v.y, u.z - v.z, u.w - v.w]; 60 } 61 vec4( T )& ?-=?( vec4( T )& u, vec4( T ) v ) { 62 u = u - v; 63 return u; 64 } 65 } 66 67 forall( | negate( T ) ) { 68 vec4( T ) -?( vec4( T ) v ) with ( v ) { 69 return [-x, -y, -z, -w]; 70 } 71 } 72 forall( | { T --?( T&); }) { 73 vec4( T )& --?( vec4( T )& v ) { 74 --v.x; 75 --v.y; 76 --v.z; 77 --v.w; 78 return v; 79 } 80 vec4( T ) ?--( vec4( T )& v ) { 81 vec4( T ) copy = v; 82 --v; 83 return copy; 84 } 85 85 } 86 86 87 87 // + 88 forall( | add(T)) {89 vec4(T) ?+?(vec4(T) u, vec4(T) v) {90 return [u.x + v.x, u.y + v.y, u.z + v.z, u.w + v.w];91 }92 vec4(T)& ?+=?(vec4(T)& u, vec4(T) v) {93 u = u + v;94 return u;95 }96 } 97 98 forall( | { T ++?(T&); }) {99 vec4(T)& ++?(vec4(T)& v) {100 ++v.x;101 ++v.y;102 ++v.z;103 ++v.w;104 return v;105 }106 vec4(T) ?++(vec4(T)& v) {107 vec4(T) copy = v;108 ++v;109 return copy;110 }88 forall( | add( T ) ) { 89 vec4( T ) ?+?( vec4( T ) u, vec4( T ) v ) { 90 return [u.x + v.x, u.y + v.y, u.z + v.z, u.w + v.w]; 91 } 92 vec4( T )& ?+=?( vec4( T )& u, vec4( T ) v ) { 93 u = u + v; 94 return u; 95 } 96 } 97 98 forall( | { T ++?( T&); }) { 99 vec4( T )& ++?( vec4( T )& v ) { 100 ++v.x; 101 ++v.y; 102 ++v.z; 103 ++v.w; 104 return v; 105 } 106 vec4( T ) ?++( vec4( T )& v ) { 107 vec4( T ) copy = v; 108 ++v; 109 return copy; 110 } 111 111 } 112 112 113 113 // * 114 forall( | multiply(T)) {115 vec4(T) ?*?(vec4(T) v, T scalar) with (v) {116 return [x * scalar, y * scalar, z * scalar, w * scalar];117 }118 vec4(T) ?*?(T scalar, vec4(T) v) {119 return v * scalar;120 }121 vec4(T) ?*?(vec4(T) u, vec4(T) v) {122 return [u.x * v.x, u.y * v.y, u.z * v.z, u.w * v.w];123 }124 vec4(T)& ?*=?(vec4(T)& v, T scalar) {125 v = v * scalar;126 return v;127 }128 vec4(T)& ?*=?(vec4(T)& u, vec4(T) v) {129 u = u * v;130 return u;131 }114 forall( | multiply( T ) ) { 115 vec4( T ) ?*?( vec4( T ) v, T scalar ) with ( v ) { 116 return [x * scalar, y * scalar, z * scalar, w * scalar]; 117 } 118 vec4( T ) ?*?( T scalar, vec4( T ) v ) { 119 return v * scalar; 120 } 121 vec4( T ) ?*?( vec4( T ) u, vec4( T ) v ) { 122 return [u.x * v.x, u.y * v.y, u.z * v.z, u.w * v.w]; 123 } 124 vec4( T )& ?*=?( vec4( T )& v, T scalar ) { 125 v = v * scalar; 126 return v; 127 } 128 vec4( T )& ?*=?( vec4( T )& u, vec4( T ) v ) { 129 u = u * v; 130 return u; 131 } 132 132 } 133 133 134 134 // / 135 forall( | divide(T)) {136 vec4( T) ?/?(vec4(T) v, T scalar) with (v) {135 forall( | divide( T ) ) { 136 vec4( T ) ?/?( vec4( T ) v, T scalar ) with ( v ) { 137 137 return [x / scalar, y / scalar, z / scalar, w / scalar]; 138 138 } 139 vec4( T) ?/?(vec4(T) u, vec4(T) v) {139 vec4( T ) ?/?( vec4( T ) u, vec4( T ) v ) { 140 140 return [u.x / v.x, u.y / v.y, u.z / v.z, u.w / v.w]; 141 141 } 142 vec4( T)& ?/=?(vec4(T)& v, T scalar) {142 vec4( T )& ?/=?( vec4( T )& v, T scalar ) { 143 143 v = v / scalar; 144 144 return v; 145 145 } 146 vec4( T)& ?/=?(vec4(T)& u, vec4(T) v) {146 vec4( T )& ?/=?( vec4( T )& u, vec4( T ) v ) { 147 147 u = u / v; 148 148 return u; … … 151 151 152 152 // % 153 forall( | { T ?%?(T,T); }) {154 vec4(T) ?%?(vec4(T) v, T scalar) with (v) {155 return [x % scalar, y % scalar, z % scalar, w % scalar];156 }157 vec4(T)& ?%=?(vec4(T)& u, T scalar) {158 u = u % scalar;159 return u;160 }161 vec4(T) ?%?(vec4(T) u, vec4(T) v) {162 return [u.x % v.x, u.y % v.y, u.z % v.z, u.w % v.w];163 }164 vec4(T)& ?%=?(vec4(T)& u, vec4(T) v) {165 u = u % v;166 return u;167 }153 forall( | { T ?%?( T,T ); }) { 154 vec4( T ) ?%?( vec4( T ) v, T scalar ) with ( v ) { 155 return [x % scalar, y % scalar, z % scalar, w % scalar]; 156 } 157 vec4( T )& ?%=?( vec4( T )& u, T scalar ) { 158 u = u % scalar; 159 return u; 160 } 161 vec4( T ) ?%?( vec4( T ) u, vec4( T ) v ) { 162 return [u.x % v.x, u.y % v.y, u.z % v.z, u.w % v.w]; 163 } 164 vec4( T )& ?%=?( vec4( T )& u, vec4( T ) v ) { 165 u = u % v; 166 return u; 167 } 168 168 } 169 169 170 170 // & 171 forall( | { T ?&?(T,T); }) {172 vec4(T) ?&?(vec4(T) v, T scalar) with (v) {173 return [x & scalar, y & scalar, z & scalar, w & scalar];174 }175 vec4(T)& ?&=?(vec4(T)& u, T scalar) {176 u = u & scalar;177 return u;178 }179 vec4(T) ?&?(vec4(T) u, vec4(T) v) {180 return [u.x & v.x, u.y & v.y, u.z & v.z, u.w & v.w];181 }182 vec4(T)& ?&=?(vec4(T)& u, vec4(T) v) {183 u = u & v;184 return u;185 }171 forall( | { T ?&?( T,T ); }) { 172 vec4( T ) ?&?( vec4( T ) v, T scalar ) with ( v ) { 173 return [x & scalar, y & scalar, z & scalar, w & scalar]; 174 } 175 vec4( T )& ?&=?( vec4( T )& u, T scalar ) { 176 u = u & scalar; 177 return u; 178 } 179 vec4( T ) ?&?( vec4( T ) u, vec4( T ) v ) { 180 return [u.x & v.x, u.y & v.y, u.z & v.z, u.w & v.w]; 181 } 182 vec4( T )& ?&=?( vec4( T )& u, vec4( T ) v ) { 183 u = u & v; 184 return u; 185 } 186 186 } 187 187 188 188 // | 189 forall( | { T ?|?(T,T); }) {190 vec4(T) ?|?(vec4(T) v, T scalar) with (v) {191 return [x | scalar, y | scalar, z | scalar, w | scalar];192 }193 vec4(T)& ?|=?(vec4(T)& u, T scalar) {194 u = u | scalar;195 return u;196 }197 vec4(T) ?|?(vec4(T) u, vec4(T) v) {198 return [u.x | v.x, u.y | v.y, u.z | v.z, u.w | v.w];199 }200 vec4(T)& ?|=?(vec4(T)& u, vec4(T) v) {201 u = u | v;202 return u;203 }189 forall( | { T ?|?( T,T ); }) { 190 vec4( T ) ?|?( vec4( T ) v, T scalar ) with ( v ) { 191 return [x | scalar, y | scalar, z | scalar, w | scalar]; 192 } 193 vec4( T )& ?|=?( vec4( T )& u, T scalar ) { 194 u = u | scalar; 195 return u; 196 } 197 vec4( T ) ?|?( vec4( T ) u, vec4( T ) v ) { 198 return [u.x | v.x, u.y | v.y, u.z | v.z, u.w | v.w]; 199 } 200 vec4( T )& ?|=?( vec4( T )& u, vec4( T ) v ) { 201 u = u | v; 202 return u; 203 } 204 204 } 205 205 206 206 // ^ 207 forall( | { T ?^?(T,T); }) {208 vec4(T) ?^?(vec4(T) v, T scalar) with (v) {209 return [x ^ scalar, y ^ scalar, z ^ scalar, w ^ scalar];210 }211 vec4(T)& ?^=?(vec4(T)& u, T scalar) {212 u = u ^ scalar;213 return u;214 }215 vec4(T) ?^?(vec4(T) u, vec4(T) v) {216 return [u.x ^ v.x, u.y ^ v.y, u.z ^ v.z, u.w ^ v.w];217 }218 vec4(T)& ?^=?(vec4(T)& u, vec4(T) v) {219 u = u ^ v;220 return u;221 }207 forall( | { T ?^?( T,T ); }) { 208 vec4( T ) ?^?( vec4( T ) v, T scalar ) with ( v ) { 209 return [x ^ scalar, y ^ scalar, z ^ scalar, w ^ scalar]; 210 } 211 vec4( T )& ?^=?( vec4( T )& u, T scalar ) { 212 u = u ^ scalar; 213 return u; 214 } 215 vec4( T ) ?^?( vec4( T ) u, vec4( T ) v ) { 216 return [u.x ^ v.x, u.y ^ v.y, u.z ^ v.z, u.w ^ v.w]; 217 } 218 vec4( T )& ?^=?( vec4( T )& u, vec4( T ) v ) { 219 u = u ^ v; 220 return u; 221 } 222 222 } 223 223 224 224 // << 225 forall( | { T ?<<?(T,T); }) {226 vec4(T) ?<<?(vec4(T) v, T scalar) with (v) {227 return [x << scalar, y << scalar, z << scalar, w << scalar];228 }229 vec4(T)& ?<<=?(vec4(T)& u, T scalar) {230 u = u << scalar;231 return u;232 }233 vec4(T) ?<<?(vec4(T) u, vec4(T) v) {234 return [u.x << v.x, u.y << v.y, u.z << v.z, u.w << v.w];235 }236 vec4(T)& ?<<=?(vec4(T)& u, vec4(T) v) {237 u = u << v;238 return u;239 }225 forall( | { T ?<<?( T,T ); }) { 226 vec4( T ) ?<<?( vec4( T ) v, T scalar ) with ( v ) { 227 return [x << scalar, y << scalar, z << scalar, w << scalar]; 228 } 229 vec4( T )& ?<<=?( vec4( T )& u, T scalar ) { 230 u = u << scalar; 231 return u; 232 } 233 vec4( T ) ?<<?( vec4( T ) u, vec4( T ) v ) { 234 return [u.x << v.x, u.y << v.y, u.z << v.z, u.w << v.w]; 235 } 236 vec4( T )& ?<<=?( vec4( T )& u, vec4( T ) v ) { 237 u = u << v; 238 return u; 239 } 240 240 } 241 241 242 242 // >> 243 forall( | { T ?>>?(T,T); }) {244 vec4(T) ?>>?(vec4(T) v, T scalar) with (v) {245 return [x >> scalar, y >> scalar, z >> scalar, w >> scalar];246 }247 vec4(T)& ?>>=?(vec4(T)& u, T scalar) {248 u = u >> scalar;249 return u;250 }251 vec4(T) ?>>?(vec4(T) u, vec4(T) v) {252 return [u.x >> v.x, u.y >> v.y, u.z >> v.z, u.w >> v.w];253 }254 vec4(T)& ?>>=?(vec4(T)& u, vec4(T) v) {255 u = u >> v;256 return u;257 }243 forall( | { T ?>>?( T,T ); }) { 244 vec4( T ) ?>>?( vec4( T ) v, T scalar ) with ( v ) { 245 return [x >> scalar, y >> scalar, z >> scalar, w >> scalar]; 246 } 247 vec4( T )& ?>>=?( vec4( T )& u, T scalar ) { 248 u = u >> scalar; 249 return u; 250 } 251 vec4( T ) ?>>?( vec4( T ) u, vec4( T ) v ) { 252 return [u.x >> v.x, u.y >> v.y, u.z >> v.z, u.w >> v.w]; 253 } 254 vec4( T )& ?>>=?( vec4( T )& u, vec4( T ) v ) { 255 u = u >> v; 256 return u; 257 } 258 258 } 259 259 260 260 // ~ 261 forall( | { T ~?(T); })262 vec4( T) ~?(vec4(T) v) with (v) {261 forall( | { T ~?( T ); }) 262 vec4( T ) ~?( vec4( T ) v ) with ( v ) { 263 263 return [~x, ~y, ~z, ~w]; 264 264 } 265 265 266 266 // relational 267 forall( | equality(T)) {268 bool ?==?(vec4(T) u, vec4(T) v) with (u) {269 return x == v.x && y == v.y && z == v.z && w == v.w;270 }271 bool ?!=?(vec4(T) u, vec4(T) v) {272 return !(u == v);273 }267 forall( | equality( T ) ) { 268 bool ?==?( vec4( T ) u, vec4( T ) v ) with ( u ) { 269 return x == v.x && y == v.y && z == v.z && w == v.w; 270 } 271 bool ?!=?( vec4( T ) u, vec4( T ) v ) { 272 return !( u == v ); 273 } 274 274 } 275 275 276 276 // Geometric functions 277 forall( | add(T) | multiply(T))278 T dot( vec4(T) u, vec4(T) v) {277 forall( | add( T ) | multiply( T ) ) 278 T dot( vec4( T ) u, vec4( T ) v ) { 279 279 return u.x * v.x + u.y * v.y + u.z * v.z + u.w * v.w; 280 280 } 281 282 } // static inline283 281 } 284 282 285 forall( ostype &, T | writeable(T, ostype)) {286 ostype & ?|?( ostype & os, vec4(T) v) with (v) {283 forall( ostype &, T | writeable( T, ostype ) ) { 284 ostype & ?|?( ostype & os, vec4( T ) v ) with ( v ) { 287 285 return os | '<' | x | ',' | y | ',' | z | ',' | w | '>'; 288 286 } 289 OSTYPE_VOID_IMPL( os, vec4( T) )287 OSTYPE_VOID_IMPL( os, vec4( T ) ) 290 288 } 291
Note:
See TracChangeset
for help on using the changeset viewer.