1/// @ref core 2 3#include "./compute_vector_relational.hpp" 4 5namespace glm 6{ 7 // -- Implicit basic constructors -- 8 9# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE 10 template<typename T, qualifier Q> 11 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() 12# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE 13 : x(0) 14# endif 15 {} 16 17 template<typename T, qualifier Q> 18 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) 19 : x(v.x) 20 {} 21# endif 22 23 template<typename T, qualifier Q> 24 template<qualifier P> 25 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) 26 : x(v.x) 27 {} 28 29 // -- Explicit basic constructors -- 30 31 template<typename T, qualifier Q> 32 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) 33 : x(scalar) 34 {} 35 36 // -- Conversion vector constructors -- 37 38 template<typename T, qualifier Q> 39 template<typename U, qualifier P> 40 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) 41 : x(static_cast<T>(v.x)) 42 {} 43 44 template<typename T, qualifier Q> 45 template<typename U, qualifier P> 46 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) 47 : x(static_cast<T>(v.x)) 48 {} 49 50 template<typename T, qualifier Q> 51 template<typename U, qualifier P> 52 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) 53 : x(static_cast<T>(v.x)) 54 {} 55 56 template<typename T, qualifier Q> 57 template<typename U, qualifier P> 58 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) 59 : x(static_cast<T>(v.x)) 60 {} 61 62 // -- Component accesses -- 63 64 template<typename T, qualifier Q> 65 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) 66 { 67 return x; 68 } 69 70 template<typename T, qualifier Q> 71 GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const 72 { 73 return x; 74 } 75 76 // -- Unary arithmetic operators -- 77 78# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE 79 template<typename T, qualifier Q> 80 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) 81 { 82 this->x = v.x; 83 return *this; 84 } 85# endif 86 87 template<typename T, qualifier Q> 88 template<typename U> 89 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) 90 { 91 this->x = static_cast<T>(v.x); 92 return *this; 93 } 94 95 template<typename T, qualifier Q> 96 template<typename U> 97 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) 98 { 99 this->x += static_cast<T>(scalar); 100 return *this; 101 } 102 103 template<typename T, qualifier Q> 104 template<typename U> 105 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) 106 { 107 this->x += static_cast<T>(v.x); 108 return *this; 109 } 110 111 template<typename T, qualifier Q> 112 template<typename U> 113 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) 114 { 115 this->x -= static_cast<T>(scalar); 116 return *this; 117 } 118 119 template<typename T, qualifier Q> 120 template<typename U> 121 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) 122 { 123 this->x -= static_cast<T>(v.x); 124 return *this; 125 } 126 127 template<typename T, qualifier Q> 128 template<typename U> 129 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) 130 { 131 this->x *= static_cast<T>(scalar); 132 return *this; 133 } 134 135 template<typename T, qualifier Q> 136 template<typename U> 137 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) 138 { 139 this->x *= static_cast<T>(v.x); 140 return *this; 141 } 142 143 template<typename T, qualifier Q> 144 template<typename U> 145 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) 146 { 147 this->x /= static_cast<T>(scalar); 148 return *this; 149 } 150 151 template<typename T, qualifier Q> 152 template<typename U> 153 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) 154 { 155 this->x /= static_cast<T>(v.x); 156 return *this; 157 } 158 159 // -- Increment and decrement operators -- 160 161 template<typename T, qualifier Q> 162 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() 163 { 164 ++this->x; 165 return *this; 166 } 167 168 template<typename T, qualifier Q> 169 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() 170 { 171 --this->x; 172 return *this; 173 } 174 175 template<typename T, qualifier Q> 176 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) 177 { 178 vec<1, T, Q> Result(*this); 179 ++*this; 180 return Result; 181 } 182 183 template<typename T, qualifier Q> 184 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) 185 { 186 vec<1, T, Q> Result(*this); 187 --*this; 188 return Result; 189 } 190 191 // -- Unary bit operators -- 192 193 template<typename T, qualifier Q> 194 template<typename U> 195 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) 196 { 197 this->x %= static_cast<T>(scalar); 198 return *this; 199 } 200 201 template<typename T, qualifier Q> 202 template<typename U> 203 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) 204 { 205 this->x %= static_cast<T>(v.x); 206 return *this; 207 } 208 209 template<typename T, qualifier Q> 210 template<typename U> 211 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) 212 { 213 this->x &= static_cast<T>(scalar); 214 return *this; 215 } 216 217 template<typename T, qualifier Q> 218 template<typename U> 219 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) 220 { 221 this->x &= static_cast<T>(v.x); 222 return *this; 223 } 224 225 template<typename T, qualifier Q> 226 template<typename U> 227 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) 228 { 229 this->x |= static_cast<T>(scalar); 230 return *this; 231 } 232 233 template<typename T, qualifier Q> 234 template<typename U> 235 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) 236 { 237 this->x |= U(v.x); 238 return *this; 239 } 240 241 template<typename T, qualifier Q> 242 template<typename U> 243 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) 244 { 245 this->x ^= static_cast<T>(scalar); 246 return *this; 247 } 248 249 template<typename T, qualifier Q> 250 template<typename U> 251 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) 252 { 253 this->x ^= static_cast<T>(v.x); 254 return *this; 255 } 256 257 template<typename T, qualifier Q> 258 template<typename U> 259 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) 260 { 261 this->x <<= static_cast<T>(scalar); 262 return *this; 263 } 264 265 template<typename T, qualifier Q> 266 template<typename U> 267 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) 268 { 269 this->x <<= static_cast<T>(v.x); 270 return *this; 271 } 272 273 template<typename T, qualifier Q> 274 template<typename U> 275 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) 276 { 277 this->x >>= static_cast<T>(scalar); 278 return *this; 279 } 280 281 template<typename T, qualifier Q> 282 template<typename U> 283 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) 284 { 285 this->x >>= static_cast<T>(v.x); 286 return *this; 287 } 288 289 // -- Unary constant operators -- 290 291 template<typename T, qualifier Q> 292 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) 293 { 294 return v; 295 } 296 297 template<typename T, qualifier Q> 298 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) 299 { 300 return vec<1, T, Q>( 301 -v.x); 302 } 303 304 // -- Binary arithmetic operators -- 305 306 template<typename T, qualifier Q> 307 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) 308 { 309 return vec<1, T, Q>( 310 v.x + scalar); 311 } 312 313 template<typename T, qualifier Q> 314 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) 315 { 316 return vec<1, T, Q>( 317 scalar + v.x); 318 } 319 320 template<typename T, qualifier Q> 321 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 322 { 323 return vec<1, T, Q>( 324 v1.x + v2.x); 325 } 326 327 //operator- 328 template<typename T, qualifier Q> 329 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) 330 { 331 return vec<1, T, Q>( 332 v.x - scalar); 333 } 334 335 template<typename T, qualifier Q> 336 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) 337 { 338 return vec<1, T, Q>( 339 scalar - v.x); 340 } 341 342 template<typename T, qualifier Q> 343 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 344 { 345 return vec<1, T, Q>( 346 v1.x - v2.x); 347 } 348 349 template<typename T, qualifier Q> 350 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) 351 { 352 return vec<1, T, Q>( 353 v.x * scalar); 354 } 355 356 template<typename T, qualifier Q> 357 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) 358 { 359 return vec<1, T, Q>( 360 scalar * v.x); 361 } 362 363 template<typename T, qualifier Q> 364 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 365 { 366 return vec<1, T, Q>( 367 v1.x * v2.x); 368 } 369 370 template<typename T, qualifier Q> 371 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) 372 { 373 return vec<1, T, Q>( 374 v.x / scalar); 375 } 376 377 template<typename T, qualifier Q> 378 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) 379 { 380 return vec<1, T, Q>( 381 scalar / v.x); 382 } 383 384 template<typename T, qualifier Q> 385 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 386 { 387 return vec<1, T, Q>( 388 v1.x / v2.x); 389 } 390 391 // -- Binary bit operators -- 392 393 template<typename T, qualifier Q> 394 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) 395 { 396 return vec<1, T, Q>( 397 v.x % scalar); 398 } 399 400 template<typename T, qualifier Q> 401 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) 402 { 403 return vec<1, T, Q>( 404 scalar % v.x); 405 } 406 407 template<typename T, qualifier Q> 408 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 409 { 410 return vec<1, T, Q>( 411 v1.x % v2.x); 412 } 413 414 template<typename T, qualifier Q> 415 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) 416 { 417 return vec<1, T, Q>( 418 v.x & scalar); 419 } 420 421 template<typename T, qualifier Q> 422 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) 423 { 424 return vec<1, T, Q>( 425 scalar & v.x); 426 } 427 428 template<typename T, qualifier Q> 429 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 430 { 431 return vec<1, T, Q>( 432 v1.x & v2.x); 433 } 434 435 template<typename T, qualifier Q> 436 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) 437 { 438 return vec<1, T, Q>( 439 v.x | scalar); 440 } 441 442 template<typename T, qualifier Q> 443 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) 444 { 445 return vec<1, T, Q>( 446 scalar | v.x); 447 } 448 449 template<typename T, qualifier Q> 450 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 451 { 452 return vec<1, T, Q>( 453 v1.x | v2.x); 454 } 455 456 template<typename T, qualifier Q> 457 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) 458 { 459 return vec<1, T, Q>( 460 v.x ^ scalar); 461 } 462 463 template<typename T, qualifier Q> 464 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) 465 { 466 return vec<1, T, Q>( 467 scalar ^ v.x); 468 } 469 470 template<typename T, qualifier Q> 471 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 472 { 473 return vec<1, T, Q>( 474 v1.x ^ v2.x); 475 } 476 477 template<typename T, qualifier Q> 478 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) 479 { 480 return vec<1, T, Q>( 481 static_cast<T>(v.x << scalar)); 482 } 483 484 template<typename T, qualifier Q> 485 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) 486 { 487 return vec<1, T, Q>( 488 static_cast<T>(scalar << v.x)); 489 } 490 491 template<typename T, qualifier Q> 492 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 493 { 494 return vec<1, T, Q>( 495 static_cast<T>(v1.x << v2.x)); 496 } 497 498 template<typename T, qualifier Q> 499 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) 500 { 501 return vec<1, T, Q>( 502 static_cast<T>(v.x >> scalar)); 503 } 504 505 template<typename T, qualifier Q> 506 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) 507 { 508 return vec<1, T, Q>( 509 static_cast<T>(scalar >> v.x)); 510 } 511 512 template<typename T, qualifier Q> 513 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 514 { 515 return vec<1, T, Q>( 516 static_cast<T>(v1.x >> v2.x)); 517 } 518 519 template<typename T, qualifier Q> 520 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) 521 { 522 return vec<1, T, Q>( 523 ~v.x); 524 } 525 526 // -- Boolean operators -- 527 528 template<typename T, qualifier Q> 529 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 530 { 531 return detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x); 532 } 533 534 template<typename T, qualifier Q> 535 GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) 536 { 537 return !(v1 == v2); 538 } 539 540 template<qualifier Q> 541 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) 542 { 543 return vec<1, bool, Q>(v1.x && v2.x); 544 } 545 546 template<qualifier Q> 547 GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) 548 { 549 return vec<1, bool, Q>(v1.x || v2.x); 550 } 551}//namespace glm 552