BsVectorNI.h 991 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #pragma once
  2. #include "BsPrerequisitesUtil.h"
  3. namespace BansheeEngine
  4. {
  5. /** @addtogroup Math
  6. * @{
  7. */
  8. /** A N dimensional vector with integer coordinates. */
  9. template<int N>
  10. struct VectorNI
  11. {
  12. INT32 v[N];
  13. VectorNI()
  14. {
  15. memset(v, 0, sizeof(v));
  16. }
  17. VectorNI(INT32 val[N])
  18. {
  19. memcpy(v, val, sizeof(v));
  20. }
  21. INT32 operator[] (size_t i) const
  22. {
  23. assert(i < N);
  24. return v[i];
  25. }
  26. INT32& operator[] (size_t i)
  27. {
  28. assert(i < N);
  29. return v[i];
  30. }
  31. VectorNI& operator= (const VectorNI& rhs)
  32. {
  33. memcpy(v, rhs.v, sizeof(v));
  34. return *this;
  35. }
  36. bool operator== (const Vector2I& rhs) const
  37. {
  38. for (UINT32 i = 0; i < N; i++)
  39. {
  40. if (v[i] != rhs.v[i])
  41. return false;
  42. }
  43. return true;
  44. }
  45. bool operator!= (const Vector2I& rhs) const
  46. {
  47. return !operator==(*this, rhs);
  48. }
  49. };
  50. /** @} */
  51. typedef VectorNI<3> Vector3I;
  52. typedef VectorNI<4> Vector4I;
  53. }