BsVectorNI.h 1.1 KB

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