added STL compatible access functions to TArray.

This allows using them in templates made for STL containers.
This commit is contained in:
Christoph Oelckers 2023-12-10 08:58:11 +01:00
parent 52c878c0d7
commit 41573df58f
3 changed files with 42 additions and 6 deletions

View file

@ -150,7 +150,7 @@ bool FScanner::OpenFile (const char *name)
auto filebuff = fr.Read();
if (filebuff.size() == 0 && filesize > 0) return false;
ScriptBuffer = FString((const char *)filebuff.data(), filesize);
ScriptBuffer = FString(filebuff.string(), filesize);
ScriptName = name; // This is used for error messages so the full file name is preferable
LumpNum = -1;
PrepareScript ();

View file

@ -71,12 +71,10 @@ public:
void Open(const char *lumpname);
bool OpenFile(const char *filename);
void OpenMem(const char *name, const char *buffer, int size);
void OpenMem(const char *name, const TArray<uint8_t> &buffer)
{
OpenMem(name, (const char*)buffer.Data(), buffer.Size());
}
void OpenMem(const char* name, const std::vector<uint8_t>& buffer)
template<class T>
void OpenMem(const char* name, const T& buffer)
{
static_assert(sizeof(T::value_type) == 1);
OpenMem(name, (const char*)buffer.data(), (int)buffer.size());
}
void OpenString(const char *name, FString buffer);

View file

@ -657,6 +657,44 @@ public:
std::swap(Most, other.Most);
}
// aliases with STL compliant names to allow using TArrays with templates designed for STL containers
size_t size() const
{
return Count;
}
T* data() const
{
return Data();
}
T& front() const
{
return *Data();
}
T& back() const
{
return Last();
}
void resize(size_t i)
{
Resize(i);
}
void push_back(T& elem)
{
Push(elem);
}
void clear()
{
Clear();
}
private:
T *Array;
unsigned int Count;