#ifndef __APPLICATIONSETTINGS_H__ #define __APPLICATIONSETTINGS_H__ #include #include #include class ApplicationSettings { #define BUILD_SETTING_FIELD(Category, Type, Name, DefaultValue) \ inline void set##Name(const Type &value) { \ std::lock_guard locker(m_mutex); \ m_ptree.put(#Category "." #Name, value); \ m_needSave = true; \ } \ inline Type get##Name() const { \ std::lock_guard locker(m_mutex); \ return m_ptree.get(#Category "." #Name, DefaultValue); \ } #define BUILD_STATUS(Type, Name, DefaultValue) BUILD_SETTING_FIELD(Status, Type, Name, DefaultValue) public: ApplicationSettings(boost::asio::io_context &ioContext, const std::string &path); protected: void run(); boost::property_tree::ptree m_ptree; bool m_needSave = false; mutable std::mutex m_mutex; private: boost::asio::io_context &m_ioContext; boost::asio::steady_timer m_timer; std::string m_path; }; #endif // __APPLICATIONSETTINGS_H__