#ifndef SMART_VALUE_MANAGER_H_INCLUDED #define SMART_VALUE_MANAGER_H_INCLUDED #include "include/Utils/Utils.h" namespace SE { typedef boost::variant< std::shared_ptr<TBindableVar<int>>, std::shared_ptr<TBindableVar<float>>, std::shared_ptr<TBindableVar<bool>>, std::shared_ptr<TBindableVar<std::string>>, std::shared_ptr<TBindableVar<vec2>>, std::shared_ptr<TBindableVar<vec3>>, std::shared_ptr<TBindableVar<vec4>>> TSmartValue; class TSmartValueManager : public TSerializeInterface { protected: std::map<std::string, std::map<std::string, TSmartValue>> DisctionariesMap; public: TSmartValue& GetSmartValue(const std::string& dictName, const std::string& valueName); template<typename TYPENAME> TYPENAME GetImmediateValue(const std::string& dictName, const std::string& valueName) { return (*boost::get<std::shared_ptr<TBindableVar<TYPENAME>>>(GetSmartValue(dictName, valueName)))(); } template<typename TYPENAME> void SetImmediateValue(const std::string& dictName, const std::string& valueName, TYPENAME value) { *boost::get<std::shared_ptr<TBindableVar<TYPENAME>>>(GetSmartValue(dictName, valueName)) = value; } template<typename TYPENAME> boost::signal<void(const TYPENAME&)>& GetSignal(const std::string& dictName, const std::string& valueName) { return boost::get<std::shared_ptr<TBindableVar<TYPENAME>>>(GetSmartValue(dictName, valueName))->OnVarChanged; } virtual void Serialize(boost::property_tree::ptree& propertyTree); }; } //namespace SE #endif