Made non-filling version of ByteArray::Resize
Former-commit-id: 0fec6b5749a786fc1999b9fc718a481d47c52895
This commit is contained in:
parent
8f9771ab8b
commit
29ee943871
|
|
@ -50,8 +50,10 @@ class NAZARA_API NzByteArray : public NzHashable
|
|||
|
||||
void Reserve(unsigned int bufferSize);
|
||||
|
||||
NzByteArray& Resize(int size, nzUInt8 byte = 0);
|
||||
NzByteArray Resized(int size, nzUInt8 byte = 0) const;
|
||||
NzByteArray& Resize(int size);
|
||||
NzByteArray& Resize(int size, nzUInt8 byte);
|
||||
NzByteArray Resized(int size) const;
|
||||
NzByteArray Resized(int size, nzUInt8 byte) const;
|
||||
|
||||
NzByteArray SubArray(int startPos, int endPos = -1) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -213,6 +213,42 @@ void NzByteArray::Reserve(unsigned int bufferSize)
|
|||
m_sharedArray->size = size;
|
||||
}
|
||||
|
||||
NzByteArray& NzByteArray::Resize(int size)
|
||||
{
|
||||
if (size == 0)
|
||||
{
|
||||
Clear(true);
|
||||
return *this;
|
||||
}
|
||||
|
||||
if (size < 0)
|
||||
size = std::max(static_cast<int>(m_sharedArray->size + size), 0);
|
||||
|
||||
unsigned int newSize = static_cast<unsigned int>(size);
|
||||
|
||||
if (m_sharedArray->capacity >= newSize)
|
||||
{
|
||||
EnsureOwnership();
|
||||
|
||||
// Nous avons déjà la place requise
|
||||
m_sharedArray->size = newSize;
|
||||
}
|
||||
else // On veut forcément agrandir la chaine
|
||||
{
|
||||
nzUInt8* newBuffer = new nzUInt8[newSize];
|
||||
if (m_sharedArray->size != 0)
|
||||
std::memcpy(newBuffer, m_sharedArray->buffer, newSize);
|
||||
|
||||
ReleaseArray();
|
||||
m_sharedArray = new SharedArray;
|
||||
m_sharedArray->buffer = newBuffer;
|
||||
m_sharedArray->capacity = newSize;
|
||||
m_sharedArray->size = newSize;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
NzByteArray& NzByteArray::Resize(int size, nzUInt8 byte)
|
||||
{
|
||||
if (size == 0)
|
||||
|
|
@ -254,6 +290,24 @@ NzByteArray& NzByteArray::Resize(int size, nzUInt8 byte)
|
|||
return *this;
|
||||
}
|
||||
|
||||
NzByteArray NzByteArray::Resized(int size) const
|
||||
{
|
||||
if (size < 0)
|
||||
size = m_sharedArray->size + size;
|
||||
|
||||
if (size <= 0)
|
||||
return NzByteArray();
|
||||
|
||||
unsigned int newSize = static_cast<unsigned int>(size);
|
||||
if (newSize == m_sharedArray->size)
|
||||
return *this;
|
||||
|
||||
nzUInt8* buffer = new nzUInt8[newSize];
|
||||
std::memcpy(buffer, m_sharedArray->buffer, (newSize > m_sharedArray->size) ? m_sharedArray->size : newSize);
|
||||
|
||||
return NzByteArray(new SharedArray(1, newSize, newSize, buffer));
|
||||
}
|
||||
|
||||
NzByteArray NzByteArray::Resized(int size, nzUInt8 byte) const
|
||||
{
|
||||
if (size < 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue