init
This commit is contained in:
293
Gateway/srvlib/include/data_packet_reader.hpp
Normal file
293
Gateway/srvlib/include/data_packet_reader.hpp
Normal file
@@ -0,0 +1,293 @@
|
||||
#ifndef _DATA_PACKET_READER_HPP_
|
||||
#define _DATA_PACKET_READER_HPP_
|
||||
|
||||
class DataPacketReader
|
||||
{
|
||||
public:
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* lpBuffer Ϊ<><CEAA><EFBFBD>ݶ<EFBFBD>ȡ<EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* dwSize Ҫ<><D2AA>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
* @return <09><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
|
||||
*/
|
||||
inline size_t readBuf(void* buf, size_t size)
|
||||
{
|
||||
size_t avaliable = data_end_ - offset_;
|
||||
|
||||
if (size > avaliable)
|
||||
size = avaliable;
|
||||
|
||||
if (size > 0)
|
||||
{
|
||||
memcpy(buf, offset_, size);
|
||||
offset_ += size;
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
/* <20><>ȡԭ<C8A1><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* bool,char,short,int,__int64,float,double,void*<2A><>Щ<EFBFBD><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>С<EFBFBD><D0A1>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ȡʣ<C8A1><CAA3><EFBFBD>IJ<EFBFBD><C4B2>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD>ո<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
*/
|
||||
template <typename T>
|
||||
inline T readAtom()
|
||||
{
|
||||
T val;
|
||||
size_t avaliable = data_end_ - offset_;
|
||||
|
||||
if (avaliable >= sizeof(T))
|
||||
{
|
||||
val = *(T*)offset_;
|
||||
offset_ += sizeof(T);
|
||||
}
|
||||
else if (avaliable > 0)
|
||||
{
|
||||
memset(&val, 0, sizeof(val));
|
||||
memcpy(&val, offset_, avaliable);
|
||||
offset_ += avaliable;
|
||||
}
|
||||
else memset(&val, 0, sizeof(val));
|
||||
|
||||
return val;
|
||||
}
|
||||
/* <20><>ȡANSI<53><49><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽΪ<CABD><CEAA>[2<>ֽ<EFBFBD><D6BD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>65536<33><36><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>0]
|
||||
* str <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* dwCharsToRead <20><>ʾstr<74><72><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD>str<74><72>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dwCharsToReadֵΪ0<CEAA><EFBFBD><F2B7B5BB><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><>remaks <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ڶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><F2B2BBBB><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡdwCharsToReadָ<64><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
||||
*/
|
||||
inline size_t readString(char* str, size_t read_len)
|
||||
{
|
||||
return rawReadStringLen<unsigned short>(str, read_len);
|
||||
}
|
||||
/* <20><>ȡUNICODE16<31><36><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽΪ<CABD><CEAA>[2<>ֽ<EFBFBD><D6BD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>65536<33><36><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>0]
|
||||
* str <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* dwCharsToRead <20><>ʾstr<74><72><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD>str<74><72>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dwCharsToReadֵΪ0<CEAA><EFBFBD><F2B7B5BB><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><>remaks <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ڶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><F2B2BBBB><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡdwCharsToReadָ<64><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
||||
*/
|
||||
|
||||
// <20><>ȡ<EFBFBD>ڴ<EFBFBD><DAB4>ռ<EFBFBD><D5BC>Ĵ<EFBFBD>С
|
||||
inline size_t getSize()
|
||||
{
|
||||
return end_ptr_ - mem_ptr_;
|
||||
}
|
||||
|
||||
/* <20><>ȡ<EFBFBD><C8A1>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD><DDB0>ĵ<EFBFBD>ǰ<EFBFBD><C7B0>Ч<EFBFBD><D0A7><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> */
|
||||
inline size_t getLength()
|
||||
{
|
||||
return data_end_ - mem_ptr_;
|
||||
}
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>дλ<D0B4><CEBB><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD> */
|
||||
inline size_t getPosition()
|
||||
{
|
||||
return offset_ - mem_ptr_;
|
||||
}
|
||||
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>дλ<D0B4><CEBB><EFBFBD>ֽ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD>ǰ<EFBFBD>ڴ<EFBFBD><DAB4>鳤<EFBFBD><E9B3A4>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>ڴ<EFBFBD><DAB4>鳤<EFBFBD><E9B3A4>
|
||||
*/
|
||||
inline size_t setPosition(size_t newPos)
|
||||
{
|
||||
size_t mem_size = end_ptr_ - mem_ptr_;
|
||||
|
||||
if (newPos > mem_size)
|
||||
newPos = mem_size;
|
||||
|
||||
offset_ = mem_ptr_ + newPos;
|
||||
return newPos;
|
||||
}
|
||||
/* <20><>ȡ<EFBFBD>Ե<EFBFBD>ǰ<EFBFBD><C7B0>дָ<D0B4>뿪ʼ<EBBFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ʣ<EFBFBD><CAA3><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD> */
|
||||
inline size_t getAvaliableLength()
|
||||
{
|
||||
return data_end_ - offset_;
|
||||
}
|
||||
/* <20><><EFBFBD>ڵ<EFBFBD>ǰ<EFBFBD><C7B0>дָ<D0B4><D6B8>ƫ<EFBFBD><C6AB>λ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>
|
||||
* nOffsetToAdjust Ҫ<><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ڴ濪ʼ<E6BFAA><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>ڴ淶Χ<E6B7B6><CEA7>
|
||||
*/
|
||||
inline size_t adjustOffset(int64_t adjust_offset)
|
||||
{
|
||||
offset_ += adjust_offset;
|
||||
|
||||
if (offset_ < mem_ptr_)
|
||||
offset_ = mem_ptr_;
|
||||
else if (offset_ > end_ptr_)
|
||||
offset_ = end_ptr_;
|
||||
|
||||
return offset_ - mem_ptr_;
|
||||
}
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ָ<EFBFBD><D6B8> */
|
||||
inline char* getMemoryPtr()
|
||||
{
|
||||
return mem_ptr_;
|
||||
}
|
||||
/* <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4>ĵ<EFBFBD>ǰƫ<C7B0><C6AB>ָ<EFBFBD><D6B8> */
|
||||
inline char* getOffsetPtr()
|
||||
{
|
||||
return offset_;
|
||||
}
|
||||
|
||||
//<2F><>ȡָ<C8A1><D6B8>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
inline char* getPositionPtr(size_t pos)
|
||||
{
|
||||
return mem_ptr_ + pos;
|
||||
}
|
||||
public:
|
||||
/* <20><>ȡԭ<C8A1><D4AD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
||||
template <typename T>
|
||||
inline DataPacketReader& operator >> (T& val)
|
||||
{
|
||||
if (sizeof(val) <= sizeof(int))
|
||||
val = readAtom<T>();
|
||||
else readBuf(&val, sizeof(val));
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
inline DataPacketReader& operator >> (const char*& str)
|
||||
{
|
||||
str = rawReadStringPtr<char, unsigned short>();
|
||||
return *this;
|
||||
}
|
||||
inline const char* readStringBuf()
|
||||
{
|
||||
return rawReadStringPtr<char, unsigned int>();
|
||||
}
|
||||
//inline DataPacketReader& operator >> (const wchar_t* &str)
|
||||
//{
|
||||
// str = rawReadStringPtr<wchar_t, unsigned short>();
|
||||
// return *this;
|
||||
//}
|
||||
public:
|
||||
DataPacketReader()
|
||||
{
|
||||
mem_ptr_ = end_ptr_ = offset_ = data_end_ = NULL;
|
||||
}
|
||||
DataPacketReader(void* buf, size_t size)
|
||||
{
|
||||
offset_ = mem_ptr_ = (char*)buf;
|
||||
end_ptr_ = data_end_ = mem_ptr_ + size;
|
||||
}
|
||||
|
||||
protected:
|
||||
/* <20><>ȡANSI/UNICODE16<31>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽΪ<CABD><CEAA>[2<>ֽ<EFBFBD><D6BD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>65536<33><36><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>0]
|
||||
* <TS> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>char*<2A><>wchar_t*
|
||||
* <TL> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6>ַ<EFBFBD><D6B7><EFBFBD>Ӧ<EFBFBD><D3A6>Ϊunsigned char<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>unsigned short
|
||||
* str <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* lenType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>
|
||||
* dwCharsToRead <20><>ʾstr<74><72><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD>str<74><72>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dwCharsToReadֵΪ0<CEAA><EFBFBD><F2B7B5BB><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><>remaks <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ڶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><F2B2BBBB><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡdwCharsToReadָ<64><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
||||
*/
|
||||
template <typename TL>
|
||||
size_t rawReadStringLen(char* str, size_t read_len)
|
||||
{
|
||||
assert(read_len > 0);
|
||||
|
||||
size_t avaliable = data_end_ - offset_;
|
||||
size_t rlen = 0;
|
||||
size_t str_len = 0;
|
||||
|
||||
if (avaliable >= 2)
|
||||
{
|
||||
TL* temp = (TL*)offset_;
|
||||
rlen = str_len = (size_t)(*temp);
|
||||
|
||||
if (read_len > 0)
|
||||
{
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
offset_ += 2;
|
||||
avaliable -= 2;
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>
|
||||
if (rlen > read_len)
|
||||
rlen = read_len;
|
||||
|
||||
if (rlen > avaliable)
|
||||
rlen = avaliable;
|
||||
|
||||
if (rlen > 0)
|
||||
readBuf(str, rlen);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>û<EFBFBD>ж<EFBFBD>ȡ<EFBFBD>IJ<EFBFBD><C4B2>֣<EFBFBD>
|
||||
//<2F>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
||||
if (str_len > rlen)
|
||||
offset_ += (str_len - rlen);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>0
|
||||
++offset_;
|
||||
|
||||
if (offset_ > data_end_) offset_ = data_end_; // offset<65><74><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>data_end<6E>ķ<EFBFBD>Χ
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rlen = 0;
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>
|
||||
if (rlen < read_len)
|
||||
{
|
||||
str[rlen] = 0;
|
||||
}
|
||||
else if (read_len > 0)
|
||||
{
|
||||
str[read_len - 1] = 0;
|
||||
}
|
||||
|
||||
return str_len;
|
||||
}
|
||||
/* <20><>ȡANSI/UNICODE16<31>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽΪ<CABD><CEAA>[2<>ֽ<EFBFBD><D6BD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>65536<33><36><EFBFBD><EFBFBD>][<5B>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD>0]
|
||||
* <TS> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>char<61><72>wchar_t
|
||||
* <TL> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6>ַ<EFBFBD><D6B7><EFBFBD>Ӧ<EFBFBD><D3A6>Ϊunsigned char<61><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>unsigned short
|
||||
* str <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
||||
* lenType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>
|
||||
* dwCharsToRead <20><>ʾstr<74><72><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݵ<EFBFBD>str<74><72>
|
||||
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>dwCharsToReadֵΪ0<CEAA><EFBFBD><F2B7B5BB><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD><D0B6>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><>remaks <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ڶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><F2B2BBBB><EFBFBD>str<74><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>dwCharsToRead<61>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡdwCharsToReadָ<64><D6B8><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
<20><><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD>ȡ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
|
||||
*/
|
||||
template <typename TS, typename TL>
|
||||
const TS* rawReadStringPtr()
|
||||
{
|
||||
size_t avaliable = data_end_ - offset_;
|
||||
size_t str_len = 0;
|
||||
|
||||
if (avaliable >= sizeof(TL) + sizeof(TS))
|
||||
{
|
||||
str_len = *((TL*)offset_);
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㹻<EFBFBD><E3B9BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿռ<DDBF>
|
||||
if (avaliable >= str_len + sizeof(TL) + sizeof(TS))
|
||||
{
|
||||
const TS* str = (TS*)(offset_ + sizeof(TL));
|
||||
offset_ += str_len * sizeof(TS) + sizeof(TL) + sizeof(TS);
|
||||
return str;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
protected:
|
||||
char* mem_ptr_; //<2F>ڴ<EFBFBD><DAB4><EFBFBD>ʼ<EFBFBD><CABC>ַ
|
||||
char* end_ptr_; //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>β<EFBFBD>ֽڵĺ<DAB5>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
|
||||
char* offset_; //<2F><>ǰ<EFBFBD><C7B0>дƫ<D0B4>Ƶ<EFBFBD>ַ
|
||||
char* data_end_; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3>Ƚ<EFBFBD><C8BD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user