// // HValueStorage.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 13.06.2017. // // #ifndef HValueStorage_h #define HValueStorage_h #include "json/document.h" #include "HSimpleValue.h" class HValueStorage { public: static HValueStorage& getInstance() { static HValueStorage instance; return instance; }; static const std::string DefaultContainer; std::string storeValue(const rapidjson::Value& value, const std::string& container = DefaultContainer); void storeValueWithKey(const rapidjson::Value& value, const std::string& key, const std::string& container = DefaultContainer); rapidjson::Value* getStoredValue(const std::string& key, const std::string& container = DefaultContainer); void removeStoredValue(const std::string& key, const std::string& container = DefaultContainer); void removeAllStoredValues(const std::string& container = ""); std::string storeFunction(std::function callback, const std::string& container = DefaultContainer); void storeFunctionWithKey(std::function callback, const std::string& key, const std::string& container = DefaultContainer); std::function getStoredFunction(const std::string& key, const std::string& container = DefaultContainer); void runStoredFunction(const std::string& key, const std::string& container = DefaultContainer); void runAndRemoveStoredFunction(const std::string& key, const std::string& container = DefaultContainer); void removeStoredFunction(const std::string& key, const std::string& container = DefaultContainer); void removeAllStoredFunctions(const std::string& container = ""); std::string storeHSimpleValue(const HSimpleValue& value, const std::string& container = DefaultContainer); void storeHSimpleValueWithKey(const HSimpleValue& value, const std::string& key, const std::string& container = DefaultContainer); HSimpleValue* getStoredHSimpleValue(const std::string& key, const std::string& container = DefaultContainer); void removeStoredHSimpleValue(const std::string&, const std::string& container = DefaultContainer); void removeAllStoredHSimpleValues(const std::string& container = ""); // if no container is provided, data from all containers (including the default container) will be cleared void clearStoredData(const std::string& container = ""); protected: HValueStorage() { _HValueStorage = new rapidjson::Document(); }; ~HValueStorage(){ this->clearStoredData(); delete _HValueStorage; }; std::map _lastStoredKeyNumbers; // per container const unsigned int _modulus = 10000; rapidjson::Document* _HValueStorage; std::map> _storedValues; std::map>> _storedFunctions; std::map> _storedHSimpleValues; std::string generateNextKey(const std::string& container); }; #endif /* HValueStorage_h */