2023-02-13 14:56:13 +01:00
|
|
|
#include "ArchiveBuffer.h"
|
|
|
|
|
#include "Graphics/Graphics.h"
|
|
|
|
|
|
|
|
|
|
using namespace Seele;
|
|
|
|
|
|
|
|
|
|
ArchiveBuffer::ArchiveBuffer()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
ArchiveBuffer::ArchiveBuffer(Gfx::PGraphics graphics)
|
|
|
|
|
: graphics(graphics)
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
void ArchiveBuffer::writeBytes(const void* data, uint64 size)
|
|
|
|
|
{
|
|
|
|
|
if (size + position >= memory.size())
|
|
|
|
|
{
|
|
|
|
|
memory.resize(size + position);
|
|
|
|
|
}
|
|
|
|
|
std::memcpy(memory.data() + position, data, size);
|
|
|
|
|
position += size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ArchiveBuffer::readBytes(void* dest, uint64 size)
|
|
|
|
|
{
|
|
|
|
|
assert(position + size <= memory.size());
|
|
|
|
|
std::memcpy(dest, memory.data() + position, size);
|
|
|
|
|
position += size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ArchiveBuffer::writeToStream(std::ostream& stream)
|
|
|
|
|
{
|
|
|
|
|
uint64 bufferLength = memory.size();
|
|
|
|
|
stream.write((char*)&version, sizeof(uint64));
|
|
|
|
|
stream.write((char*)&bufferLength, sizeof(uint64));
|
|
|
|
|
stream.write((char*)memory.data(), memory.size());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ArchiveBuffer::readFromStream(std::istream& stream)
|
|
|
|
|
{
|
|
|
|
|
stream.read((char*)&version, sizeof(uint64));
|
|
|
|
|
uint64 bufferLength = 0;
|
|
|
|
|
stream.read((char*)&bufferLength, sizeof(uint64));
|
|
|
|
|
memory.resize(bufferLength);
|
|
|
|
|
stream.read((char*)memory.data(), bufferLength);
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-24 22:09:07 +01:00
|
|
|
void ArchiveBuffer::seek(int64 s, SeekOp op)
|
|
|
|
|
{
|
|
|
|
|
int64 newPos = position;
|
|
|
|
|
switch (op)
|
|
|
|
|
{
|
|
|
|
|
case SeekOp::BEGIN:
|
|
|
|
|
newPos = s;
|
|
|
|
|
break;
|
|
|
|
|
case SeekOp::END:
|
|
|
|
|
newPos = memory.size() + s;
|
|
|
|
|
break;
|
|
|
|
|
case SeekOp::CURRENT:
|
|
|
|
|
newPos = position + s;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
assert(newPos >= 0 && newPos < memory.size());
|
|
|
|
|
newPos = position;
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
bool ArchiveBuffer::eof() const
|
|
|
|
|
{
|
|
|
|
|
return position == memory.size();
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-24 22:09:07 +01:00
|
|
|
size_t Seele::ArchiveBuffer::size() const
|
|
|
|
|
{
|
|
|
|
|
return memory.size();
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-13 14:56:13 +01:00
|
|
|
void ArchiveBuffer::rewind()
|
|
|
|
|
{
|
|
|
|
|
position = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Gfx::PGraphics& ArchiveBuffer::getGraphics()
|
|
|
|
|
{
|
|
|
|
|
return graphics;
|
|
|
|
|
}
|