File: Info.h

package info (click to toggle)
spring 103.0%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 43,720 kB
  • ctags: 63,685
  • sloc: cpp: 368,283; ansic: 33,988; python: 12,417; java: 12,203; awk: 5,879; sh: 1,846; xml: 655; perl: 405; php: 211; objc: 194; makefile: 77; sed: 2
file content (93 lines) | stat: -rw-r--r-- 2,236 bytes parent folder | download | duplicates (5)
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
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */

// The structs in this file relate to *Info.lua files.
// They are used for AIs (-> AIInfo.lua) for example.
// This file is used (at least) by unitsync and the engine.

#ifndef _INFO_H
#define _INFO_H

#include "System/FileSystem/VFSModes.h"

#include <string>
#include <vector>
#include <set>

enum InfoValueType {
	INFO_VALUE_TYPE_STRING,
	INFO_VALUE_TYPE_INTEGER,
	INFO_VALUE_TYPE_FLOAT,
	INFO_VALUE_TYPE_BOOL,
};

struct InfoItem {
	InfoItem()
		: valueType(INFO_VALUE_TYPE_STRING)
	{
	}
	InfoItem(const std::string& _key, const std::string& _desc, const std::string _value)
		: key(_key)
		, desc(_desc)
		, valueType(INFO_VALUE_TYPE_STRING)
		, valueTypeString(_value)
	{}

	InfoItem(const std::string& _key, const std::string& _desc, int _value)
		: key(_key)
		, desc(_desc)

		, valueType(INFO_VALUE_TYPE_INTEGER)
	{
		value.typeInteger = _value;
	}

	InfoItem(const std::string& _key, const std::string& _desc, float _value)
		: key(_key)
		, desc(_desc)
		, valueType(INFO_VALUE_TYPE_FLOAT)
	{
		value.typeFloat = _value;
	}

	InfoItem(const std::string& _key, const std::string& _desc, bool _value)
		: key(_key)
		, desc(_desc)
		, valueType(INFO_VALUE_TYPE_BOOL)
	{
		value.typeBool = _value;
	}

public:
	std::string key;
	std::string desc;
	InfoValueType valueType;
	union Value {
		int            typeInteger;
		float          typeFloat;
		bool           typeBool;
	} value;
	/** It is not possible to use a type with destructor in a union */
	std::string valueTypeString;

public:
	std::string GetValueAsString(const bool convBooltoInt = true) const;
};

void info_convertToStringValue(InfoItem* infoItem);

const char* info_convertTypeToString(InfoValueType infoValueType);

void info_parseInfo(
		std::vector<InfoItem>& options,
		const std::string& fileName,
		const std::string& fileModes = SPRING_VFS_RAW,
		const std::string& accessModes = SPRING_VFS_RAW,
		std::set<std::string>* infoSet = NULL);

std::vector<InfoItem> info_parseInfo(
		const std::string& fileName,
		const std::string& fileModes = SPRING_VFS_RAW,
		const std::string& accessModes = SPRING_VFS_RAW,
		std::set<std::string>* infoSet = NULL);

#endif // _INFO_H