This commit is contained in:
aixianling
2025-01-09 17:45:40 +08:00
commit 5c9f1dae4a
3482 changed files with 1146531 additions and 0 deletions

View 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