2018-07-19 16:04:20 -04:00
|
|
|
/***********************************************************************************************************************************
|
|
|
|
Buffer IO Write
|
|
|
|
***********************************************************************************************************************************/
|
|
|
|
#include "common/debug.h"
|
|
|
|
#include "common/io/bufferWrite.h"
|
2018-09-15 21:07:00 -04:00
|
|
|
#include "common/io/write.intern.h"
|
2018-07-19 16:04:20 -04:00
|
|
|
#include "common/log.h"
|
|
|
|
#include "common/memContext.h"
|
|
|
|
|
|
|
|
/***********************************************************************************************************************************
|
2019-01-05 18:10:30 +02:00
|
|
|
Object type
|
2018-07-19 16:04:20 -04:00
|
|
|
***********************************************************************************************************************************/
|
|
|
|
struct IoBufferWrite
|
|
|
|
{
|
2018-08-14 14:21:53 -04:00
|
|
|
MemContext *memContext; // Object memory context
|
|
|
|
IoWrite *io; // IoWrite interface
|
|
|
|
Buffer *write; // Buffer to write into
|
2018-07-19 16:04:20 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
/***********************************************************************************************************************************
|
2018-08-14 14:21:53 -04:00
|
|
|
New object
|
2018-07-19 16:04:20 -04:00
|
|
|
***********************************************************************************************************************************/
|
|
|
|
IoBufferWrite *
|
|
|
|
ioBufferWriteNew(Buffer *buffer)
|
|
|
|
{
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_LOG_BEGIN(logLevelTrace);
|
|
|
|
FUNCTION_LOG_PARAM(BUFFER, buffer);
|
|
|
|
FUNCTION_LOG_END();
|
2018-07-19 16:04:20 -04:00
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
ASSERT(buffer != NULL);
|
2018-07-19 16:04:20 -04:00
|
|
|
|
|
|
|
IoBufferWrite *this = NULL;
|
|
|
|
|
|
|
|
MEM_CONTEXT_NEW_BEGIN("IoBufferWrite")
|
|
|
|
{
|
|
|
|
this = memNew(sizeof(IoBufferWrite));
|
|
|
|
this->memContext = memContextCurrent();
|
2018-09-15 21:07:00 -04:00
|
|
|
this->io = ioWriteNewP(this, .write = (IoWriteInterfaceWrite)ioBufferWrite);
|
2018-07-19 16:04:20 -04:00
|
|
|
this->write = buffer;
|
|
|
|
}
|
|
|
|
MEM_CONTEXT_NEW_END();
|
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_LOG_RETURN(IO_BUFFER_WRITE, this);
|
2018-07-19 16:04:20 -04:00
|
|
|
}
|
|
|
|
|
2018-08-14 14:21:53 -04:00
|
|
|
/***********************************************************************************************************************************
|
|
|
|
Write to the buffer
|
|
|
|
***********************************************************************************************************************************/
|
|
|
|
void
|
|
|
|
ioBufferWrite(IoBufferWrite *this, Buffer *buffer)
|
|
|
|
{
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_LOG_BEGIN(logLevelTrace);
|
|
|
|
FUNCTION_LOG_PARAM(IO_BUFFER_WRITE, this);
|
|
|
|
FUNCTION_LOG_PARAM(BUFFER, buffer);
|
|
|
|
FUNCTION_LOG_END();
|
2018-08-14 14:21:53 -04:00
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
ASSERT(this != NULL);
|
|
|
|
ASSERT(buffer != NULL);
|
2018-08-14 14:21:53 -04:00
|
|
|
|
|
|
|
bufCat(this->write, buffer);
|
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_LOG_RETURN_VOID();
|
2018-08-14 14:21:53 -04:00
|
|
|
}
|
|
|
|
|
2018-07-19 16:04:20 -04:00
|
|
|
/***********************************************************************************************************************************
|
|
|
|
Move the object to a new context
|
|
|
|
***********************************************************************************************************************************/
|
|
|
|
IoBufferWrite *
|
|
|
|
ioBufferWriteMove(IoBufferWrite *this, MemContext *parentNew)
|
|
|
|
{
|
|
|
|
FUNCTION_TEST_BEGIN();
|
|
|
|
FUNCTION_TEST_PARAM(IO_BUFFER_WRITE, this);
|
|
|
|
FUNCTION_TEST_PARAM(MEM_CONTEXT, parentNew);
|
|
|
|
FUNCTION_TEST_END();
|
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
ASSERT(parentNew != NULL);
|
|
|
|
|
2018-07-19 16:04:20 -04:00
|
|
|
if (this != NULL)
|
|
|
|
memContextMove(this->memContext, parentNew);
|
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_TEST_RETURN(IO_BUFFER_WRITE, this);
|
2018-07-19 16:04:20 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************************************************************************
|
|
|
|
Get io interface
|
|
|
|
***********************************************************************************************************************************/
|
|
|
|
IoWrite *
|
|
|
|
ioBufferWriteIo(const IoBufferWrite *this)
|
|
|
|
{
|
|
|
|
FUNCTION_TEST_BEGIN();
|
|
|
|
FUNCTION_TEST_PARAM(IO_BUFFER_WRITE, this);
|
|
|
|
FUNCTION_TEST_END();
|
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
ASSERT(this != NULL);
|
|
|
|
|
|
|
|
FUNCTION_TEST_RETURN(IO_WRITE, this->io);
|
2018-07-19 16:04:20 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************************************************************************
|
|
|
|
Free the object
|
|
|
|
***********************************************************************************************************************************/
|
|
|
|
void
|
|
|
|
ioBufferWriteFree(IoBufferWrite *this)
|
|
|
|
{
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_LOG_BEGIN(logLevelTrace);
|
|
|
|
FUNCTION_LOG_PARAM(IO_BUFFER_WRITE, this);
|
|
|
|
FUNCTION_LOG_END();
|
2018-07-19 16:04:20 -04:00
|
|
|
|
|
|
|
if (this != NULL)
|
|
|
|
memContextFree(this->memContext);
|
|
|
|
|
2019-01-21 17:41:59 +02:00
|
|
|
FUNCTION_LOG_RETURN_VOID();
|
2018-07-19 16:04:20 -04:00
|
|
|
}
|