diff --git a/additions/camoucfg/MaskConfig.hpp b/additions/camoucfg/MaskConfig.hpp index 28a95a7..c254163 100644 --- a/additions/camoucfg/MaskConfig.hpp +++ b/additions/camoucfg/MaskConfig.hpp @@ -4,7 +4,6 @@ Written by daijro. */ #pragma once - #include "json.hpp" #include #include @@ -12,10 +11,13 @@ Written by daijro. #include #include #include "mozilla/glue/Debug.h" -#include -#include +#include +#include +#include #include #include +#include +#include #ifdef _WIN32 # include @@ -23,6 +25,7 @@ Written by daijro. namespace MaskConfig { +// Function to get the value of an environment variable as a UTF-8 string. inline std::optional get_env_utf8(const std::string& name) { #ifdef _WIN32 std::wstring wName(name.begin(), name.end()); @@ -37,7 +40,7 @@ inline std::optional get_env_utf8(const std::string& name) { std::wstring_convert> converter; return converter.to_bytes(wValue); #else - const char* value = getenv(name.c_str()); + const char* value = std::getenv(name.c_str()); if (!value) return std::nullopt; return std::string(value); #endif @@ -84,25 +87,20 @@ inline const nlohmann::json& GetJson() { return jsonConfig; } -inline bool HasKey(const std::string& key, nlohmann::json& data) { - // printf_stderr("Property: %s\n", key.c_str()); - // printf_stderr("WARNING: Key not found: %s\n", key.c_str()); +inline bool HasKey(const std::string& key, const nlohmann::json& data) { return data.contains(key); } inline std::optional GetString(const std::string& key) { - // printf_stderr("GetString: %s\n", key.c_str()); - auto data = GetJson(); + const auto& data = GetJson(); if (!HasKey(key, data)) return std::nullopt; - return std::make_optional(data[key].get()); + return data[key].get(); } inline std::vector GetStringList(const std::string& key) { std::vector result; - - auto data = GetJson(); + const auto& data = GetJson(); if (!HasKey(key, data)) return {}; - // Build vector for (const auto& item : data[key]) { result.push_back(item.get()); } @@ -120,10 +118,9 @@ inline std::vector GetStringListLower(const std::string& key) { template inline std::optional GetUintImpl(const std::string& key) { - auto data = GetJson(); + const auto& data = GetJson(); if (!HasKey(key, data)) return std::nullopt; - if (data[key].is_number_unsigned()) - return std::make_optional(data[key].get()); + if (data[key].is_number_unsigned()) return data[key].get(); printf_stderr("ERROR: Value for key '%s' is not an unsigned integer\n", key.c_str()); return std::nullopt; @@ -138,29 +135,27 @@ inline std::optional GetUint32(const std::string& key) { } inline std::optional GetInt32(const std::string& key) { - auto data = GetJson(); + const auto& data = GetJson(); if (!HasKey(key, data)) return std::nullopt; - if (data[key].is_number_integer()) - return std::make_optional(data[key].get()); + if (data[key].is_number_integer()) return data[key].get(); printf_stderr("ERROR: Value for key '%s' is not an integer\n", key.c_str()); return std::nullopt; } inline std::optional GetDouble(const std::string& key) { - auto data = GetJson(); + const auto& data = GetJson(); if (!HasKey(key, data)) return std::nullopt; - if (data[key].is_number_float()) - return std::make_optional(data[key].get()); + if (data[key].is_number_float()) return data[key].get(); if (data[key].is_number_unsigned() || data[key].is_number_integer()) - return std::make_optional(static_cast(data[key].get())); + return static_cast(data[key].get()); printf_stderr("ERROR: Value for key '%s' is not a double\n", key.c_str()); return std::nullopt; } inline std::optional GetBool(const std::string& key) { - auto data = GetJson(); + const auto& data = GetJson(); if (!HasKey(key, data)) return std::nullopt; - if (data[key].is_boolean()) return std::make_optional(data[key].get()); + if (data[key].is_boolean()) return data[key].get(); printf_stderr("ERROR: Value for key '%s' is not a boolean\n", key.c_str()); return std::nullopt; } @@ -172,22 +167,18 @@ inline bool CheckBool(const std::string& key) { inline std::optional> GetRect( const std::string& left, const std::string& top, const std::string& width, const std::string& height) { - // Make top and left default to 0 std::array, 4> values = { GetUint32(left).value_or(0), GetUint32(top).value_or(0), GetUint32(width), GetUint32(height)}; - // If height or width is std::nullopt, return std::nullopt if (!values[2].has_value() || !values[3].has_value()) { if (values[2].has_value() ^ values[3].has_value()) printf_stderr( - "Both %s and %s must be provided. Using default " - "behavior.\n", + "Both %s and %s must be provided. Using default behavior.\n", height.c_str(), width.c_str()); return std::nullopt; } - // Convert std::optional to uint32_t std::array result; std::transform(values.begin(), values.end(), result.begin(), [](const auto& value) { return value.value(); }); @@ -198,7 +189,6 @@ inline std::optional> GetRect( inline std::optional> GetInt32Rect( const std::string& left, const std::string& top, const std::string& width, const std::string& height) { - // Calls GetRect but casts to int32_t if (auto optValue = GetRect(left, top, width, height)) { std::array result; std::transform(optValue->begin(), optValue->end(), result.begin(),