#ifndef APPINFO_H #define APPINFO_H #include #include #include #include #include #include class AppInfo { typedef std::unordered_map string_map; public: enum class State { initial, running, exited }; enum class RunMode { script, daemon }; struct AppData { std::string program_name; std::string module_name; std::deque args; std::string working_dir; string_map after; std::string run_mode; bool create_log = false; void printInfo(std::ostream &out); std::string getAfterString() const; std::string getAfterKeys() const; }; private: std::string program_name; std::string module_name; std::deque args; std::string working_dir; string_map after; bool create_log = false; std::unordered_map, State> parents; State state = State::initial; RunMode mode = RunMode::script; public: void setProgramName(std::string name); void setModuleName(std::string name); void setArgs(std::deque args); void setWorkingDir(std::string working_dir); void setAfter(string_map after); void setCreateLog(bool create_log); void setRunMode(std::string mode); void setFinished(); void setRunning(); void insertParent(std::shared_ptr parent, State state); bool isParentDependencyCleared(std::osyncstream &out) const; std::string getModuleName() const; std::string getProgramName() const; std::deque getArgs() const; std::string getWorkingDir() const; string_map getAfter() const; std::string getAfterString() const; std::string getAfterKeys() const; RunMode getRunMode() const; State getState() const; std::unordered_map, State> getParents() const; void copyFromData(AppInfo::AppData &other); bool getCreateLog(); AppInfo(); ~AppInfo(); AppInfo(const AppInfo &other) = delete; AppInfo(const AppInfo &&other) = delete; AppInfo &operator=(const AppInfo &other) = delete; bool operator==(const AppInfo &other); void printInfo(std::ostream& out); private: std::string runmodeToString() const; std::string stateToString() const; std::string stateToString(State s) const; }; #endif // APPINFO_H