Core: Rework Serialization

Former-commit-id: d97eedbd3efc92235e3880ad061a5216fa77ebd7
This commit is contained in:
Lynix
2016-02-03 18:42:19 +01:00
parent f0863d9055
commit e367ec456d
17 changed files with 337 additions and 273 deletions

View File

@@ -3,39 +3,22 @@
// For conditions of distribution and use, see copyright notice in Config.hpp
#include <Nazara/Core/MemoryStream.hpp>
#include <Nazara/Core/ByteArray.hpp>
#include <algorithm>
#include <cstring>
#include <Nazara/Core/Debug.hpp>
namespace Nz
{
MemoryStream::MemoryStream() :
Stream(StreamOption_None, OpenMode_ReadWrite),
m_pos(0)
{
}
MemoryStream::MemoryStream(const void* ptr, unsigned int size) :
MemoryStream()
{
m_buffer.Resize(size);
std::memcpy(m_buffer.GetBuffer(), ptr, size);
}
void MemoryStream::Clear()
{
m_buffer.Clear();
m_buffer->Clear();
m_pos = 0;
}
bool MemoryStream::EndOfStream() const
{
return m_pos >= m_buffer.size();
}
const ByteArray& MemoryStream::GetBuffer() const
{
return m_buffer;
return m_pos >= m_buffer->size();
}
UInt64 MemoryStream::GetCursorPos() const
@@ -43,19 +26,20 @@ namespace Nz
return m_pos;
}
const UInt8* MemoryStream::GetData() const
{
return m_buffer.GetConstBuffer();
}
UInt64 MemoryStream::GetSize() const
{
return m_buffer.size();
return m_buffer->GetSize();
}
void MemoryStream::SetBuffer(ByteArray* byteArray, UInt32 openMode)
{
m_buffer = byteArray;
m_openMode = openMode;
}
bool MemoryStream::SetCursorPos(UInt64 offset)
{
m_pos = std::min<UInt64>(offset, m_buffer.size());
m_pos = offset;
return true;
}
@@ -67,10 +51,13 @@ namespace Nz
std::size_t MemoryStream::ReadBlock(void* buffer, std::size_t size)
{
std::size_t readSize = std::min<std::size_t>(size, static_cast<std::size_t>(m_buffer.size() - m_pos));
if (EndOfStream())
return 0;
std::size_t readSize = std::min<std::size_t>(size, static_cast<std::size_t>(m_buffer->GetSize() - m_pos));
if (buffer)
std::memcpy(buffer, &m_buffer[m_pos], readSize);
std::memcpy(buffer, m_buffer->GetConstBuffer() + m_pos, readSize);
m_pos += readSize;
return readSize;
@@ -79,10 +66,10 @@ namespace Nz
std::size_t MemoryStream::WriteBlock(const void* buffer, std::size_t size)
{
std::size_t endPos = static_cast<std::size_t>(m_pos + size);
if (endPos > m_buffer.size())
m_buffer.Resize(endPos);
if (endPos > m_buffer->GetSize())
m_buffer->Resize(endPos);
std::memcpy(&m_buffer[m_pos], buffer, size);
std::memcpy(m_buffer->GetBuffer() + m_pos, buffer, size);
m_pos = endPos;
return size;