From 1c52fff1cc7669b254784e98c6c6ce4d65c248db Mon Sep 17 00:00:00 2001 From: Chocobo1 Date: Tue, 7 Dec 2021 14:11:53 +0800 Subject: [PATCH] Unify value loading paths The idea is to try load every intermediate value from the base case and then convert them to their respective type. --- src/base/settingsstorage.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/base/settingsstorage.h b/src/base/settingsstorage.h index 500398a2a..524f87170 100644 --- a/src/base/settingsstorage.h +++ b/src/base/settingsstorage.h @@ -60,17 +60,18 @@ public: { if constexpr (std::is_enum_v) { - const auto value = loadValueImpl(key).toString(); + const auto value = loadValue(key); return Utils::String::toEnum(value, defaultValue); } - else if constexpr (std::is_same_v) + else if constexpr (IsQFlags::value) { - return loadValueImpl(key, defaultValue); + const typename T::Int value = loadValue(key, static_cast(defaultValue)); + return T {value}; } - else if constexpr (IsQFlags::value) + else if constexpr (std::is_same_v) { - const QVariant value = loadValueImpl(key, static_cast(defaultValue)); - return T {value.template value()}; + // fast path for loading QVariant + return loadValueImpl(key, defaultValue); } else {