From 7c69cfff60cceb41760513ea4c5fbf78053012e3 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 11 Sep 2020 18:51:36 +0800 Subject: [PATCH] use "enum class" in ByteOrderMask --- inc/hgl/Endian.h | 39 +++++++++++++++++++---------------- inc/hgl/io/TextOutputStream.h | 10 ++++----- inc/hgl/type/StringList.h | 24 ++++++++++----------- src/IO/TextOutputStream.cpp | 18 ++++++++-------- src/Text/CodePage.cpp | 6 +++--- 5 files changed, 50 insertions(+), 47 deletions(-) diff --git a/inc/hgl/Endian.h b/inc/hgl/Endian.h index e31feea..64ad774 100644 --- a/inc/hgl/Endian.h +++ b/inc/hgl/Endian.h @@ -2,6 +2,7 @@ #define HGL_ENDIAN_INCLUDE #include // 平台定义 +#include namespace hgl { namespace endian @@ -47,15 +48,16 @@ namespace hgl /** * 字节序类型枚举 */ - enum ByteOrderMask + enum class ByteOrderMask { - bomNone=0, - bomUTF8, - bomUTF16LE, - bomUTF16BE, - bomUTF32LE, - bomUTF32BE, - bomEnd + NONE=0, + UTF8, + UTF16LE, + UTF16BE, + UTF32LE, + UTF32BE, + + ENUM_CLASS_RANGE(UTF8,UTF32BE) }; constexpr uint CharSetNameLength=32; ///<字符集名称长度 @@ -95,25 +97,26 @@ namespace hgl /** * 字节序文件头定义 */ - constexpr BOMFileHeader BOMData[bomEnd]= + constexpr BOMFileHeader BOMData[size_t(ByteOrderMask::RANGE_SIZE)]= { - {0,{} ,bomNone, nullptr ,ccpNone }, - {3,{0xEF,0xBB,0xBF} ,bomUTF8, &utf8_charset ,ccpUTF8 }, - {2,{0xFF,0xFE} ,bomUTF16LE,&utf16le_charset ,ccpUTF16LE }, - {2,{0xFE,0xFF} ,bomUTF16BE,&utf16be_charset ,ccpUTF16BE }, - {4,{0xFF,0xFE,0x00,0x00},bomUTF32LE,&utf32le_charset ,ccpUTF32LE }, - {4,{0x00,0x00,0xFE,0xFF},bomUTF32BE,&utf32be_charset ,ccpUTF32BE } + {3,{0xEF,0xBB,0xBF} ,ByteOrderMask::UTF8, &utf8_charset ,ccpUTF8 }, + {2,{0xFF,0xFE} ,ByteOrderMask::UTF16LE,&utf16le_charset ,ccpUTF16LE }, + {2,{0xFE,0xFF} ,ByteOrderMask::UTF16BE,&utf16be_charset ,ccpUTF16BE }, + {4,{0xFF,0xFE,0x00,0x00},ByteOrderMask::UTF32LE,&utf32le_charset ,ccpUTF32LE }, + {4,{0x00,0x00,0xFE,0xFF},ByteOrderMask::UTF32BE,&utf32be_charset ,ccpUTF32BE } }; inline ByteOrderMask CheckBOM(const void *data) { - for(uint i=bomNone+1;idata,bom->size)==0) return (ByteOrderMask)i; } - return bomNone; + return ByteOrderMask::NONE; } template diff --git a/inc/hgl/io/TextOutputStream.h b/inc/hgl/io/TextOutputStream.h index 4b4e6c0..fb6cb26 100644 --- a/inc/hgl/io/TextOutputStream.h +++ b/inc/hgl/io/TextOutputStream.h @@ -50,7 +50,7 @@ namespace hgl { if(!out)return(false); - const BOMFileHeader *bom_item=BOMData+bom; + const BOMFileHeader *bom_item=BOMData+int(bom)-int(ByteOrderMask::BEGIN_RANGE); return(out->Write(bom_item->data,bom_item->size)==bom_item->size); } @@ -59,7 +59,7 @@ namespace hgl virtual bool WriteChars(const u16char *,int64)=0; ///<写入一个字符串 template - bool WriteString(const String &str) ///<写入一个字符串 + bool WriteString(const String &str) ///<写入一个字符串 { return WriteChars(str.c_str(),str.Length()); } @@ -166,9 +166,9 @@ namespace hgl bool WriteChars(const u16char *,int64); ///<写入一个字符串 };//template class EndianTextOutputStream - typedef EndianTextOutputStream UTF8TextOutputStream; - typedef EndianTextOutputStream UTF16LETextOutputStream; - typedef EndianTextOutputStream UTF16BETextOutputStream; + typedef EndianTextOutputStream UTF8TextOutputStream; + typedef EndianTextOutputStream UTF16LETextOutputStream; + typedef EndianTextOutputStream UTF16BETextOutputStream; template TextOutputStream *CreateTextOutputStream(OutputStream *os); }//namespace io diff --git a/inc/hgl/type/StringList.h b/inc/hgl/type/StringList.h index 8047f85..088b85b 100644 --- a/inc/hgl/type/StringList.h +++ b/inc/hgl/type/StringList.h @@ -628,7 +628,7 @@ namespace hgl bool ReadString(io::DataInputStream *dis,T &str); }; - template struct ReadStringFromDIS + template struct ReadStringFromDIS { bool ReadString(io::DataInputStream *dis,T &str) { @@ -636,7 +636,7 @@ namespace hgl } }; - template struct ReadStringFromDIS + template struct ReadStringFromDIS { bool ReadString(io::DataInputStream *dis,T &str) { @@ -644,7 +644,7 @@ namespace hgl } }; - template struct ReadStringFromDIS + template struct ReadStringFromDIS { bool ReadString(io::DataInputStream *dis,T &str) { @@ -684,9 +684,9 @@ namespace hgl return(result); }//int LoadStringList - inline int LoadUTF8StringList (UTF8StringList & sl,io::DataInputStream *dis){return LoadStringList(sl,dis);} - inline int LoadUTF16LEStringList (UTF16StringList & sl,io::DataInputStream *dis){return LoadStringList(sl,dis);} - inline int LoadUTF16BEStringList (UTF16StringList & sl,io::DataInputStream *dis){return LoadStringList(sl,dis);} + inline int LoadUTF8StringList (UTF8StringList & sl,io::DataInputStream *dis){return LoadStringList(sl,dis);} + inline int LoadUTF16LEStringList (UTF16StringList & sl,io::DataInputStream *dis){return LoadStringList(sl,dis);} + inline int LoadUTF16BEStringList (UTF16StringList & sl,io::DataInputStream *dis){return LoadStringList(sl,dis);} int LoadStringFromText(UTF8String &str,const void *data,const int size,const CharSet &default_charset=UTF8CharSet); ///<从文件加载一个文本块到UTF8StringList int LoadStringFromText(UTF16String &str,const void *data,const int size,const CharSet &default_charset=UTF8CharSet); ///<从文件加载一个文本块到UTF16StringList @@ -703,7 +703,7 @@ namespace hgl bool WriteString(io::DataOutputStream *dos,const T &str); }; - template struct WriteStringToDOS + template struct WriteStringToDOS { bool WriteString(io::DataOutputStream *dos,const T &str) { @@ -711,7 +711,7 @@ namespace hgl } }; - template struct WriteStringToDOS + template struct WriteStringToDOS { bool WriteString(io::DataOutputStream *dos,const T &str) { @@ -719,7 +719,7 @@ namespace hgl } }; - template struct WriteStringToDOS + template struct WriteStringToDOS { bool WriteString(io::DataOutputStream *dos,const T &str) { @@ -750,17 +750,17 @@ namespace hgl template int SaveUTF8StringList(io::DataOutputStream *dos,const StringList &sl) { - return WriteStringList(dos,sl); + return WriteStringList(dos,sl); } template int SaveUTF16LEStringList(io::DataOutputStream *dos,const StringList &sl) { - return WriteStringList(dos,sl); + return WriteStringList(dos,sl); } template int SaveUTF16BEStringList(io::DataOutputStream *dos,const StringList &sl) { - return WriteStringList(dos,sl); + return WriteStringList(dos,sl); } }//namespace hgl #endif//HGL_STRINGLIST_INCLUDE diff --git a/src/IO/TextOutputStream.cpp b/src/IO/TextOutputStream.cpp index cca0efe..b4b2db6 100644 --- a/src/IO/TextOutputStream.cpp +++ b/src/IO/TextOutputStream.cpp @@ -4,9 +4,9 @@ namespace hgl { namespace io { - template<> EndianTextOutputStream::EndianTextOutputStream(OutputStream *os):TextOutputStream(bomUTF8,new DirectDataOutputStream(os)){} - template<> EndianTextOutputStream::EndianTextOutputStream(OutputStream *os):TextOutputStream(bomUTF16LE,new LEDataOutputStream(os)){} - template<> EndianTextOutputStream::EndianTextOutputStream(OutputStream *os):TextOutputStream(bomUTF16BE,new BEDataOutputStream(os)){} + template<> EndianTextOutputStream::EndianTextOutputStream(OutputStream *os):TextOutputStream(ByteOrderMask::UTF8,new DirectDataOutputStream(os)){} + template<> EndianTextOutputStream::EndianTextOutputStream(OutputStream *os):TextOutputStream(ByteOrderMask::UTF16LE,new LEDataOutputStream(os)){} + template<> EndianTextOutputStream::EndianTextOutputStream(OutputStream *os):TextOutputStream(ByteOrderMask::UTF16BE,new BEDataOutputStream(os)){} template<> TextOutputStream *CreateTextOutputStream(OutputStream *os){return(new UTF8TextOutputStream(os));} template<> TextOutputStream *CreateTextOutputStream(OutputStream *os){return(new UTF16LETextOutputStream(os));} @@ -14,32 +14,32 @@ namespace hgl namespace io //WriteChars函数 { - template<> bool EndianTextOutputStream::WriteChars(const u8char *str,int64 size) + template<> bool EndianTextOutputStream::WriteChars(const u8char *str,int64 size) { return out?out->WriteUTF8Chars(str,size):false; } - template<> bool EndianTextOutputStream::WriteChars(const u16char *str,int64 size) + template<> bool EndianTextOutputStream::WriteChars(const u16char *str,int64 size) { return out?out->WriteUTF8Chars(str,size):false; } - template<> bool EndianTextOutputStream::WriteChars(const u8char *str,int64 size) + template<> bool EndianTextOutputStream::WriteChars(const u8char *str,int64 size) { return out?out->WriteUTF16LEChars(str,size):false; } - template<> bool EndianTextOutputStream::WriteChars(const u16char *str,int64 size) + template<> bool EndianTextOutputStream::WriteChars(const u16char *str,int64 size) { return out?out->WriteUTF16LEChars(str,size):false; } - template<> bool EndianTextOutputStream::WriteChars(const u8char *str,int64 size) + template<> bool EndianTextOutputStream::WriteChars(const u8char *str,int64 size) { return out?out->WriteUTF16BEChars(str,size):false; } - template<> bool EndianTextOutputStream::WriteChars(const u16char *str,int64 size) + template<> bool EndianTextOutputStream::WriteChars(const u16char *str,int64 size) { return out?out->WriteUTF16BEChars(str,size):false; } diff --git a/src/Text/CodePage.cpp b/src/Text/CodePage.cpp index 33e1bb8..5327753 100644 --- a/src/Text/CodePage.cpp +++ b/src/Text/CodePage.cpp @@ -234,9 +234,9 @@ namespace hgl { if(!input)return(nullptr); - const BOMFileHeader *bfh=BOMData+bomUTF8; + const BOMFileHeader *bfh=BOMData+(uint)ByteOrderMask::UTF8; - for(uint i=bomUTF8;idata,bfh->size)==0) return bfh; @@ -258,7 +258,7 @@ namespace hgl if(!cs)return(false); if(!bom)return(false); - if(bom->bom<=bomNone||bom->bom>=bomEnd)return(false); + if(!RangeCheck(bom->bom))return(false); cs->codepage=bom->code_page; memcpy(cs->charset,bom->char_set,sizeof(CharSetName));