Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
blob: cc480bf6096f76caa23553a15a97c0a2bedb0474 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/*
   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 <iostream>
#include <string>
#include <map>
#include <deque>

#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<std::string> 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 &timestamp() 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<std::string, Info*> 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__