BsVectorNI.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "Prerequisites/BsPrerequisitesUtil.h"
  5. #include "Math/BsVector2I.h"
  6. namespace bs
  7. {
  8. /** @addtogroup Math
  9. * @{
  10. */
  11. /** A N dimensional vector with integer coordinates. */
  12. template<int N>
  13. struct VectorNI
  14. {
  15. INT32 v[N];
  16. VectorNI()
  17. {
  18. memset(v, 0, sizeof(v));
  19. }
  20. VectorNI(INT32 val[N])
  21. {
  22. memcpy(v, val, sizeof(v));
  23. }
  24. VectorNI(std::initializer_list<INT32> list)
  25. {
  26. assert(list.size() <= N);
  27. std::copy(list.begin(), list.end(), v);
  28. }
  29. INT32 operator[] (size_t i) const
  30. {
  31. assert(i < N);
  32. return v[i];
  33. }
  34. INT32& operator[] (size_t i)
  35. {
  36. assert(i < N);
  37. return v[i];
  38. }
  39. VectorNI& operator= (const VectorNI& rhs)
  40. {
  41. memcpy(v, rhs.v, sizeof(v));
  42. return *this;
  43. }
  44. bool operator== (const Vector2I& rhs) const
  45. {
  46. for (UINT32 i = 0; i < N; i++)
  47. {
  48. if (v[i] != rhs[i])
  49. return false;
  50. }
  51. return true;
  52. }
  53. bool operator!= (const Vector2I& rhs) const
  54. {
  55. return !operator==(*this, rhs);
  56. }
  57. };
  58. /** @} */
  59. typedef VectorNI<3> Vector3I;
  60. typedef VectorNI<4> Vector4I;
  61. BS_ALLOW_MEMCPY_SERIALIZATION(Vector3I)
  62. BS_ALLOW_MEMCPY_SERIALIZATION(Vector4I)
  63. }