// // ToyValueStorage.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 13.06.2017. // // #ifndef ToyValueStorage_h #define ToyValueStorage_h #include "json/document.h" #include "ToySimpleValue.h" class ToyValueStorage { public: static ToyValueStorage& getInstance() { static ToyValueStorage 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 storeToySimpleValue(const ToySimpleValue& value, const std::string& container = DefaultContainer); void storeToySimpleValueWithKey(const ToySimpleValue& value, const std::string& key, const std::string& container = DefaultContainer); ToySimpleValue* getStoredToySimpleValue(const std::string& key, const std::string& container = DefaultContainer); void removeStoredToySimpleValue(const std::string&, const std::string& container = DefaultContainer); void removeAllStoredToySimpleValues(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: ToyValueStorage() { _valueStorage = new rapidjson::Document(); }; ~ToyValueStorage(){ 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> _storedToySimpleValues; std::string generateNextKey(const std::string& container); }; #endif /* ToyValueStorage_h */