mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
130 lines
1.4 KiB
C++
130 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "../Common.h"
|
|
|
|
NS_BF_BEGIN
|
|
|
|
template <typename T>
|
|
class Span
|
|
{
|
|
public:
|
|
T* mVals;
|
|
int mSize;
|
|
|
|
public:
|
|
struct Iterator
|
|
{
|
|
public:
|
|
T* mPtr;
|
|
|
|
public:
|
|
Iterator(T* ptr)
|
|
{
|
|
mPtr = ptr;
|
|
}
|
|
|
|
Iterator& operator++()
|
|
{
|
|
mPtr++;
|
|
return *this;
|
|
}
|
|
|
|
bool operator!=(const Iterator& itr) const
|
|
{
|
|
return itr.mPtr != mPtr;
|
|
}
|
|
|
|
bool operator==(const Iterator& itr) const
|
|
{
|
|
return itr.mPtr == mPtr;
|
|
}
|
|
|
|
T& operator*()
|
|
{
|
|
return *mPtr;
|
|
}
|
|
};
|
|
|
|
Span()
|
|
{
|
|
|
|
}
|
|
|
|
Span(T* mPtr, int size)
|
|
{
|
|
mSize = (int)refVec.size();
|
|
mVals = NULL;
|
|
}
|
|
|
|
T& operator[](int idx) const
|
|
{
|
|
return mVals[idx];
|
|
}
|
|
|
|
Iterator begin() const
|
|
{
|
|
return mVals;
|
|
}
|
|
|
|
Iterator end() const
|
|
{
|
|
return mVals + mSize;
|
|
}
|
|
|
|
T back() const
|
|
{
|
|
return mVals[mSize - 1];
|
|
}
|
|
|
|
int size() const
|
|
{
|
|
return mSize;
|
|
}
|
|
|
|
bool empty() const
|
|
{
|
|
return mSize == 0;
|
|
}
|
|
|
|
bool IsEmpty() const
|
|
{
|
|
return mSize == 0;
|
|
}
|
|
|
|
T Get(int idx)
|
|
{
|
|
if ((idx < 0) || (idx >= mSize))
|
|
return (T)0;
|
|
return mVals[idx];
|
|
}
|
|
|
|
template <typename T2>
|
|
T2 GetAs(int idx)
|
|
{
|
|
if ((idx < 0) || (idx >= mSize))
|
|
return (T2)0;
|
|
return (T2)mVals[idx];
|
|
}
|
|
|
|
T GetLast()
|
|
{
|
|
if (mSize == 0)
|
|
return (T)0;
|
|
return mVals[mSize - 1];
|
|
}
|
|
|
|
T GetFirst()
|
|
{
|
|
if (mSize == 0)
|
|
return (T)0;
|
|
return mVals[0];
|
|
}
|
|
|
|
void SetSize(int size)
|
|
{
|
|
BF_ASSERT(size <= mSize);
|
|
mSize = size;
|
|
}
|
|
};
|
|
|
|
NS_BF_END
|