TextInputStream support parse from buffer.
This commit is contained in:
parent
252f2f6a1f
commit
70b6567029
@ -67,7 +67,7 @@ namespace hgl
|
|||||||
|
|
||||||
InputStream *input_stream; ///<输入流
|
InputStream *input_stream; ///<输入流
|
||||||
|
|
||||||
uint8 *buffer; ///<缓冲区
|
char *buffer; ///<缓冲区
|
||||||
int32 buffer_size; ///<缓冲区大小
|
int32 buffer_size; ///<缓冲区大小
|
||||||
int32 cur_buf_size; ///<当前缓冲区大小
|
int32 cur_buf_size; ///<当前缓冲区大小
|
||||||
|
|
||||||
@ -92,9 +92,13 @@ namespace hgl
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
TextInputStream(InputStream *i,const int buf_size=HGL_SIZE_1MB);
|
TextInputStream(InputStream *i,const int buf_size=HGL_SIZE_1MB);
|
||||||
|
TextInputStream(char *buf,const int buf_size);
|
||||||
virtual ~TextInputStream()
|
virtual ~TextInputStream()
|
||||||
{
|
{
|
||||||
SAFE_CLEAR_ARRAY(buffer);
|
if(input_stream) //有input_stream证明是从流加载的,需要删除临时缓冲区
|
||||||
|
{
|
||||||
|
SAFE_CLEAR_ARRAY(buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetDefaultBOM(const ByteOrderMask &bo){default_bom=bo;} ///<设置缺省BOM头}
|
void SetDefaultBOM(const ByteOrderMask &bo){default_bom=bo;} ///<设置缺省BOM头}
|
||||||
|
@ -16,7 +16,7 @@ namespace hgl
|
|||||||
else
|
else
|
||||||
buffer_size=stream_size;
|
buffer_size=stream_size;
|
||||||
|
|
||||||
buffer=new uint8[buffer_size];
|
buffer=new char[buffer_size];
|
||||||
cur_buf_size=0;
|
cur_buf_size=0;
|
||||||
|
|
||||||
bom=ByteOrderMask::NONE;
|
bom=ByteOrderMask::NONE;
|
||||||
@ -28,6 +28,26 @@ namespace hgl
|
|||||||
event_callback=nullptr;
|
event_callback=nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TextInputStream::TextInputStream(char *buf,const int buf_size)
|
||||||
|
{
|
||||||
|
input_stream=nullptr;
|
||||||
|
|
||||||
|
stream_pos=0;
|
||||||
|
stream_size=0;
|
||||||
|
|
||||||
|
buffer=buf;
|
||||||
|
buffer_size=buf_size;
|
||||||
|
cur_buf_size=buf_size;
|
||||||
|
|
||||||
|
bom=ByteOrderMask::NONE;
|
||||||
|
default_bom=ByteOrderMask::UTF8;
|
||||||
|
|
||||||
|
callback_u8=nullptr;
|
||||||
|
callback_u16=nullptr;
|
||||||
|
callback_u32=nullptr;
|
||||||
|
event_callback=nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
template<> void TextInputStream::SetParseCallback(ParseCallback<char> *pc){callback_u8=pc;}
|
template<> void TextInputStream::SetParseCallback(ParseCallback<char> *pc){callback_u8=pc;}
|
||||||
template<> void TextInputStream::SetParseCallback(ParseCallback<u16char> *pc){callback_u16=pc;}
|
template<> void TextInputStream::SetParseCallback(ParseCallback<u16char> *pc){callback_u16=pc;}
|
||||||
template<> void TextInputStream::SetParseCallback(ParseCallback<u32char> *pc){callback_u32=pc;}
|
template<> void TextInputStream::SetParseCallback(ParseCallback<u32char> *pc){callback_u32=pc;}
|
||||||
@ -80,7 +100,7 @@ namespace hgl
|
|||||||
|
|
||||||
int TextInputStream::TextBlockParse()
|
int TextInputStream::TextBlockParse()
|
||||||
{
|
{
|
||||||
uint8 *p=buffer;
|
uint8 *p=(uint8 *)buffer;
|
||||||
|
|
||||||
if(stream_pos==0) //最开始,那检测一下BOM头
|
if(stream_pos==0) //最开始,那检测一下BOM头
|
||||||
{
|
{
|
||||||
@ -124,11 +144,19 @@ namespace hgl
|
|||||||
|
|
||||||
int TextInputStream::Run()
|
int TextInputStream::Run()
|
||||||
{
|
{
|
||||||
if(!input_stream)return(-1);
|
|
||||||
|
|
||||||
if(!callback_u8
|
if(!callback_u8
|
||||||
&&!callback_u16
|
&&!callback_u16
|
||||||
&&!callback_u32)return(-2);
|
&&!callback_u32)return(-2);
|
||||||
|
|
||||||
|
if(!input_stream)
|
||||||
|
{
|
||||||
|
if(buffer)
|
||||||
|
{
|
||||||
|
return TextBlockParse();
|
||||||
|
}
|
||||||
|
|
||||||
|
return(-1);
|
||||||
|
}
|
||||||
|
|
||||||
int64 read_size;
|
int64 read_size;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user