1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 19:48:20 +02:00
Beef/BeefySysLib/Span.h

132 lines
1.4 KiB
C
Raw Permalink Normal View History

2019-08-23 11:56:54 -07:00
#pragma once
#include "../Common.h"
NS_BF_BEGIN
template <typename T>
class Span
{
public:
T* mVals;
2021-11-14 18:02:26 -08:00
intptr mSize;
2019-08-23 11:56:54 -07:00
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()
{
2021-12-03 05:58:57 -08:00
mVals = NULL;
mSize = 0;
2019-08-23 11:56:54 -07:00
}
2021-11-14 18:02:26 -08:00
Span(T* mPtr, intptr size)
2019-08-23 11:56:54 -07:00
{
2021-11-14 18:02:26 -08:00
mVals = mPtr;
mSize = size;
2019-08-23 11:56:54 -07:00
}
2021-11-14 18:02:26 -08:00
T& operator[](intptr idx) const
2019-08-23 11:56:54 -07:00
{
return mVals[idx];
}
Iterator begin() const
{
return mVals;
}
Iterator end() const
{
return mVals + mSize;
}
T back() const
{
return mVals[mSize - 1];
}
2021-11-14 18:02:26 -08:00
intptr size() const
2019-08-23 11:56:54 -07:00
{
return mSize;
}
bool empty() const
{
return mSize == 0;
}
bool IsEmpty() const
{
return mSize == 0;
}
2021-11-14 18:02:26 -08:00
T Get(intptr idx)
2019-08-23 11:56:54 -07:00
{
if ((idx < 0) || (idx >= mSize))
return (T)0;
return mVals[idx];
}
template <typename T2>
2021-11-14 18:02:26 -08:00
T2 GetAs(intptr idx)
2019-08-23 11:56:54 -07:00
{
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];
}
2021-11-14 18:02:26 -08:00
void SetSize(intptr size)
2019-08-23 11:56:54 -07:00
{
BF_ASSERT(size <= mSize);
mSize = size;
}
};
NS_BF_END