Span.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #pragma once
  2. #include "../Common.h"
  3. NS_BF_BEGIN
  4. template <typename T>
  5. class Span
  6. {
  7. public:
  8. T* mVals;
  9. intptr mSize;
  10. public:
  11. struct Iterator
  12. {
  13. public:
  14. T* mPtr;
  15. public:
  16. Iterator(T* ptr)
  17. {
  18. mPtr = ptr;
  19. }
  20. Iterator& operator++()
  21. {
  22. mPtr++;
  23. return *this;
  24. }
  25. bool operator!=(const Iterator& itr) const
  26. {
  27. return itr.mPtr != mPtr;
  28. }
  29. bool operator==(const Iterator& itr) const
  30. {
  31. return itr.mPtr == mPtr;
  32. }
  33. T& operator*()
  34. {
  35. return *mPtr;
  36. }
  37. };
  38. Span()
  39. {
  40. mVals = NULL;
  41. mSize = 0;
  42. }
  43. Span(T* mPtr, intptr size)
  44. {
  45. mVals = mPtr;
  46. mSize = size;
  47. }
  48. T& operator[](intptr idx) const
  49. {
  50. return mVals[idx];
  51. }
  52. Iterator begin() const
  53. {
  54. return mVals;
  55. }
  56. Iterator end() const
  57. {
  58. return mVals + mSize;
  59. }
  60. T back() const
  61. {
  62. return mVals[mSize - 1];
  63. }
  64. intptr size() const
  65. {
  66. return mSize;
  67. }
  68. bool empty() const
  69. {
  70. return mSize == 0;
  71. }
  72. bool IsEmpty() const
  73. {
  74. return mSize == 0;
  75. }
  76. T Get(intptr idx)
  77. {
  78. if ((idx < 0) || (idx >= mSize))
  79. return (T)0;
  80. return mVals[idx];
  81. }
  82. template <typename T2>
  83. T2 GetAs(intptr idx)
  84. {
  85. if ((idx < 0) || (idx >= mSize))
  86. return (T2)0;
  87. return (T2)mVals[idx];
  88. }
  89. T GetLast()
  90. {
  91. if (mSize == 0)
  92. return (T)0;
  93. return mVals[mSize - 1];
  94. }
  95. T GetFirst()
  96. {
  97. if (mSize == 0)
  98. return (T)0;
  99. return mVals[0];
  100. }
  101. void SetSize(intptr size)
  102. {
  103. BF_ASSERT(size <= mSize);
  104. mSize = size;
  105. }
  106. };
  107. NS_BF_END