// // ValueStorage.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 13.06.2017. // // #ifndef ValueStorage_h #define ValueStorage_h #include "json/document.h" #include "SimpleValue.h" class ValueStorage { public: static ValueStorage& getInstance() { static ValueStorage 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 storeSimpleValue(const SimpleValue& value, const std::string& container = DefaultContainer); void storeSimpleValueWithKey(const SimpleValue& value, const std::string& key, const std::string& container = DefaultContainer); SimpleValue* getStoredSimpleValue(const std::string& key, const std::string& container = DefaultContainer); void removeStoredSimpleValue(const std::string&, const std::string& container = DefaultContainer); void removeAllStoredSimpleValues(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: ValueStorage() { _valueStorage = new rapidjson::Document(); }; ~ValueStorage(){ this->clearStoredData(); delete _valueStorage; }; std::map _lastStoredKeyNumbers; // per container const unsigned int _modulus = 10000; rapidjson::Document* _valueStorage; std::map> _storedValues; std::map>> _storedFunctions; std::map> _storedSimpleValues; std::string generateNextKey(const std::string& container); }; #endif /* ValueStorage_h */