code_app/modules/base/HGBuffer.cpp

149 lines
2.8 KiB
C++

#include "HGBuffer.h"
#include "HGInc.h"
struct HGBufferImpl
{
HGBufferImpl()
{
m_data = NULL;
m_size = 0;
m_alloc = HGFALSE;
}
~HGBufferImpl()
{
if (m_alloc)
{
free(m_data);
m_data = NULL;
}
}
HGByte* m_data;
HGUSize m_size;
HGBool m_alloc;
};
HGResult HGAPI HGBase_CreateBuffer(HGUSize size, HGBuffer* buffer)
{
if (0 == size || NULL == buffer)
{
return HGBASE_ERR_INVALIDARG;
}
HGByte* data = (HGByte*)malloc(size);
if (NULL == data)
{
return HGBASE_ERR_OUTOFMEMORY;
}
HGBufferImpl* bufferImpl = new HGBufferImpl;
bufferImpl->m_data = data;
bufferImpl->m_size = size;
bufferImpl->m_alloc = HGTRUE;
*buffer = (HGBuffer)bufferImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_CreateBufferFromData(const HGByte* data, HGUSize size, HGBuffer* buffer)
{
if (NULL == data || 0 == size || NULL == buffer)
{
return HGBASE_ERR_INVALIDARG;
}
HGByte* data2 = (HGByte*)malloc(size);
if (NULL == data2)
{
return HGBASE_ERR_OUTOFMEMORY;
}
memcpy(data2, data, size);
HGBufferImpl* bufferImpl = new HGBufferImpl;
bufferImpl->m_data = data2;
bufferImpl->m_size = size;
bufferImpl->m_alloc = HGTRUE;
*buffer = (HGBuffer)bufferImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_CreateBufferWithData(HGByte* data, HGUSize size, HGBuffer* buffer)
{
if (NULL == data || 0 == size || NULL == buffer)
{
return HGBASE_ERR_INVALIDARG;
}
HGBufferImpl* bufferImpl = new HGBufferImpl;
bufferImpl->m_data = data;
bufferImpl->m_size = size;
bufferImpl->m_alloc = HGFALSE;
*buffer = (HGBuffer)bufferImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_CloneBuffer(HGBuffer srcBuffer, HGBuffer* buffer)
{
if (NULL == srcBuffer || NULL == buffer)
{
return HGBASE_ERR_INVALIDARG;
}
HGBufferImpl* srcBufferImpl = (HGBufferImpl*)srcBuffer;
HGByte* data = (HGByte*)malloc(srcBufferImpl->m_size);
if (NULL == data)
{
return HGBASE_ERR_OUTOFMEMORY;
}
memcpy(data, srcBufferImpl->m_data, srcBufferImpl->m_size);
HGBufferImpl* bufferImpl = new HGBufferImpl;
bufferImpl->m_data = data;
bufferImpl->m_size = srcBufferImpl->m_size;
bufferImpl->m_alloc = HGTRUE;
*buffer = (HGBuffer)bufferImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_DestroyBuffer(HGBuffer buffer)
{
if (NULL == buffer)
{
return HGBASE_ERR_INVALIDARG;
}
HGBufferImpl* bufferImpl = (HGBufferImpl*)buffer;
delete bufferImpl;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_GetBufferData(HGBuffer buffer, HGByte** data)
{
if (NULL == buffer || NULL == data)
{
return HGBASE_ERR_INVALIDARG;
}
HGBufferImpl* bufferImpl = (HGBufferImpl*)buffer;
*data = bufferImpl->m_data;
return HGBASE_ERR_OK;
}
HGResult HGAPI HGBase_GetBufferSize(HGBuffer buffer, HGUSize* size)
{
if (NULL == buffer || NULL == size)
{
return HGBASE_ERR_INVALIDARG;
}
HGBufferImpl* bufferImpl = (HGBufferImpl*)buffer;
*size = bufferImpl->m_size;
return HGBASE_ERR_OK;
}