142 lines
3.3 KiB
C++
142 lines
3.3 KiB
C++
/**
|
|
@file JsBlob.h
|
|
@brief
|
|
@author James
|
|
@version 1.0
|
|
@date 2017_11_28
|
|
*/
|
|
|
|
#ifndef __JsBlob_H__
|
|
#define __JsBlob_H__
|
|
|
|
#include "../JSInterface/JSInterface.h"
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
namespace laya
|
|
{
|
|
class JsBlob : public JsObjBase, public JSObjNode
|
|
{
|
|
public:
|
|
JsBlob()
|
|
{
|
|
m_pBuffer = 0;
|
|
m_i64Size = 0;
|
|
m_pszType = 0;
|
|
SetType("text/plain");
|
|
}
|
|
JsBlob(void *p_pData, size_t p_iSize, const char *p_pszType = 0)
|
|
{
|
|
m_pBuffer = 0;
|
|
m_i64Size = 0;
|
|
m_pszType = 0;
|
|
SetData(p_pData, p_iSize);
|
|
SetType(p_pszType);
|
|
if (0 == m_pszType) SetType("text/plain");
|
|
}
|
|
~JsBlob()
|
|
{
|
|
if (0 != m_pBuffer)
|
|
{
|
|
delete[] m_pBuffer;
|
|
m_pBuffer = 0;
|
|
}
|
|
if (0 != m_pszType)
|
|
{
|
|
delete[] m_pszType;
|
|
m_pszType = 0;
|
|
}
|
|
}
|
|
uint64_t GetSize()
|
|
{
|
|
return m_i64Size;
|
|
}
|
|
void close()
|
|
{
|
|
SetData(0, 0);
|
|
}
|
|
void Allocate(size_t p_iSize)
|
|
{
|
|
if (0 != m_pBuffer)
|
|
{
|
|
delete[] m_pBuffer;
|
|
m_pBuffer = 0;
|
|
}
|
|
m_i64Size = 0;
|
|
|
|
if (p_iSize > 0)
|
|
{
|
|
m_pBuffer = new char[p_iSize];
|
|
m_i64Size = p_iSize;
|
|
}
|
|
}
|
|
void SetData(const void *p_pData, size_t p_iLen)
|
|
{
|
|
if (0 != m_pBuffer)
|
|
{
|
|
delete[] m_pBuffer;
|
|
m_pBuffer = 0;
|
|
}
|
|
m_i64Size = 0;
|
|
if (0 != p_pData && 0 != p_iLen)
|
|
{
|
|
m_pBuffer = new char[p_iLen];
|
|
memcpy(m_pBuffer, p_pData, p_iLen);
|
|
m_i64Size = p_iLen;
|
|
}
|
|
}
|
|
JsValue slice(uint64_t p_iBegin = 0, uint64_t p_iEnd = -1)
|
|
{
|
|
return JSP_TO_JS_NULL;
|
|
}
|
|
const char *GetType()
|
|
{
|
|
return (0 == m_pszType) ? "" : m_pszType;
|
|
}
|
|
void SetType(const char *p_pszType)
|
|
{
|
|
if (0 != m_pszType)
|
|
{
|
|
delete[] m_pszType;
|
|
m_pszType = 0;
|
|
}
|
|
size_t len;
|
|
if (0 != p_pszType && 0 != (len = strlen(p_pszType)))
|
|
{
|
|
m_pszType = new char[len + 1];
|
|
memcpy(m_pszType, p_pszType, len + 1);
|
|
JsBlob::ToLowerString(m_pszType);
|
|
}
|
|
}
|
|
protected:
|
|
|
|
static char *ToLowerString(char *p_pszStr)
|
|
{
|
|
static const char __cdis = 'a' - 'A';
|
|
|
|
char *pBegin = p_pszStr;
|
|
for (; 0 != *pBegin; pBegin++)
|
|
{
|
|
if (*pBegin >= 'A' && *pBegin <= 'Z')
|
|
*pBegin += __cdis;
|
|
}
|
|
return p_pszStr;
|
|
}
|
|
|
|
public:
|
|
|
|
static JsObjClassInfo JSCLSINFO;
|
|
friend class JsFileReader;
|
|
|
|
protected:
|
|
char* m_pBuffer;
|
|
uint64_t m_i64Size;
|
|
char* m_pszType;
|
|
};
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
#endif //__JsBlob_H__
|
|
|
|
//-----------------------------END FILE--------------------------------
|