#include "ehs/Log.h" namespace ehs { void (*Log::logCb)(const Log&) = nullptr; Log Log::lastLog; void Log::SetCallback(void (*newLogCb)(const Log&)) { logCb = newLogCb; } void Log::Raise(const Log& log) { if (logCb) logCb(log); lastLog = log; } Log Log::GetLastLog() { Log result = lastLog; lastLog = Log(); return result; } Log::Log() : code(0) { } Log::Log(std::initializer_list tags, const UInt_64 code, const Str_8& msg) : tags(tags.size()), code(code), msg(msg) { UInt_64 i = 0; for (auto v = tags.begin(); v != tags.end(); ++v) this->tags[i++] = *v; } Log::Log(Array& tags, const UInt_64 code, const Str_8& msg) : tags(tags), code(code), msg(msg) { } Log::Log(const Log& log) : tags(log.tags), code(log.code), msg(log.msg) { } Log& Log::operator=(const Log& log) { if (this == &log) return *this; tags = log.tags; code = log.code; msg = log.msg; return *this; } /* bool Log::operator==(const Log log) { return src == log.src && type == log.type && code == log.code && msg == log.msg; } bool Log::operator!=(const Log log) { return src != log.src || type != log.type || code != log.code || msg != log.msg; } */ bool Log::HasTags(const std::initializer_list tags) const { UInt_64 i = 0; UInt_64 c = 0; for (auto v = tags.begin(); v != tags.end(); ++v) if (this->tags[i++].GetLower() == v->GetLower()) ++c; if (c == tags.size()) return true; return false; } bool Log::HasTags(const Array &tags) const { UInt_64 c = 0; for (UInt_64 i = 0; i < tags.Size(); ++i) if (this->tags[i].GetLower() == tags[c].GetLower()) ++c; if (c == tags.Size()) return true; return false; } bool Log::HasTag(const Str_8& tag) const { for (UInt_64 i = 0; i < tags.Size(); ++i) if (tags[i].GetLower() == tag.GetLower()) return true; return false; } Array Log::GetTags() const { return tags; } UInt_64 Log::GetCode() const { return code; } Str_8 Log::GetMsg() const { return msg; } Str_8 Log::ToStr() const { Str_8 result = "["; for (UInt_64 i = 0; i < tags.Size(); ++i) { result += tags[i]; if (i != tags.Size() - 1) result += ", "; } result += "](" + Str_8::FromNum(code) + "): " + msg; return result; } bool Log::IsValid() const { return tags.Size() && msg.Size(); } }