gwenhywfar  4.99.8beta
tm_virtualfn.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Mon Jun 28 2010
3  copyright : (C) 2010 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * Please see toplevel file COPYING for license details *
8  ***************************************************************************/
9 
10 #ifdef HAVE_CONFIG_H
11 # include <config.h>
12 #endif
13 
14 #include "tm_virtualfn_p.h"
15 #include "tm_util.h"
16 #include "tm_type.h"
17 
18 
19 #include <gwenhywfar/debug.h>
20 #include <gwenhywfar/misc.h>
21 
22 #include <assert.h>
23 
24 
25 GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN, Typemaker2_VirtualFn);
26 GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN_PARAM, Typemaker2_VirtualFn_Param);
27 
28 
29 
32 
34  vf->refCount=1;
36  vf->access=TypeMaker2_Access_Public;
37 
38  vf->paramList=Typemaker2_VirtualFn_Param_List_new();
39  return vf;
40 }
41 
42 
43 
45  if (vf) {
46  if (vf->refCount==1) {
48  free(vf->preset);
49  free(vf->name);
50  free(vf->descr);
51  free(vf->returnType);
52  free(vf->defaultReturnValue);
53  free(vf->location);
54  Typemaker2_VirtualFn_Param_List_free(vf->paramList);
55  vf->refCount=0;
56  GWEN_FREE_OBJECT(vf);
57  }
58  else
59  vf->refCount--;
60  }
61 }
62 
63 
64 
66  assert(vf);
67  assert(vf->refCount);
68  vf->refCount++;
69 }
70 
71 
72 
74  const char *s;
75  GWEN_XMLNODE *n;
76 
77  assert(vf);
78  assert(vf->refCount);
79 
80  s=GWEN_XMLNode_GetProperty(node, "name", NULL);
81  if (s==NULL) {
82  DBG_ERROR(GWEN_LOGDOMAIN, "Member has no id");
83  return GWEN_ERROR_BAD_DATA;
84  }
86 
87  s=GWEN_XMLNode_GetProperty(node, "location", "pre");
89 
90  /* read flags */
91  s=GWEN_XMLNode_GetCharValue(node, "flags", NULL);
92  if (s && *s)
94 
95  /* read access */
96  s=GWEN_XMLNode_GetCharValue(node, "access", NULL);
97  if (s && *s) {
100  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s);
101  return GWEN_ERROR_BAD_DATA;
102  }
104  }
105 
106  /* read default value */
107  s=GWEN_XMLNode_GetCharValue(node, "defaultReturnValue", NULL);
108  if (s && *s)
110 
111  s=GWEN_XMLNode_GetCharValue(node, "preset", NULL);
112  if (s && *s)
114 
115  /* read return type */
116  s=GWEN_XMLNode_GetCharValue(node, "returnType", NULL);
117  if (s && *s)
119 
120  /* read returnType description */
121  n=GWEN_XMLNode_FindFirstTag(node, "returnType", NULL, NULL);
122  if (n) {
123  s=GWEN_XMLNode_GetCharValue(n, "descr", NULL);
125  }
126 
127 
128  n=GWEN_XMLNode_FindFirstTag(node, "params", NULL, NULL);
129  if (n) {
130  n=GWEN_XMLNode_FindFirstTag(n, "param", NULL, NULL);
131  while(n) {
132  const char *paramName;
133  const char *paramType;
134  const char *paramDescr;
136 
137  paramType=GWEN_XMLNode_GetProperty(n, "type", NULL);
138  paramName=GWEN_XMLNode_GetProperty(n, "name", NULL);
139  paramDescr=GWEN_XMLNode_GetCharValue(n, "descr", NULL);
140 
141  if (!(paramType && *paramType)) {
142  DBG_ERROR(GWEN_LOGDOMAIN, "Parameter has no type");
143  return GWEN_ERROR_BAD_DATA;
144  }
145 
147  Typemaker2_VirtualFn_Param_SetName(prm, paramName);
148  Typemaker2_VirtualFn_Param_SetType(prm, paramType);
149  Typemaker2_VirtualFn_Param_SetDescr(prm, paramDescr);
150  Typemaker2_VirtualFn_Param_List_Add(prm, vf->paramList);
151 
152  n=GWEN_XMLNode_FindNextTag(n, "param", NULL, NULL);
153  }
154  }
155 
156  /* read descr */
157  s=GWEN_XMLNode_GetCharValue(node, "descr", NULL);
159 
160 
161  return 0;
162 }
163 
164 
165 
167  assert(vf);
168  assert(vf->refCount);
169 
170  return vf->name;
171 }
172 
173 
174 
176  assert(vf);
177  assert(vf->refCount);
178 
179  free(vf->name);
180  if (s) vf->name=strdup(s);
181  else vf->name=NULL;
182 }
183 
184 
185 
187  assert(vf);
188  assert(vf->refCount);
189 
190  return vf->location;
191 }
192 
193 
194 
196  assert(vf);
197  assert(vf->refCount);
198 
199  free(vf->location);
200  if (s) vf->location=strdup(s);
201  else vf->location=NULL;
202 }
203 
204 
205 
207  assert(vf);
208  assert(vf->refCount);
209 
210  return vf->descr;
211 }
212 
213 
214 
216  assert(vf);
217  assert(vf->refCount);
218 
219  free(vf->descr);
220  if (s) vf->descr=strdup(s);
221  else vf->descr=NULL;
222 }
223 
224 
225 
227  assert(vf);
228  assert(vf->refCount);
229 
230  return vf->flags;
231 }
232 
233 
234 
236  assert(vf);
237  assert(vf->refCount);
238 
239  vf->flags=fl;
240 }
241 
242 
243 
245  assert(vf);
246  assert(vf->refCount);
247 
248  vf->flags|=fl;
249 }
250 
251 
252 
254  assert(vf);
255  assert(vf->refCount);
256 
257  vf->flags&=~fl;
258 }
259 
260 
261 
263  assert(vf);
264  assert(vf->refCount);
265 
266  return vf->access;
267 }
268 
269 
270 
272  assert(vf);
273  assert(vf->refCount);
274 
275  vf->access=i;
276 }
277 
278 
279 
281  assert(vf);
282  assert(vf->refCount);
283 
284  return vf->returnType;
285 }
286 
287 
288 
290  assert(vf);
291  assert(vf->refCount);
292 
293  free(vf->returnType);
294  if (s) vf->returnType=strdup(s);
295  else vf->returnType=NULL;
296 }
297 
298 
299 
301  assert(vf);
302  return vf->returnTypeDescr;
303 }
304 
305 
306 
308  assert(vf);
309  free(vf->returnTypeDescr);
310  if (s) vf->returnTypeDescr=strdup(s);
311  else vf->returnTypeDescr=NULL;
312 }
313 
314 
315 
317  assert(vf);
318  assert(vf->refCount);
319 
320  return vf->defaultReturnValue;
321 }
322 
323 
324 
326  assert(vf);
327  assert(vf->refCount);
328 
329  free(vf->defaultReturnValue);
330  if (s) vf->defaultReturnValue=strdup(s);
331  else vf->defaultReturnValue=NULL;
332 }
333 
334 
335 
336 TYPEMAKER2_VIRTUALFN_PARAM_LIST *Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf) {
337  assert(vf);
338  assert(vf->refCount);
339 
340  return vf->paramList;
341 }
342 
343 
344 
346  assert(vf);
347  assert(vf->refCount);
348 
349  return vf->preset;
350 }
351 
352 
353 
355  assert(vf);
356  assert(vf->refCount);
357 
358  free(vf->preset);
359  if (s) vf->preset=strdup(s);
360  else vf->preset=NULL;
361 }
362 
363 
364 
365 
366 
367 
368 
369 
370 
371 
372 
373 
376 
379 
380  return prm;
381 }
382 
383 
384 
386  if (prm) {
387  free(prm->name);
388  free(prm->type);
389  free(prm->descr);
390 
391  GWEN_FREE_OBJECT(prm);
392  }
393 }
394 
395 
396 
398  assert(prm);
399  return prm->name;
400 }
401 
402 
403 
405  assert(prm);
406  free(prm->name);
407  if (s) prm->name=strdup(s);
408  else prm->name=NULL;
409 }
410 
411 
412 
414  assert(prm);
415  return prm->type;
416 }
417 
418 
419 
421  assert(prm);
422  free(prm->type);
423  if (s) prm->type=strdup(s);
424  else prm->type=NULL;
425 }
426 
427 
428 
430  assert(prm);
431  return prm->descr;
432 }
433 
434 
435 
437  assert(prm);
438  free(prm->descr);
439  if (s) prm->descr=strdup(s);
440  else prm->descr=NULL;
441 }
442 
443 
444 
445 
446 
447 
448 
449 
const char * Typemaker2_VirtualFn_GetReturnTypeDescr(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:300
void Typemaker2_VirtualFn_SetFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl)
Definition: tm_virtualfn.c:235
void Typemaker2_VirtualFn_Param_SetType(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s)
Definition: tm_virtualfn.c:420
const char * Typemaker2_VirtualFn_GetPreset(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:345
void Typemaker2_VirtualFn_SubFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl)
Definition: tm_virtualfn.c:253
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:228
TYPEMAKER2_VIRTUALFN_PARAM_LIST * Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:336
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:712
struct TYPEMAKER2_VIRTUALFN_PARAM TYPEMAKER2_VIRTUALFN_PARAM
Definition: tm_virtualfn.h:24
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
const char * Typemaker2_VirtualFn_Param_GetDescr(const TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:429
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN, Typemaker2_VirtualFn)
void Typemaker2_VirtualFn_SetAccess(TYPEMAKER2_VIRTUALFN *vf, int i)
Definition: tm_virtualfn.c:271
struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN
Definition: tm_virtualfn.h:21
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
GWEN_XMLNODE * GWEN_XMLNode_FindFirstTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:695
const char * Typemaker2_VirtualFn_Param_GetType(const TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:413
TYPEMAKER2_VIRTUALFN_PARAM * Typemaker2_VirtualFn_Param_new()
Definition: tm_virtualfn.c:374
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:44
void Typemaker2_VirtualFn_AddFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl)
Definition: tm_virtualfn.c:244
const char * GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue)
Definition: xml.c:729
const char * Typemaker2_VirtualFn_GetReturnType(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:280
const char * Typemaker2_VirtualFn_GetDescr(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:206
void Typemaker2_VirtualFn_SetDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:215
void Typemaker2_VirtualFn_Param_free(TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:385
uint32_t Typemaker2_FlagsFromString(const char *t)
Definition: tm_util.c:23
int Typemaker2_AccessFromString(const char *s)
Definition: tm_util.c:157
const char * Typemaker2_VirtualFn_GetLocation(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:186
const char * Typemaker2_VirtualFn_GetDefaultReturnValue(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:316
int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node)
Definition: tm_virtualfn.c:73
void Typemaker2_VirtualFn_SetDefaultReturnValue(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:325
const char * Typemaker2_VirtualFn_Param_GetName(const TYPEMAKER2_VIRTUALFN_PARAM *prm)
Definition: tm_virtualfn.c:397
void Typemaker2_VirtualFn_Param_SetDescr(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s)
Definition: tm_virtualfn.c:436
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
void Typemaker2_VirtualFn_SetReturnType(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:289
TYPEMAKER2_VIRTUALFN * Typemaker2_VirtualFn_new()
Definition: tm_virtualfn.c:30
void Typemaker2_VirtualFn_SetName(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:175
void Typemaker2_VirtualFn_SetLocation(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:195
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
void Typemaker2_VirtualFn_SetReturnTypeDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:307
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:474
uint32_t Typemaker2_VirtualFn_GetFlags(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:226
void Typemaker2_VirtualFn_Param_SetName(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s)
Definition: tm_virtualfn.c:404
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:148
const char * Typemaker2_VirtualFn_GetName(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:166
void Typemaker2_VirtualFn_SetPreset(TYPEMAKER2_VIRTUALFN *vf, const char *s)
Definition: tm_virtualfn.c:354
void Typemaker2_VirtualFn_Attach(TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:65
int Typemaker2_VirtualFn_GetAccess(const TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:262