Refactor SerializationFormat::EndWrite and ChunkedIO::Chunk mem mgmt.

SerializationFormat::EndWrite now transfers ownership of the buffer
to the caller instead of doing a memcpy.

ChunkedIO::Chunk is no longer a POD type, hopefully the ctor/dtor
make it easier to manage its associated memory.  It also now
tracks how to deallocate its buffer (i.e. delete vs. free).
This commit is contained in:
Jon Siwek 2014-03-18 14:42:38 -05:00
parent 07a4a8d147
commit 70131b5c84
9 changed files with 87 additions and 77 deletions

View file

@ -5,6 +5,8 @@
#include "Serializer.h"
#include "Reporter.h"
const float SerializationFormat::GROWTH_FACTOR = 2.5;
SerializationFormat::SerializationFormat()
: output(), output_size(), output_pos(), input(), input_len(), input_pos(),
bytes_written(), bytes_read()
@ -49,9 +51,12 @@ void SerializationFormat::StartWrite()
uint32 SerializationFormat::EndWrite(char** data)
{
*data = new char[output_pos];
memcpy(*data, output, output_pos);
return output_pos;
uint32 rval = output_pos;
*data = output;
output = 0;
output_size = 0;
output_pos = 0;
return rval;
}
bool SerializationFormat::ReadData(void* b, size_t count)
@ -75,7 +80,7 @@ bool SerializationFormat::WriteData(const void* b, size_t count)
// Increase buffer if necessary.
while ( output_pos + count > output_size )
{
output_size += output_size * 1.5;
output_size *= GROWTH_FACTOR;
output = (char*)safe_realloc(output, output_size);
}