eive-obsw/mission/memory/NVMParameterBase.h

70 lines
1.7 KiB
C++

#ifndef BSP_Q7S_CORE_NVMPARAMS_NVMPARAMIF_H_
#define BSP_Q7S_CORE_NVMPARAMS_NVMPARAMIF_H_
#include "fsfw/returnvalues/HasReturnvaluesIF.h"
#include <nlohmann/json.hpp>
#include <string>
#include <filesystem>
class NVMParameterBase {
public:
virtual~ NVMParameterBase() {}
NVMParameterBase(std::string fullName);
bool getJsonFileExists();
/**
* Returns RETURN_OK on successfull read and HasFileSystemIF::FILE_DOES_NOT_EXIST if
* file does not exist yet.
* @return
*/
virtual ReturnValue_t readJsonFile();
virtual ReturnValue_t writeJsonFile();
void setFullName(std::string fullName);
std::string getFullName() const;
template<typename T>
ReturnValue_t insertValue(std::string key, T value);
template<typename T>
ReturnValue_t setValue(std::string key, T value);
template<typename T>
T getValue(std::string key) const;
void printKeys() const;
void print() const;
private:
nlohmann::json json;
std::vector<std::string> keys;
std::string fullName;
};
template<typename T>
inline ReturnValue_t NVMParameterBase::insertValue(std::string key, T value) {
// Check whether key already exists. If it does not, insert it
if (std::find(keys.begin(), keys.end(), key) == keys.end()) {
keys.push_back(key);
}
json[key] = value;
return HasReturnvaluesIF::RETURN_OK;
}
template<typename T>
inline ReturnValue_t NVMParameterBase::setValue(std::string key, T value) {
json[key] = value;
return HasReturnvaluesIF::RETURN_OK;
}
template<typename T>
inline T NVMParameterBase::getValue(std::string key) const {
return json[key];
}
#endif /* BSP_Q7S_CORE_NVMPARAMS_NVMPARAMIF_H_ */