#pragma once
#include <stdint.h>
#include <optional>
#include <string>
#include <unordered_map>
#include <variant>
namespace rev {
class BaseConfig {
public:
virtual ~BaseConfig() = default;
virtual std::string Flatten();
protected:
BaseConfig() = default;
BaseConfig(const BaseConfig&) = default;
BaseConfig& operator=(const BaseConfig&) = delete;
BaseConfig(BaseConfig&&) noexcept = delete;
BaseConfig& operator=(BaseConfig&&) noexcept = delete;
using REVLibConfig_t = std::variant<int32_t, uint32_t, float, bool>;
template <typename ConfigType>
void PutParameter(uint8_t parameterId, ConfigType value) {
m_Parameters[parameterId] = value;
}
std::optional<REVLibConfig_t> GetParameter(uint8_t parameterId);
static std::optional<REVLibConfig_t> GetParameter(BaseConfig& fromConfig,
uint8_t parameterId);
void RemoveParameter(uint8_t parameterId);
static void RemoveParameter(BaseConfig& fromConfig, uint8_t parameterId);
void Apply(BaseConfig& config);
private:
std::unordered_map<uint8_t, REVLibConfig_t> m_Parameters;
};
}