From 26b7e5ad9edebfce0cbb51a5ba606bb0b334ad2d Mon Sep 17 00:00:00 2001 From: x12xx12x <44411062+12xx12@users.noreply.github.com> Date: Mon, 29 May 2023 16:31:18 +0200 Subject: Add Class and Function Identifier Macro (#5481) This adds a Macro which simply identifies the function and class name for error messages. Examples taken from the MojangAPI class [Choosen because I worked on that] processing is done during compile time. Should be cross compatible --- src/Globals.h | 12 ++++++++++++ src/Protocol/MojangAPI.cpp | 6 +++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Globals.h b/src/Globals.h index 93a24120d..e4dbe97d6 100644 --- a/src/Globals.h +++ b/src/Globals.h @@ -387,9 +387,21 @@ auto ToUnsigned(T a_Val) return static_cast>(a_Val); } +// https://stackoverflow.com/questions/1666802/is-there-a-class-macro-in-c +constexpr std::string_view methodName(std::string_view a_PrettyFunction) +{ + size_t Bracket = a_PrettyFunction.rfind("("); + size_t Space = a_PrettyFunction.rfind(" ", Bracket) + 1; + return a_PrettyFunction.substr(Space, Bracket - Space); +} +// https://stackoverflow.com/questions/48857887/pretty-function-in-visual-c +#if !defined(__PRETTY_FUNCTION__) && !defined(__GNUC__) +#define __PRETTY_FUNCTION__ __FUNCSIG__ +#endif +#define __METHOD_NAME__ methodName(__PRETTY_FUNCTION__) // Common headers (part 2, with macros): #include "Vector3.h" diff --git a/src/Protocol/MojangAPI.cpp b/src/Protocol/MojangAPI.cpp index fac6371d1..278e3f773 100644 --- a/src/Protocol/MojangAPI.cpp +++ b/src/Protocol/MojangAPI.cpp @@ -564,7 +564,7 @@ void cMojangAPI::QueryNamesToUUIDs(AStringVector & a_NamesToQuery) AString ParseError; if (!JsonUtils::ParseString(Response, root, &ParseError) || !root.isArray()) { - LOGWARNING("%s failed: Cannot parse received data (NameToUUID) to JSON: \"%s\"", __FUNCTION__, ParseError); + LOGWARNING("%s failed: Cannot parse received data (NameToUUID) to JSON: \"%s\"", __METHOD_NAME__, ParseError); LOGD("Response body:\n%s", CreateHexDump(HexDump, Response.data(), Response.size(), 16)); continue; } @@ -727,7 +727,7 @@ void cMojangAPI::Update(void) } if (!PlayerNames.empty()) { - LOG("cMojangAPI: Updating name-to-uuid cache for %u names", static_cast(PlayerNames.size())); + LOG("%s: Updating name-to-uuid cache for %u names", __METHOD_NAME__, static_cast(PlayerNames.size())); QueryNamesToUUIDs(PlayerNames); } @@ -745,7 +745,7 @@ void cMojangAPI::Update(void) } if (!ProfileUUIDs.empty()) { - LOG("cMojangAPI: Updating uuid-to-profile cache for %u uuids", static_cast(ProfileUUIDs.size())); + LOG("%s: Updating uuid-to-profile cache for %u uuids", __METHOD_NAME__, static_cast(ProfileUUIDs.size())); for (const auto & UUID : ProfileUUIDs) { QueryUUIDToProfile(UUID); -- cgit v1.2.3