File: ade_doc.h

package info (click to toggle)
freespace2 24.2.0%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 43,716 kB
  • sloc: cpp: 595,001; ansic: 21,741; python: 1,174; sh: 457; makefile: 248; xml: 181
file content (171 lines) | stat: -rw-r--r-- 4,039 bytes parent folder | download | duplicates (2)
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#pragma once

#include "globalincs/pstypes.h"

namespace scripting {

enum class ade_type_info_type {
	Empty,
	Simple,
	Tuple,
	Array,
	Map,
	Iterator,
	Alternative,
	Function,
	Generic,
	Varargs,
};

class ade_type_array;
class ade_type_map;
class ade_type_iterator;
class ade_type_alternative;
class ade_type_function;
class ade_type_generic;
class ade_type_varargs;
class ade_type_tuple;

/**
 * @brief A definition of a type used in the ADE system
 */
class ade_type_info {
	ade_type_info_type _type = ade_type_info_type::Empty;

	SCP_string _identifier;
	SCP_vector<ade_type_info> _elements;

	SCP_string _name;
  public:
	ade_type_info() = default;
	/*implicit*/ ade_type_info(const char* single_type); // NOLINT(hicpp-explicit-conversions)
	/*implicit*/ ade_type_info(SCP_string single_type);
	/*implicit*/ ade_type_info(const ade_type_tuple& tupleType);
	/*implicit*/ ade_type_info(const ade_type_array& listType);
	/*implicit*/ ade_type_info(const ade_type_map& listType);
	/*implicit*/ ade_type_info(const ade_type_iterator& iteratorType);
	/*implicit*/ ade_type_info(const ade_type_alternative& alternativeType);
	/*implicit*/ ade_type_info(const ade_type_function& functionType);
	/*implicit*/ ade_type_info(const ade_type_generic& genericType);
	/*implicit*/ ade_type_info(const ade_type_varargs& genericType);

	ade_type_info(const ade_type_info&) = default;
	ade_type_info& operator=(const ade_type_info&) = default;

	ade_type_info(ade_type_info&&) noexcept;
	ade_type_info& operator=(ade_type_info&&) noexcept;

	ade_type_info_type getType() const;

	const SCP_string& getName() const;
	void setName(const SCP_string& name);

	bool isEmpty() const;

	bool isSimple() const;

	bool isTuple() const;

	bool isArray() const;

	bool isAlternative() const;

	const char* getIdentifier() const;

	const ade_type_info& arrayType() const;

	const SCP_vector<ade_type_info>& elements() const;
};

class ade_type_array {
	ade_type_info _element_type;

  public:
	explicit ade_type_array(ade_type_info elementType);

	const ade_type_info& getElementType() const;
};

class ade_type_map {
	ade_type_info _key_type;
	ade_type_info _value_type;

  public:
	explicit ade_type_map(ade_type_info keyType, ade_type_info valueType);

	const ade_type_info& getKeyType() const;

	const ade_type_info& getValueType() const;
};

class ade_type_iterator {
	ade_type_info _element_type;

  public:
	explicit ade_type_iterator(ade_type_info elementType);

	const ade_type_info& getElementType() const;
};

class ade_type_alternative {
	SCP_vector<ade_type_info> _elements;

  public:
	explicit ade_type_alternative(SCP_vector<ade_type_info> elements);

	const SCP_vector<ade_type_info>& getElementTypes() const;
};

class ade_type_tuple {
	SCP_vector<ade_type_info> _elements;

  public:
	explicit ade_type_tuple(SCP_vector<ade_type_info> elements);

	const SCP_vector<ade_type_info>& getElementTypes() const;
};

class ade_type_function {
	ade_type_info _returnType;
	SCP_vector<ade_type_info> _argumentTypes;

  public:
	explicit ade_type_function(ade_type_info returnType, SCP_vector<ade_type_info> argumentTypes);

	const ade_type_info& getReturnType() const;
	const SCP_vector<scripting::ade_type_info>& getArgumentTypes() const;
};

class ade_type_generic {
	ade_type_info _baseType;
	SCP_vector<ade_type_info> _genericTypes;

  public:
	ade_type_generic(ade_type_info baseType, SCP_vector<ade_type_info> genericTypes);

	const ade_type_info& getBaseType() const;
	const SCP_vector<scripting::ade_type_info>& getGenericTypes() const;
};

class ade_type_varargs {
	ade_type_info _baseType;

  public:
	explicit ade_type_varargs(ade_type_info baseType);

	const ade_type_info& getBaseType() const;
};

class ade_overload_list {
	SCP_vector<const char*> _arg_lists;

	void fixNullPointers();
  public:
	/*implicit*/ ade_overload_list();
	/*implicit*/ ade_overload_list(const char* arglist);
	/*implicit*/ ade_overload_list(std::initializer_list<const char*> overloads);

	const SCP_vector<const char*>& overloads();
};

} // namespace scripting