diff --git a/src/common/engine/sc_man.cpp b/src/common/engine/sc_man.cpp index cc72273a18..e8423178d9 100644 --- a/src/common/engine/sc_man.cpp +++ b/src/common/engine/sc_man.cpp @@ -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 (); diff --git a/src/common/engine/sc_man.h b/src/common/engine/sc_man.h index 307831dba7..980e67d7ac 100644 --- a/src/common/engine/sc_man.h +++ b/src/common/engine/sc_man.h @@ -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 &buffer) - { - OpenMem(name, (const char*)buffer.Data(), buffer.Size()); - } - void OpenMem(const char* name, const std::vector& buffer) + template + 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); diff --git a/src/common/utility/tarray.h b/src/common/utility/tarray.h index e607726882..b0ab192cc5 100644 --- a/src/common/utility/tarray.h +++ b/src/common/utility/tarray.h @@ -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;