diff --git a/inc/hgl/log/Log.h b/inc/hgl/log/Log.h new file mode 100644 index 0000000..691f8c8 --- /dev/null +++ b/inc/hgl/log/Log.h @@ -0,0 +1,72 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +namespace hgl +{ + constexpr const size_t LOG_TMP_BUFFER_SIZE=4096; + + /** + * Android风格的日志输出类 + */ + class LogOutput + { + char tmp_fmt [LOG_TMP_BUFFER_SIZE]; + u8char tmp_fmt_u8 [LOG_TMP_BUFFER_SIZE]; + u16char tmp_fmt_u16 [LOG_TMP_BUFFER_SIZE]; + + public: + + LogOutput()=default; + virtual ~LogOutput()=default; + + public: + + void output(LogLevel level,const char * str,const int len){logger::Log(level,(u8char *)str,len);} + void output(LogLevel level,const u8char * str,const int len){logger::Log(level,(u8char *)str,len);} + void output(LogLevel level,const u16char * str,const int len){logger::Log(level,(u16char *)str,len);} + + #define DEFINE_LOG_OUTPUT_CHAR(ch,level) \ + \ + void ch(const char * str,const int len ){output(LogLevel::level, str,len);} \ + void ch(const char * str ){ch(str,strlen(str));} \ + void ch(const AnsiString & str ){ch(str.c_str(),str.GetLength());} \ + void ch(const AnsiStringView & sv ){ch(sv.c_str(),sv.GetLength());} + + #define DEFINE_LOG_OUTPUT_CHAR8(ch,level) \ + \ + void ch(const u8char * str,const int len ){output(LogLevel::level, str,len);} \ + void ch(const u8char * str ){ch(str,strlen(str));} \ + void ch(const U8String & str ){ch(str.c_str(),str.GetLength());} \ + void ch(const U8StringView &sv ){ch(sv.c_str(),sv.GetLength());} + + #define DEFINE_LOG_OUTPUT_CHAR16(ch,level) \ + \ + void ch(const u16char * str,const int len ){output(LogLevel::level, str,len);} \ + void ch(const u16char * str ){ch(str,strlen(str));} \ + void ch(const U16String & str ){ch(str.c_str(),str.GetLength());} \ + void ch(const U16StringView &sv ){ch(sv.c_str(),sv.GetLength());} + + #ifdef HGL_SUPPORT_CHAR8_T + #define DEFINE_LOG_OUTPUT(ch,level) DEFINE_LOG_OUTPUT_CHAR(ch,level) \ + DEFINE_LOG_OUTPUT_CHAR8(ch,level) \ + DEFINE_LOG_OUTPUT_CHAR16(ch,level) + #else + #define DEFINE_LOG_OUTPUT(ch,level) DEFINE_LOG_OUTPUT_CHAR(ch,level) \ + DEFINE_LOG_OUTPUT_CHAR16(ch,level) + #endif//HGL_SUPPORT_CHAR8_T + + DEFINE_LOG_OUTPUT(v,Verbose) + DEFINE_LOG_OUTPUT(i,Info) + DEFINE_LOG_OUTPUT(h,Hint) + DEFINE_LOG_OUTPUT(w,Warning) + DEFINE_LOG_OUTPUT(e,Error) + DEFINE_LOG_OUTPUT(fe,FatalError) + };//class LogOutput +}//namespace hgl diff --git a/inc/hgl/log/LogInfo.h b/inc/hgl/log/LogInfo.h index 3f398b5..2440d24 100644 --- a/inc/hgl/log/LogInfo.h +++ b/inc/hgl/log/LogInfo.h @@ -4,21 +4,12 @@ #include #include #include +#include namespace hgl { namespace logger - { - enum class LogLevel - { - Verbose, - Info, - Hint, - Warning, - Error, - FatalError, - };//enum class LogLevel - + { bool InitLogger(const OSString &app_name); void Log(LogLevel level,const u16char *str,int size); diff --git a/inc/hgl/log/LogLevel.h b/inc/hgl/log/LogLevel.h new file mode 100644 index 0000000..7bfe830 --- /dev/null +++ b/inc/hgl/log/LogLevel.h @@ -0,0 +1,14 @@ +#pragma once + +namespace hgl +{ + enum class LogLevel + { + Verbose, + Info, + Hint, + Warning, + Error, + FatalError, + };//enum class LogLevel +}//namespace hgl diff --git a/inc/hgl/type/StringView.h b/inc/hgl/type/StringView.h index 2fb7db4..bb6e688 100644 --- a/inc/hgl/type/StringView.h +++ b/inc/hgl/type/StringView.h @@ -46,7 +46,9 @@ namespace hgl ~StringView()=default; - const char *c_str()const{return str_data;} + operator const T *()const{return str_data;} + + const T *c_str()const{return str_data;} const int length()const{return str_length;} const int GetLength()const{return str_length;}