diff --git a/include/Nazara/Core/ByteArray.hpp b/include/Nazara/Core/ByteArray.hpp index 745165e5f..9c0a87733 100644 --- a/include/Nazara/Core/ByteArray.hpp +++ b/include/Nazara/Core/ByteArray.hpp @@ -21,6 +21,7 @@ class NAZARA_API NzByteArray : public NzHashable struct SharedArray; NzByteArray(); + explicit NzByteArray(unsigned int size); NzByteArray(const void* buffer, unsigned int size); NzByteArray(const NzByteArray& buffer); NzByteArray(NzByteArray&& buffer) noexcept; diff --git a/include/Nazara/Core/String.hpp b/include/Nazara/Core/String.hpp index cb38105eb..bd7ab638a 100644 --- a/include/Nazara/Core/String.hpp +++ b/include/Nazara/Core/String.hpp @@ -33,6 +33,7 @@ class NAZARA_API NzString : public NzHashable NzString(); explicit NzString(char character); + explicit NzString(unsigned int length, char character = '\0'); NzString(const char* string); NzString(const char* string, unsigned int length); NzString(const std::string& string); diff --git a/src/Nazara/Core/ByteArray.cpp b/src/Nazara/Core/ByteArray.cpp index dc30e6c93..18fe58a79 100644 --- a/src/Nazara/Core/ByteArray.cpp +++ b/src/Nazara/Core/ByteArray.cpp @@ -29,6 +29,19 @@ m_sharedArray(&emptyArray) { } +NzByteArray::NzByteArray(unsigned int size) +{ + if (size > 0) + { + m_sharedArray = new SharedArray; + m_sharedArray->buffer = new nzUInt8[size]; + m_sharedArray->capacity = size; + m_sharedArray->size = size; + } + else + m_sharedArray = &emptyArray; +} + NzByteArray::NzByteArray(const void* buffer, unsigned int size) { if (size > 0) diff --git a/src/Nazara/Core/String.cpp b/src/Nazara/Core/String.cpp index 42d03d61c..f261dcfed 100644 --- a/src/Nazara/Core/String.cpp +++ b/src/Nazara/Core/String.cpp @@ -77,9 +77,7 @@ m_sharedString(&emptyString) NzString::NzString(char character) { - if (character == '\0') - m_sharedString = &emptyString; - else + if (character != '\0') { m_sharedString = new SharedString; m_sharedString->capacity = 1; @@ -88,6 +86,26 @@ NzString::NzString(char character) m_sharedString->string[0] = character; m_sharedString->string[1] = '\0'; } + else + m_sharedString = &emptyString; +} + +NzString::NzString(unsigned int length, char character) +{ + if (length > 0) + { + m_sharedString = new SharedString; + m_sharedString->capacity = length; + m_sharedString->size = length; + m_sharedString->string = new char[length+1]; + + if (character != '\0') + std::memset(m_sharedString->string, character, length); + + m_sharedString->string[length] = '\0'; + } + else + m_sharedString = &emptyString; } NzString::NzString(const char* string) : diff --git a/src/Nazara/Core/StringStream.cpp b/src/Nazara/Core/StringStream.cpp index 5aafd57fe..994d45b39 100644 --- a/src/Nazara/Core/StringStream.cpp +++ b/src/Nazara/Core/StringStream.cpp @@ -163,7 +163,7 @@ NzStringStream& NzStringStream::operator<<(unsigned char character) { NazaraLock(m_mutex) - m_strings.push_back(NzString(character)); + m_strings.push_back(NzString(static_cast(character))); m_bufferSize++; return *this;