void LLBC_LogTagToken::Format(const LLBC_LogData &data, LLBC_String &formattedData) const { int index = static_cast<int>(formattedData.size()); if (data.tagLen) formattedData.append(data.others + data.tagBeg, data.tagLen); LLBC_LogFormattingInfo *formatter = GetFormatter(); formatter->Format(formattedData, index); }
void LLBC_LogThreadIdToken::Format(const LLBC_LogData &data, LLBC_String &formattedData) const { int index = static_cast<int>(formattedData.size()); #if LLBC_TARGET_PLATFORM_LINUX formattedData.append(LLBC_Num2Str((uint32)(data.threadHandle))); #elif LLBC_TARGET_PLATFORM_WIN32 formattedData.append(LLBC_Num2Str((uint32)(data.threadHandle))); #elif LLBC_TARGET_PLATFORM_IPHONE formattedData.append(LLBC_Ptr2Str(data.threadHandle)); #elif LLBC_TARGET_PLATFORM_MAC formattedData.append(LLBC_Ptr2Str(data.threadHandle)); #elif LLBC_TARGET_PLATFORM_ANDROID formattedData.append(LLBC_Ptr2Str(data.threadHandle)); #endif LLBC_LogFormattingInfo *formatter = this->GetFormatter(); formatter->Format(formattedData, index); }
int LLBC_LogTokenChain::Build(const LLBC_String &pattern) { if (_head) { LLBC_SetLastError(LLBC_ERROR_REENTRY); return LLBC_RTN_FAILED; } char ch = '\0'; const char *curPattern = NULL; LLBC_String::size_type patternLength = 0; int state = LLBC_INTERNAL_NS __g_literal_state; LLBC_ILogToken *token = NULL; LLBC_LogFormattingInfo *formatter = NULL; LLBC_String buf; if (pattern.empty()) { curPattern = LLBC_INTERNAL_NS __g_default_pattern; patternLength = LLBC_StrLenA(LLBC_INTERNAL_NS __g_default_pattern); } else { curPattern = pattern.data(); patternLength = pattern.size(); } for (size_t i = 0; i < patternLength;) { ch = curPattern[i ++]; switch(state) { case LLBC_INTERNAL_NS __g_literal_state: if (i == patternLength) { buf.append(1, ch); break; } if (ch == LLBC_LogTokenType::EscapeToken) { if (curPattern[i] == LLBC_LogTokenType::EscapeToken) { buf.append(1, ch); i ++; } else { if (!buf.empty()) { token = LLBC_LogTokenBuilderSingleton->BuildLogToken(LLBC_LogTokenType::StrToken); token->Initialize(formatter, buf); this->AppendToken(token); buf.clear(); formatter = NULL; } buf.append(1, ch); LLBC_XDelete(formatter); state = LLBC_INTERNAL_NS __g_converter_state; } } else { buf.append(1, ch); } break; case LLBC_INTERNAL_NS __g_converter_state: buf.append(1, ch); if ((ch >= 0x30 && ch <= 0x39) || ch == '-') { state = LLBC_INTERNAL_NS __g_number_state; break; } buf.erase(buf.rfind(LLBC_LogTokenType::EscapeToken)); token = LLBC_LogTokenBuilderSingleton->BuildLogToken(ch); if (!formatter) { formatter = new LLBC_LogFormattingInfo; } token->Initialize(formatter, ""); this->AppendToken(token); formatter = NULL; state = LLBC_INTERNAL_NS __g_literal_state; break; case LLBC_INTERNAL_NS __g_number_state: if ((ch < 0x30 || ch > 0x39) && ch != '-') { int minLength = LLBC_Str2Int32(&buf[buf.rfind(LLBC_LogTokenType::EscapeToken) + 1]); if (!formatter) { formatter = new LLBC_LogFormattingInfo(minLength < 0 ? true : false, ::abs(minLength), INT_MAX); } else { formatter->SetLeftAligh(minLength < 0 ? true : false); formatter->SetMinLen(minLength); formatter->SetMaxLen(INT_MAX); } i --; state = LLBC_INTERNAL_NS __g_converter_state; break; } buf.append(1, ch); break; default: LLBC_XDelete(formatter); this->Cleanup(); LLBC_SetLastError(LLBC_ERROR_FORMAT); return LLBC_RTN_FAILED; break; } } if (!buf.empty()) { token = LLBC_LogTokenBuilderSingleton->BuildLogToken(LLBC_LogTokenType::StrToken); token->Initialize(NULL, buf); this->AppendToken(token); } return LLBC_RTN_OK; }