ScriptStack 1.0.4
Loading...
Searching...
No Matches
Routine.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Text;
4
7
9{
10
69 public class Routine
70 {
71
72 #region Private Variables
73
74 private string name;
75 private List<Type> parameters;
76 private Type result;
77 private string description;
78 private Host host;
79
80 #endregion
81
82 #region Private Methods
83
84 private void Validate(Type type)
85 {
86
87 if (type == null || type == typeof(void))
88 return;
89
90 if (type != typeof(int)
91 && type != typeof(float)
92 && type != typeof(bool)
93 && type != typeof(double)
94 && type != typeof(string)
95 && type != typeof(char)
96 && type != typeof(ArrayList)
97 )
98 throw new ExecutionException("Der Typ '" + type.Name + "' ist kein generischer Datentyp und es wurden keine Erweiterungen registriert.");
99
100 }
101
102 private string ToString(Type type)
103 {
104
105 string tmp = "";
106
107 if (type == null)
108 tmp = "null";
109 else if (type == typeof(void))
110 tmp = "void";
111 else if (type == typeof(int))
112 tmp = "int";
113 else if (type == typeof(float))
114 tmp = "float";
115 else if (type == typeof(double))
116 tmp = "double";
117 else if (type == typeof(bool))
118 tmp = "bool";
119 else if (type == typeof(char))
120 tmp = "char";
121 else if (type == typeof(string))
122 tmp = "string";
123 else if (type == typeof(ArrayList))
124 tmp = "array";
125 else
126 tmp = type.ToString().Replace("System.", "").ToLower();
127
128 return tmp;
129
130 }
131
132 #endregion
133
134 #region Public Methods
135
136 public Routine(Type result, string name, List<Type> parameters) {
137
138 Validate(result);
139
140 foreach (Type parameter in parameters)
141 Validate(parameter);
142
143 this.result = result;
144 this.name = name;
145 this.parameters = parameters;
146
147 host = null;
148
149 }
150
151 public Routine(Type result, string name, List<Type> parameterTypes, string description)
152 {
153
154 Validate(result);
155
156 foreach (Type parameter in parameterTypes)
157 Validate(parameter);
158
159 this.result = result;
160 this.name = name;
161 this.parameters = parameterTypes;
162 this.description = description;
163 host = null;
164
165 }
166
167 public Routine(string name) : this(null, name, new List<Type>())
168 {
169 }
170
171 public Routine(string name, string description) : this(null, name, new List<Type>(), description)
172 {
173 }
174
175 public Routine(Type result, string name) : this(result, name, new List<Type>())
176 {
177 }
178
179 public Routine(Type result, string name, string description) : this(result, name, new List<Type>(), description)
180 {
181 }
182
183 public Routine(Type result, string name, Type parameter) : this(result, name, new List<Type>())
184 {
185 parameters.Add(parameter);
186 }
187
188 public Routine(Type result, string name, Type parameter, string description) : this(result, name, new List<Type>(), description)
189 {
190 parameters.Add(parameter);
191 }
192
193 public Routine(Type result, string name, Type parameter0, Type parameter1) : this(result, name, new List<Type>())
194 {
195 parameters.Add(parameter0);
196 parameters.Add(parameter1);
197 }
198
199 public Routine(Type result, string name, Type parameter0, Type parameter1, string description) : this(result, name, new List<Type>(), description)
200 {
201 parameters.Add(parameter0);
202 parameters.Add(parameter1);
203 }
204
205 public Routine(Type result, string name, Type parameter0, Type parameter1, Type parameter2) : this(result, name, new List<Type>())
206 {
207 parameters.Add(parameter0);
208 parameters.Add(parameter1);
209 parameters.Add(parameter2);
210 }
211
212 public Routine(Type result, string name, Type parameter0, Type parameter1, Type parameter2, string description) : this(result, name, new List<Type>(), description)
213 {
214 parameters.Add(parameter0);
215 parameters.Add(parameter1);
216 parameters.Add(parameter2);
217 }
218
223 public void Verify(List<object> parameters)
224 {
225
226 if (parameters.Count != this.parameters.Count)
227 throw new ExecutionException("Die Routine '" + name + "' wurde mit " + parameters.Count + " statt erwarteten " + this.parameters.Count + " Parametern aufgerufen.");
228
229 for (int i = 0; i < parameters.Count; i++)
230 {
231
232 if (null == this.parameters[i] || null == parameters[i])
233 continue;
234
235 if (typeof(void) == this.parameters[i] || typeof(void) == parameters[i])
236 continue;
237
238 Type expected = this.parameters[i];
239
240 Type specified = parameters[i].GetType();
241
242 if (expected != specified)
243 throw new ExecutionException("Typ '" + specified.Name + "' statt erwartetem Typ '" + expected.Name + "' als " + (i + 1) + " Parameter von '" + name +"' angegeben.");
244
245 }
246
247 }
248
253 public void Verify(object result)
254 {
255
256 if (null == this.result || null == result)
257 return;
258
259 if (typeof(void) == this.result || typeof(void) == result)
260 return;
261
262 if (result.GetType() != this.result)
263 throw new ExecutionException("Typ '" + result.GetType().Name + "' statt erwartetem Typ '" + this.result.Name + "' als Ergebnis von '" + name + "' erhalten.");
264
265 }
266
267 public override string ToString()
268 {
269
270 StringBuilder sb = new StringBuilder();
271
272 //if(result != (Type)null)
273 sb.Append(ToString(result) + " ");
274
275 sb.Append(name);
276
277 sb.Append("(");
278
279 int i = 0;
280
281 for (i = 0; i < parameters.Count; i++)
282 {
283
284 if (i > 0)
285 sb.Append(", ");
286
287 sb.Append(ToString(parameters[i]));
288
289 }
290
291 sb.Append(")");
292
293 return sb.ToString();
294
295 }
296
297 public string Description()
298 {
299 return description;
300 }
301
302 #endregion
303
304 #region Public Properties
305
306 public string Name
307 {
308 get { return name; }
309 }
310
311 public List<Type> ParameterTypes
312 {
313 get { return parameters; }
314 }
315
316 public Type Result
317 {
318 get { return result; }
319 }
320
322 {
323 get { return host; }
324 internal set { host = value; }
325 }
326
327 #endregion
328
329 }
330
331}
void Verify(List< object > parameters)
Verify the parameter types of a Routine. If null or void was specified values arent verified.
Definition Routine.cs:223
Routine(Type result, string name, Type parameter)
Definition Routine.cs:183
Routine(Type result, string name, Type parameter0, Type parameter1, string description)
Definition Routine.cs:199
Routine(Type result, string name, List< Type > parameterTypes, string description)
Definition Routine.cs:151
void Verify(object result)
Verify the result of a Routine. If null or void was specified values arent verified.
Definition Routine.cs:253
Routine(Type result, string name, Type parameter0, Type parameter1)
Definition Routine.cs:193
Routine(Type result, string name)
Definition Routine.cs:175
Routine(string name, string description)
Definition Routine.cs:171
Routine(Type result, string name, Type parameter0, Type parameter1, Type parameter2)
Definition Routine.cs:205
Routine(Type result, string name, Type parameter0, Type parameter1, Type parameter2, string description)
Definition Routine.cs:212
List< Type > ParameterTypes
Definition Routine.cs:312
Routine(Type result, string name, Type parameter, string description)
Definition Routine.cs:188
Routine(Type result, string name, string description)
Definition Routine.cs:179
Routine(Type result, string name, List< Type > parameters)
Definition Routine.cs:136
override string ToString()
Definition Routine.cs:267
The main interface to create a Host. A Host can implement Routine's to extend its functionality.
Definition Host.cs:80