From c1ffed60eccc8748a21acfdce133eae5119d5371 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Fri, 28 Aug 2020 21:42:18 +0100 Subject: FastNBTWriter: AddString now uses string_view * Avoids an allocation for all those string literals we pass in --- src/WorldStorage/FastNBT.cpp | 8 ++++---- src/WorldStorage/FastNBT.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/WorldStorage/FastNBT.cpp b/src/WorldStorage/FastNBT.cpp index 5f979120b..ec43d2f12 100644 --- a/src/WorldStorage/FastNBT.cpp +++ b/src/WorldStorage/FastNBT.cpp @@ -614,12 +614,12 @@ void cFastNBTWriter::AddDouble(const AString & a_Name, double a_Value) -void cFastNBTWriter::AddString(const AString & a_Name, const AString & a_Value) +void cFastNBTWriter::AddString(const AString & a_Name, const std::string_view a_Value) { TagCommon(a_Name, TAG_String); - UInt16 len = htons(static_cast(a_Value.size())); - m_Result.append(reinterpret_cast(&len), 2); - m_Result.append(a_Value.c_str(), a_Value.size()); + const UInt16 Length = htons(static_cast(a_Value.size())); + m_Result.append(reinterpret_cast(&Length), sizeof(Length)); + m_Result.append(a_Value); } diff --git a/src/WorldStorage/FastNBT.h b/src/WorldStorage/FastNBT.h index 2e1246ccf..257115fe1 100644 --- a/src/WorldStorage/FastNBT.h +++ b/src/WorldStorage/FastNBT.h @@ -334,7 +334,7 @@ public: void AddLong (const AString & a_Name, Int64 a_Value); void AddFloat (const AString & a_Name, float a_Value); void AddDouble (const AString & a_Name, double a_Value); - void AddString (const AString & a_Name, const AString & a_Value); + void AddString (const AString & a_Name, std::string_view a_Value); void AddByteArray(const AString & a_Name, const char * a_Value, size_t a_NumElements); void AddIntArray (const AString & a_Name, const Int32 * a_Value, size_t a_NumElements); -- cgit v1.2.3