// // AniValueStorage.h // SteveMaggieCpp // // Created by Katarzyna Kalinowska-Górska on 13.06.2017. // // #ifndef AniValueStorage_h #define AniValueStorage_h #include "json/document.h" #include "AniSimpleValue.h" class AniValueStorage { public: static AniValueStorage& getInstance() { static AniValueStorage 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 storeAniSimpleValue(const AniSimpleValue& value, const std::string& container = DefaultContainer); void storeAniSimpleValueWithKey(const AniSimpleValue& value, const std::string& key, const std::string& container = DefaultContainer); AniSimpleValue* getStoredAniSimpleValue(const std::string& key, const std::string& container = DefaultContainer); void removeStoredAniSimpleValue(const std::string&, const std::string& container = DefaultContainer); void removeAllStoredAniSimpleValues(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: AniValueStorage() { _AniValueStorage = new rapidjson::Document(); }; ~AniValueStorage(){ this->clearStoredData(); delete _AniValueStorage; }; std::map _lastStoredKeyNumbers; // per container const unsigned int _modulus = 10000; rapidjson::Document* _AniValueStorage; std::map> _storedValues; std::map>> _storedFunctions; std::map> _storedAniSimpleValues; std::string generateNextKey(const std::string& container); }; #endif /* AniValueStorage_h */