149 lines
2.8 KiB
C++
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;
|
|||
|
}
|