mirror of
https://github.com/vcmi/vcmi.git
synced 2024-11-28 08:48:48 +02:00
ff635edc0b
preparation for having client and server in a single process
78 lines
1.3 KiB
C++
78 lines
1.3 KiB
C++
/*
|
|
* CMemoryBuffer.cpp, part of VCMI engine
|
|
*
|
|
* Authors: listed in file AUTHORS in main folder
|
|
*
|
|
* License: GNU General Public License v2.0 or later
|
|
* Full text of license available in license.txt file, in main folder
|
|
*
|
|
*/
|
|
|
|
#include "StdInc.h"
|
|
#include "CMemoryBuffer.h"
|
|
|
|
VCMI_LIB_NAMESPACE_BEGIN
|
|
|
|
///CMemoryBuffer
|
|
CMemoryBuffer::CMemoryBuffer():
|
|
position(0)
|
|
{
|
|
buffer.reserve(4096);
|
|
}
|
|
|
|
si64 CMemoryBuffer::write(const ui8 * data, si64 size)
|
|
{
|
|
//do not shrink
|
|
const si64 newSize = tell()+size;
|
|
if(newSize>getSize())
|
|
buffer.resize(newSize);
|
|
|
|
std::copy(data, data + size, buffer.data() + position);
|
|
position += size;
|
|
|
|
return size;
|
|
}
|
|
|
|
si64 CMemoryBuffer::read(ui8 * data, si64 size)
|
|
{
|
|
si64 toRead = std::min(getSize() - tell(), size);
|
|
|
|
if(toRead > 0)
|
|
{
|
|
std::copy(buffer.data() + position, buffer.data() + position + toRead, data);
|
|
position += toRead;
|
|
}
|
|
|
|
|
|
return toRead;
|
|
}
|
|
|
|
si64 CMemoryBuffer::seek(si64 position)
|
|
{
|
|
this->position = position;
|
|
if (this->position >getSize())
|
|
this->position = getSize();
|
|
return this->position;
|
|
}
|
|
|
|
si64 CMemoryBuffer::tell()
|
|
{
|
|
return position;
|
|
}
|
|
|
|
si64 CMemoryBuffer::skip(si64 delta)
|
|
{
|
|
auto old_position = tell();
|
|
|
|
return seek(old_position + delta) - old_position;
|
|
}
|
|
|
|
si64 CMemoryBuffer::getSize()
|
|
{
|
|
return buffer.size();
|
|
}
|
|
|
|
|
|
|
|
VCMI_LIB_NAMESPACE_END
|