/* core/info.h This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #ifndef __INCLUDED_CORE_INFO_H__ #define __INCLUDED_CORE_INFO_H__ #include #include #include #include #include "model/model.h" namespace core { /** * an information record */ class Info { public: /// create a new labeled information record Info(const std::string & label); /// delete the information record ~Info(); typedef std::deque Text; inline const std::string & label() const { return info_label; } inline const std::string & name() const { return info_name; } inline const std::string & modelname() const { return info_modelname; } inline const unsigned long ×tamp() const { return info_timestamp; } inline Text & text() { return info_text; } void set_name(const std::string & name); void set_name(const char *name); void set_modelname(const std::string & modelname); void set_modelname(const char *modelname); /// set the timestamp void set_timestamp(const unsigned long timestamp); /// clear the timestamp void clear_timestamp(); /// add a line of info text void add_text(const char *text); /// add a line of info text void add_text(const std::string & text); /// clear the info text void clear_text(); /// print info to sys::con_out void print() const; /// serialize a server-to-client update on a stream void serialize_server_update(std::ostream & os) const; /// receive a server-to-client update from a stream void receive_server_update(std::istream &is); /* ---- static info registry --------------------------------------- */ typedef std::map Registry; /// add an item to the info regsitry static void add(Info *info); /// search the info registry for a labeled item static Info *find(const char * label); /// search the info registry for a labeled item static Info *find(const std::string & label); /// clear the info registry static void clear(); /// list the info registry static void list(); private: std::string info_label; std::string info_name; std::string info_modelname; Text info_text; long info_credits; static Registry registry; unsigned long info_timestamp; }; } #endif // __INCLUDED_CORE_INFO_H__