TextInputStream support parse from buffer.

This commit is contained in:
hyzboy 2023-10-10 01:12:38 +08:00
parent 252f2f6a1f
commit 70b6567029
No known key found for this signature in database
GPG Key ID: 067EE4525D4FB6D3
2 changed files with 39 additions and 7 deletions

View File

@ -67,7 +67,7 @@ namespace hgl
InputStream *input_stream; ///<输入流
uint8 *buffer; ///<缓冲区
char *buffer; ///<缓冲区
int32 buffer_size; ///<缓冲区大小
int32 cur_buf_size; ///<当前缓冲区大小
@ -92,9 +92,13 @@ namespace hgl
public:
TextInputStream(InputStream *i,const int buf_size=HGL_SIZE_1MB);
TextInputStream(char *buf,const int buf_size);
virtual ~TextInputStream()
{
SAFE_CLEAR_ARRAY(buffer);
if(input_stream) //有input_stream证明是从流加载的需要删除临时缓冲区
{
SAFE_CLEAR_ARRAY(buffer);
}
}
void SetDefaultBOM(const ByteOrderMask &bo){default_bom=bo;} ///<设置缺省BOM头}

View File

@ -16,7 +16,7 @@ namespace hgl
else
buffer_size=stream_size;
buffer=new uint8[buffer_size];
buffer=new char[buffer_size];
cur_buf_size=0;
bom=ByteOrderMask::NONE;
@ -28,6 +28,26 @@ namespace hgl
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<u16char> *pc){callback_u16=pc;}
template<> void TextInputStream::SetParseCallback(ParseCallback<u32char> *pc){callback_u32=pc;}
@ -80,7 +100,7 @@ namespace hgl
int TextInputStream::TextBlockParse()
{
uint8 *p=buffer;
uint8 *p=(uint8 *)buffer;
if(stream_pos==0) //最开始那检测一下BOM头
{
@ -124,12 +144,20 @@ namespace hgl
int TextInputStream::Run()
{
if(!input_stream)return(-1);
if(!callback_u8
&&!callback_u16
&&!callback_u32)return(-2);
if(!input_stream)
{
if(buffer)
{
return TextBlockParse();
}
return(-1);
}
int64 read_size;
int result;