diff --git a/components/settings/categories.hpp b/components/settings/categories.hpp index 6a2da2fa10..246d6c2a44 100644 --- a/components/settings/categories.hpp +++ b/components/settings/categories.hpp @@ -5,12 +5,24 @@ #include #include #include +#include namespace Settings { + struct Less + { + using is_transparent = void; + + bool operator()(const std::pair& l, + const std::pair& r) const + { + return l < r; + } + }; + using CategorySetting = std::pair; using CategorySettingVector = std::set; - using CategorySettingValueMap = std::map; + using CategorySettingValueMap = std::map; } #endif // COMPONENTS_SETTINGS_CATEGORIES_H diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp index 99093d7a1d..ff4a40d707 100644 --- a/components/settings/settings.cpp +++ b/components/settings/settings.cpp @@ -71,9 +71,9 @@ void Manager::saveUser(const std::string &file) parser.saveSettingsFile(file, mUserSettings); } -std::string Manager::getString(const std::string &setting, const std::string &category) +std::string Manager::getString(std::string_view setting, std::string_view category) { - CategorySettingValueMap::key_type key (category, setting); + const auto key = std::make_pair(category, setting); CategorySettingValueMap::iterator it = mUserSettings.find(key); if (it != mUserSettings.end()) return it->second; @@ -82,11 +82,13 @@ std::string Manager::getString(const std::string &setting, const std::string &ca if (it != mDefaultSettings.end()) return it->second; - throw std::runtime_error(std::string("Trying to retrieve a non-existing setting: ") + setting - + ".\nMake sure the defaults.bin file was properly installed."); + std::string error("Trying to retrieve a non-existing setting: "); + error += setting; + error += ".\nMake sure the defaults.bin file was properly installed."; + throw std::runtime_error(error); } -float Manager::getFloat (const std::string& setting, const std::string& category) +float Manager::getFloat(std::string_view setting, std::string_view category) { const std::string& value = getString(setting, category); std::stringstream stream(value); @@ -95,7 +97,7 @@ float Manager::getFloat (const std::string& setting, const std::string& category return number; } -double Manager::getDouble (const std::string& setting, const std::string& category) +double Manager::getDouble(std::string_view setting, std::string_view category) { const std::string& value = getString(setting, category); std::stringstream stream(value); @@ -104,7 +106,7 @@ double Manager::getDouble (const std::string& setting, const std::string& catego return number; } -int Manager::getInt (const std::string& setting, const std::string& category) +int Manager::getInt(std::string_view setting, std::string_view category) { const std::string& value = getString(setting, category); std::stringstream stream(value); @@ -113,7 +115,7 @@ int Manager::getInt (const std::string& setting, const std::string& category) return number; } -std::int64_t Manager::getInt64 (const std::string& setting, const std::string& category) +std::int64_t Manager::getInt64(std::string_view setting, std::string_view category) { const std::string& value = getString(setting, category); std::stringstream stream(value); @@ -122,13 +124,13 @@ std::int64_t Manager::getInt64 (const std::string& setting, const std::string& c return number; } -bool Manager::getBool (const std::string& setting, const std::string& category) +bool Manager::getBool(std::string_view setting, std::string_view category) { const std::string& string = getString(setting, category); return Misc::StringUtils::ciEqual(string, "true"); } -osg::Vec2f Manager::getVector2 (const std::string& setting, const std::string& category) +osg::Vec2f Manager::getVector2(std::string_view setting, std::string_view category) { const std::string& value = getString(setting, category); std::stringstream stream(value); @@ -139,7 +141,7 @@ osg::Vec2f Manager::getVector2 (const std::string& setting, const std::string& c return {x, y}; } -osg::Vec3f Manager::getVector3 (const std::string& setting, const std::string& category) +osg::Vec3f Manager::getVector3(std::string_view setting, std::string_view category) { const std::string& value = getString(setting, category); std::stringstream stream(value); @@ -150,75 +152,69 @@ osg::Vec3f Manager::getVector3 (const std::string& setting, const std::string& c return {x, y, z}; } -void Manager::setString(const std::string &setting, const std::string &category, const std::string &value) +void Manager::setString(std::string_view setting, std::string_view category, const std::string &value) { - CategorySettingValueMap::key_type key (category, setting); - - auto found = mUserSettings.find(key); + auto found = mUserSettings.find(std::make_pair(category, setting)); if (found != mUserSettings.end()) { if (found->second == value) return; } + CategorySettingValueMap::key_type key(category, setting); + mUserSettings[key] = value; - mChangedSettings.insert(key); + mChangedSettings.insert(std::move(key)); } -void Manager::setInt (const std::string& setting, const std::string& category, const int value) +void Manager::setInt(std::string_view setting, std::string_view category, const int value) { std::ostringstream stream; stream << value; setString(setting, category, stream.str()); } -void Manager::setInt64 (const std::string& setting, const std::string& category, const std::int64_t value) +void Manager::setInt64(std::string_view setting, std::string_view category, const std::int64_t value) { std::ostringstream stream; stream << value; setString(setting, category, stream.str()); } -void Manager::setFloat (const std::string &setting, const std::string &category, const float value) +void Manager::setFloat (std::string_view setting, std::string_view category, const float value) { std::ostringstream stream; stream << value; setString(setting, category, stream.str()); } -void Manager::setDouble (const std::string &setting, const std::string &category, const double value) +void Manager::setDouble (std::string_view setting, std::string_view category, const double value) { std::ostringstream stream; stream << value; setString(setting, category, stream.str()); } -void Manager::setBool(const std::string &setting, const std::string &category, const bool value) +void Manager::setBool(std::string_view setting, std::string_view category, const bool value) { setString(setting, category, value ? "true" : "false"); } -void Manager::setVector2 (const std::string &setting, const std::string &category, const osg::Vec2f value) +void Manager::setVector2 (std::string_view setting, std::string_view category, const osg::Vec2f value) { std::ostringstream stream; stream << value.x() << " " << value.y(); setString(setting, category, stream.str()); } -void Manager::setVector3 (const std::string &setting, const std::string &category, const osg::Vec3f value) +void Manager::setVector3 (std::string_view setting, std::string_view category, const osg::Vec3f value) { std::ostringstream stream; stream << value.x() << ' ' << value.y() << ' ' << value.z(); setString(setting, category, stream.str()); } -void Manager::resetPendingChange(const std::string &setting, const std::string &category) -{ - CategorySettingValueMap::key_type key (category, setting); - mChangedSettings.erase(key); -} - CategorySettingVector Manager::getPendingChanges() { return mChangedSettings; diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index eb35ddbe8c..32157bd3d2 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -6,6 +6,8 @@ #include #include #include +#include + #include #include @@ -44,9 +46,6 @@ namespace Settings static void saveUser (const std::string& file); ///< save user settings to file - static void resetPendingChange(const std::string &setting, const std::string &category); - ///< resets a single pending change - static void resetPendingChanges(); ///< resets the list of all pending changes @@ -59,23 +58,23 @@ namespace Settings static CategorySettingVector getPendingChanges(const CategorySettingVector& filter); ///< returns the list of changed settings intersecting with the filter - static int getInt (const std::string& setting, const std::string& category); - static std::int64_t getInt64 (const std::string& setting, const std::string& category); - static float getFloat (const std::string& setting, const std::string& category); - static double getDouble (const std::string& setting, const std::string& category); - static std::string getString (const std::string& setting, const std::string& category); - static bool getBool (const std::string& setting, const std::string& category); - static osg::Vec2f getVector2 (const std::string& setting, const std::string& category); - static osg::Vec3f getVector3 (const std::string& setting, const std::string& category); + static int getInt(std::string_view setting, std::string_view category); + static std::int64_t getInt64(std::string_view setting, std::string_view category); + static float getFloat(std::string_view setting, std::string_view category); + static double getDouble(std::string_view setting, std::string_view category); + static std::string getString(std::string_view setting, std::string_view category); + static bool getBool(std::string_view setting, std::string_view category); + static osg::Vec2f getVector2(std::string_view setting, std::string_view category); + static osg::Vec3f getVector3(std::string_view setting, std::string_view category); - static void setInt (const std::string& setting, const std::string& category, int value); - static void setInt64 (const std::string& setting, const std::string& category, std::int64_t value); - static void setFloat (const std::string& setting, const std::string& category, float value); - static void setDouble (const std::string& setting, const std::string& category, double value); - static void setString (const std::string& setting, const std::string& category, const std::string& value); - static void setBool (const std::string& setting, const std::string& category, bool value); - static void setVector2 (const std::string& setting, const std::string& category, osg::Vec2f value); - static void setVector3 (const std::string& setting, const std::string& category, osg::Vec3f value); + static void setInt(std::string_view setting, std::string_view category, int value); + static void setInt64(std::string_view setting, std::string_view category, std::int64_t value); + static void setFloat(std::string_view setting, std::string_view category, float value); + static void setDouble(std::string_view setting, std::string_view category, double value); + static void setString(std::string_view setting, std::string_view category, const std::string& value); + static void setBool(std::string_view setting, std::string_view category, bool value); + static void setVector2(std::string_view setting, std::string_view category, osg::Vec2f value); + static void setVector3(std::string_view setting, std::string_view category, osg::Vec3f value); }; }