diff --git a/docs/specs/Settings-API.md b/docs/specs/Settings-API.md index c189f30..875b165 100644 --- a/docs/specs/Settings-API.md +++ b/docs/specs/Settings-API.md @@ -124,7 +124,7 @@ The function is used as a means of controlling when the API will be initialized, ## Implementation The public imperative API is an abstraction for the implementation, which is contained in a `SettingsController`. -The `SettingsController` object is a `static` object inside the `getSettingsController()` function. +The `SettingsController` object is a `static` object inside the `settings.cpp` compilation unit. This is done to remove the limitations that an object oriented design would bring, namely lifetime and scope management. Since the API is supposed to be globally available throughout the lifetime of the program, creating it as an object in the `OverlayController` and passing it to subcontrollers would only introduce unnecessary parameter passing. diff --git a/src/settings/settings.cpp b/src/settings/settings.cpp index 7deeed7..55ba636 100644 --- a/src/settings/settings.cpp +++ b/src/settings/settings.cpp @@ -6,63 +6,58 @@ namespace settings { -SettingsController& getSettingsController() -{ - static SettingsController s{}; - - return s; -} +static SettingsController settingController{}; void saveChangedSettings() { - getSettingsController().saveChangedSettings(); + settingController.saveChangedSettings(); } void saveAllSettings() { LOG( INFO ) << "Saving all settings."; - getSettingsController().saveAllSettings(); + settingController.saveAllSettings(); LOG( INFO ) << "All settings saved."; } [[nodiscard]] bool getSetting( const BoolSetting setting ) { - return getSettingsController().getSetting( setting ); + return settingController.getSetting( setting ); } void setSetting( const BoolSetting setting, const bool value ) { - getSettingsController().setSetting( setting, value ); + settingController.setSetting( setting, value ); } [[nodiscard]] double getSetting( const DoubleSetting setting ) { - return getSettingsController().getSetting( setting ); + return settingController.getSetting( setting ); } void setSetting( const DoubleSetting setting, const double value ) { - getSettingsController().setSetting( setting, value ); + settingController.setSetting( setting, value ); } [[nodiscard]] int getSetting( const IntSetting setting ) { - return getSettingsController().getSetting( setting ); + return settingController.getSetting( setting ); } void setSetting( const IntSetting setting, const int value ) { - getSettingsController().setSetting( setting, value ); + settingController.setSetting( setting, value ); } [[nodiscard]] std::string getSetting( const StringSetting setting ) { - return getSettingsController().getSetting( setting ); + return settingController.getSetting( setting ); } void setSetting( const StringSetting setting, const std::string value ) { - getSettingsController().setSetting( setting, value ); + settingController.setSetting( setting, value ); } std::string initializeAndGetSettingsPath() @@ -70,7 +65,7 @@ std::string initializeAndGetSettingsPath() // The static object is initialized the first time the function is called. // Having a dedicated function for this allows more control over when this // happens. - return getSettingsController().getSettingsFileName(); + return settingController.getSettingsFileName(); } } // namespace settings