From 086eaa9be4a9f3492a8ac51f3041f5e7502f61e8 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Tue, 26 Apr 2022 15:22:09 +0200 Subject: [PATCH] More virtual --- src/configwrapper.h | 21 ++---------- src/configwrapper_priv.h | 74 ++-------------------------------------- 2 files changed, 5 insertions(+), 90 deletions(-) diff --git a/src/configwrapper.h b/src/configwrapper.h index 52b14c5..87bb7e5 100644 --- a/src/configwrapper.h +++ b/src/configwrapper.h @@ -27,11 +27,7 @@ public: using value_t = typename std::conditional::value, const T &, T>::type; using ConstraintCallback = ConfigConstraintReturnType(*)(value_t); - ConfigWrapper(const T &defaultValue, ConstraintCallback constraintCallback); - ConfigWrapper(T &&defaultValue, ConstraintCallback constraintCallback); - ConfigWrapper(const ConfigWrapper &factoryConfig, ConstraintCallback constraintCallback); - ConfigWrapper(const DefaultValueCallbackRef &defaultCallback, ConstraintCallback constraintCallback); - ~ConfigWrapper() override; + ConfigWrapper() = default; ConfigStatusReturnType write(nvs_handle_t nvsHandle, value_t value); @@ -40,13 +36,13 @@ public: std::string valueAsString() const override final; std::string defaultAsString() const override final; - T defaultValue() const; + virtual T defaultValue() const = 0; ConfigStatusReturnType loadFromFlash(nvs_handle_t nvsHandle) override final; ConfigStatusReturnType reset(nvs_handle_t nvsHandle) override final; ConfigStatusReturnType forceReset(nvs_handle_t nvsHandle) override final; - ConfigConstraintReturnType checkValue(value_t value) const; + virtual ConfigConstraintReturnType checkValue(value_t value) const = 0; const T &value() const { return m_value; } @@ -54,17 +50,6 @@ private: ConfigStatusReturnType writeToFlash(nvs_handle_t nvsHandle, value_t value); T m_value; - - const enum : uint8_t { DefaultByValue, DefaultByFactoryConfig, DefaultByCallback } m_defaultType; - - union - { - const T m_defaultValue; - const ConfigWrapper * const m_factoryConfig; - const DefaultValueCallbackPtr m_defaultCallback; - }; - - const ConstraintCallback m_constraintCallback; }; } // namespace espconfig diff --git a/src/configwrapper_priv.h b/src/configwrapper_priv.h index 376e5e9..b2084ef 100644 --- a/src/configwrapper_priv.h +++ b/src/configwrapper_priv.h @@ -19,20 +19,15 @@ #define INSTANTIATE_CONFIGWRAPPER_TEMPLATES(TYPE) \ namespace espconfig { \ - template ConfigWrapper::ConfigWrapper(const TYPE &defaultValue, ConstraintCallback constraintCallback); \ - template ConfigWrapper::ConfigWrapper(TYPE &&defaultValue, ConstraintCallback constraintCallback); \ - template ConfigWrapper::ConfigWrapper(const ConfigWrapper &factoryConfig, ConstraintCallback constraintCallback); \ - template ConfigWrapper::ConfigWrapper(DefaultValueCallbackRef &defaultCallback, ConstraintCallback constraintCallback); \ - template ConfigWrapper::~ConfigWrapper(); \ template ConfigStatusReturnType ConfigWrapper::write(nvs_handle_t nvsHandle, value_t value); \ template<> const char *ConfigWrapper::type() const { return #TYPE; } \ template std::string ConfigWrapper::valueAsString() const; \ template std::string ConfigWrapper::defaultAsString() const; \ - template TYPE ConfigWrapper::defaultValue() const; \ + /* template TYPE ConfigWrapper::defaultValue() const; */ \ template ConfigStatusReturnType ConfigWrapper::loadFromFlash(nvs_handle_t nvsHandle); \ template ConfigStatusReturnType ConfigWrapper::reset(nvs_handle_t nvsHandle); \ template ConfigStatusReturnType ConfigWrapper::forceReset(nvs_handle_t nvsHandle); \ - template ConfigConstraintReturnType ConfigWrapper::checkValue(value_t value) const; \ + /* template ConfigConstraintReturnType ConfigWrapper::checkValue(value_t value) const; */ \ template ConfigStatusReturnType ConfigWrapper::writeToFlash(nvs_handle_t nvsHandle, value_t value); \ } // namespace espconfig @@ -41,49 +36,6 @@ namespace { constexpr const char * const TAG = "CONFIG"; } // namespace -template -ConfigWrapper::ConfigWrapper(const T &defaultValue, ConstraintCallback constraintCallback) : - m_defaultType{DefaultByValue}, - m_defaultValue{defaultValue}, - m_constraintCallback{constraintCallback} -{ -} - -template -ConfigWrapper::ConfigWrapper(T &&defaultValue, ConstraintCallback constraintCallback) : - m_defaultType{DefaultByValue}, - m_defaultValue{std::move(defaultValue)}, - m_constraintCallback{constraintCallback} -{ -} - -template -ConfigWrapper::ConfigWrapper(const ConfigWrapper &factoryConfig, ConstraintCallback constraintCallback) : - m_defaultType{DefaultByFactoryConfig}, - m_factoryConfig{&factoryConfig}, - m_constraintCallback{constraintCallback} -{ -} - -template -ConfigWrapper::ConfigWrapper(const DefaultValueCallbackRef &defaultCallback, ConstraintCallback constraintCallback) : - m_defaultType{DefaultByCallback}, - m_defaultCallback{&defaultCallback}, - m_constraintCallback{constraintCallback} -{ -} - -template -ConfigWrapper::~ConfigWrapper() -{ - switch (m_defaultType) - { - case DefaultByValue: m_defaultValue.~T(); break; - case DefaultByFactoryConfig: /*m_factoryConfig.~typeof(m_factoryConfig)();*/ break; - case DefaultByCallback: /*m_defaultCallback.~typeof(m_defaultCallback)();*/ break; - } -} - template ConfigStatusReturnType ConfigWrapper::write(nvs_handle_t nvsHandle, value_t value) { @@ -125,19 +77,6 @@ std::string ConfigWrapper::defaultAsString() const return toString(defaultValue()); } -template -T ConfigWrapper::defaultValue() const -{ - switch (m_defaultType) - { - case DefaultByValue: return m_defaultValue; - case DefaultByFactoryConfig: assert(m_factoryConfig->m_loaded); return m_factoryConfig->value(); - case DefaultByCallback: return m_defaultCallback(); - } - - __builtin_unreachable(); -} - template ConfigStatusReturnType ConfigWrapper::loadFromFlash(nvs_handle_t nvsHandle) { @@ -216,15 +155,6 @@ ConfigStatusReturnType ConfigWrapper::forceReset(nvs_handle_t nvsHandle) return {}; } -template -ConfigConstraintReturnType ConfigWrapper::checkValue(value_t value) const -{ - if (!m_constraintCallback) - return {}; - - return m_constraintCallback(value); -} - template ConfigStatusReturnType ConfigWrapper::writeToFlash(nvs_handle_t nvsHandle, value_t value) {