gwenhywfar  4.99.8beta
tm_type.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Wed Jul 01 2009
3  copyright : (C) 2009 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 
15 #include "tm_type_p.h"
16 #include "tm_util.h"
17 
18 #include <gwenhywfar/debug.h>
19 #include <gwenhywfar/misc.h>
20 
21 #include <assert.h>
22 
23 
24 
25 
26 GWEN_LIST_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type);
27 GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type);
28 
29 
30 
31 
33  TYPEMAKER2_TYPE *ty;
34 
36  ty->refCount=1;
38 
39  ty->headers=Typemaker2_Header_List_new();
40  ty->enums=Typemaker2_Enum_List_new();
41  ty->defines=Typemaker2_Define_List_new();
42  ty->codeDefs=Typemaker2_Code_List_new();
43  ty->inlines=Typemaker2_Inline_List_new();
44  ty->virtualFns=Typemaker2_VirtualFn_List_new();
45  ty->signals=Typemaker2_Signal_List_new();
46  ty->slots=Typemaker2_Slot_List_new();
47 
48  ty->structIncludes=GWEN_StringList_new();
49  ty->privateIncludes=GWEN_StringList_new();
50  ty->libraryIncludes=GWEN_StringList_new();
51  ty->publicIncludes=GWEN_StringList_new();
52  ty->codeIncludes=GWEN_StringList_new();
53 
54  ty->members=Typemaker2_Member_List_new();
55 
56  ty->groupTree=Typemaker2_Group_Tree_new();
57 
58 
59  return ty;
60 }
61 
62 
63 
65  if (ty) {
66  assert(ty->refCount);
67  if (ty->refCount==1) {
69  free(ty->name);
70  free(ty->extends);
71  free(ty->baseType);
72  free(ty->inherits);
73  free(ty->identifier);
74  free(ty->prefix);
75 
76  free(ty->defaultValue);
77  free(ty->presetValue);
78 
79  free(ty->aqdb_type);
80  free(ty->baseFileName);
81 
82  free(ty->freeHook);
83 
84  free(ty->descr);
85 
86  Typemaker2_Header_List_free(ty->headers);
87  Typemaker2_Enum_List_free(ty->enums);
88  Typemaker2_Define_List_free(ty->defines);
89  Typemaker2_Code_List_free(ty->codeDefs);
90  Typemaker2_Inline_List_free(ty->inlines);
91  Typemaker2_VirtualFn_List_free(ty->virtualFns);
92  Typemaker2_Signal_List_free(ty->signals);
93  Typemaker2_Slot_List_free(ty->slots);
94 
95  GWEN_StringList_free(ty->structIncludes);
96  GWEN_StringList_free(ty->privateIncludes);
97  GWEN_StringList_free(ty->libraryIncludes);
98  GWEN_StringList_free(ty->publicIncludes);
99  GWEN_StringList_free(ty->codeIncludes);
100 
101  Typemaker2_Member_List_free(ty->members);
102  Typemaker2_Group_Tree_free(ty->groupTree);
103 
104  free(ty->fieldCountId);
105 
106  ty->refCount=0;
107  GWEN_FREE_OBJECT(ty);
108  }
109  else
110  ty->refCount--;
111  }
112 }
113 
114 
115 
117  assert(ty);
118  assert(ty->refCount);
119  ty->refCount++;
120 }
121 
122 
123 
124 const char *Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty) {
125  assert(ty);
126  assert(ty->refCount);
127  return ty->name;
128 }
129 
130 
131 
132 void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s) {
133  assert(ty);
134  assert(ty->refCount);
135  free(ty->name);
136  if (s && *s) ty->name=strdup(s);
137  else ty->name=NULL;
138 }
139 
140 
141 
143  assert(ty);
144  assert(ty->refCount);
145  return ty->descr;
146 }
147 
148 
149 
151  assert(ty);
152  assert(ty->refCount);
153  free(ty->descr);
154  if (s && *s) ty->descr=strdup(s);
155  else ty->descr=NULL;
156 }
157 
158 
159 
161  assert(ty);
162  assert(ty->refCount);
163 
164  /* nothing here? ask extended type */
165  if (ty->type==TypeMaker2_Type_Unknown &&
166  ty->extendsPtr)
167  return Typemaker2_Type_GetType(ty->extendsPtr);
168 
169  return ty->type;
170 }
171 
172 
173 
175  assert(ty);
176  assert(ty->refCount);
177  ty->type=i;
178 }
179 
180 
181 
183  assert(ty);
184  assert(ty->refCount);
185 
186  if (ty->aqdb_type==NULL && ty->extendsPtr)
187  return Typemaker2_Type_GetAqDbType(ty->extendsPtr);
188 
189  return ty->aqdb_type;
190 }
191 
192 
193 
195  assert(ty);
196  assert(ty->refCount);
197  free(ty->aqdb_type);
198  if (s && *s) ty->aqdb_type=strdup(s);
199  else ty->aqdb_type=NULL;
200 }
201 
202 
203 
205  assert(ty);
206  assert(ty->refCount);
207 
208  return ty->baseFileName;
209 }
210 
211 
212 
214  assert(ty);
215  assert(ty->refCount);
216  free(ty->baseFileName);
217  if (s && *s) ty->baseFileName=strdup(s);
218  else ty->baseFileName=NULL;
219 }
220 
221 
222 
224  assert(ty);
225  assert(ty->refCount);
226 
227  return ty->freeHook;
228 }
229 
230 
231 
233  assert(ty);
234  assert(ty->refCount);
235  free(ty->freeHook);
236  if (s && *s) ty->freeHook=strdup(s);
237  else ty->freeHook=NULL;
238 }
239 
240 
241 
243  assert(ty);
244  assert(ty->refCount);
245  return ty->extends;
246 }
247 
248 
249 
250 void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s) {
251  assert(ty);
252  assert(ty->refCount);
253  free(ty->extends);
254  if (s && *s) ty->extends=strdup(s);
255  else ty->extends=NULL;
256 }
257 
258 
259 
261  assert(ty);
262  assert(ty->refCount);
263 
264  if (ty->baseType==NULL && ty->extendsPtr)
265  return Typemaker2_Type_GetBaseType(ty->extendsPtr);
266 
267  return ty->baseType;
268 }
269 
270 
271 
273  assert(ty);
274  assert(ty->refCount);
275  free(ty->baseType);
276  if (s && *s) ty->baseType=strdup(s);
277  else ty->baseType=NULL;
278 }
279 
280 
281 
283  assert(ty);
284  assert(ty->refCount);
285 
286  if (ty->inherits==NULL && ty->extendsPtr)
287  return Typemaker2_Type_GetInherits(ty->extendsPtr);
288 
289  return ty->inherits;
290 }
291 
292 
293 
295  assert(ty);
296  assert(ty->refCount);
297  free(ty->inherits);
298  if (s && *s) ty->inherits=strdup(s);
299  else ty->inherits=NULL;
300 }
301 
302 
303 
305  assert(ty);
306  assert(ty->refCount);
307 
308  if (ty->flags==0 && ty->extendsPtr)
309  return Typemaker2_Type_GetFlags(ty->extendsPtr);
310 
311  return ty->flags;
312 }
313 
314 
315 
317  assert(ty);
318  assert(ty->refCount);
319  ty->flags=i;
320 }
321 
322 
323 
325  assert(ty);
326  assert(ty->refCount);
327 
328  if (ty->setFlags==0 && ty->extendsPtr)
329  return Typemaker2_Type_GetSetFlags(ty->extendsPtr);
330 
331  return ty->setFlags;
332 }
333 
334 
335 
337  assert(ty);
338  assert(ty->refCount);
339  ty->setFlags=i;
340 }
341 
342 
343 
345  assert(ty);
346  assert(ty->refCount);
347 
348  if (ty->getFlags==0 && ty->extendsPtr)
349  return Typemaker2_Type_GetGetFlags(ty->extendsPtr);
350 
351  return ty->getFlags;
352 }
353 
354 
355 
357  assert(ty);
358  assert(ty->refCount);
359  ty->getFlags=i;
360 }
361 
362 
363 
365  assert(ty);
366  assert(ty->refCount);
367 
368  if (ty->dupFlags==0 && ty->extendsPtr)
369  return Typemaker2_Type_GetDupFlags(ty->extendsPtr);
370 
371  return ty->dupFlags;
372 }
373 
374 
375 
377  assert(ty);
378  assert(ty->refCount);
379  ty->dupFlags=i;
380 }
381 
382 
383 
385  assert(ty);
386  assert(ty->refCount);
387 
388  if (ty->copyFlags==0 && ty->extendsPtr)
389  return Typemaker2_Type_GetCopyFlags(ty->extendsPtr);
390 
391  return ty->copyFlags;
392 }
393 
394 
395 
397  assert(ty);
398  assert(ty->refCount);
399  ty->copyFlags=i;
400 }
401 
402 
403 
405  assert(ty);
406  assert(ty->refCount);
407 
408  if (ty->access==TypeMaker2_Access_Unknown && ty->extendsPtr)
409  return Typemaker2_Type_GetAccess(ty->extendsPtr);
410 
411  return ty->access;
412 }
413 
414 
415 
417  assert(ty);
418  assert(ty->refCount);
419  ty->access=i;
420 }
421 
422 
423 
425  assert(ty);
426  assert(ty->refCount);
427  return ty->usePrivateConstructor;
428 }
429 
430 
431 
433  assert(ty);
434  assert(ty->refCount);
435  ty->usePrivateConstructor=i;
436 }
437 
438 
439 
441  assert(ty);
442  assert(ty->refCount);
443 
444  if (ty->defaultValue==NULL && ty->extendsPtr)
445  return Typemaker2_Type_GetDefaultValue(ty->extendsPtr);
446 
447  return ty->defaultValue;
448 }
449 
450 
451 
453  assert(ty);
454  assert(ty->refCount);
455  free(ty->defaultValue);
456  if (s && *s) ty->defaultValue=strdup(s);
457  else ty->defaultValue=NULL;
458 }
459 
460 
461 
463  assert(ty);
464  assert(ty->refCount);
465 
466  if (ty->presetValue==NULL && ty->extendsPtr)
467  return Typemaker2_Type_GetPresetValue(ty->extendsPtr);
468 
469  return ty->presetValue;
470 }
471 
472 
473 
475  assert(ty);
476  assert(ty->refCount);
477  free(ty->presetValue);
478  if (s && *s) ty->presetValue=strdup(s);
479  else ty->presetValue=NULL;
480 }
481 
482 
483 
485  assert(ty);
486  assert(ty->refCount);
487  return ty->identifier;
488 }
489 
490 
491 
493  assert(ty);
494  assert(ty->refCount);
495  free(ty->identifier);
496  if (s && *s) ty->identifier=strdup(s);
497  else ty->identifier=NULL;
498 }
499 
500 
501 
503  assert(ty);
504  assert(ty->refCount);
505  return ty->prefix;
506 }
507 
508 
509 
510 void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s) {
511  assert(ty);
512  assert(ty->refCount);
513  free(ty->prefix);
514  if (s && *s) ty->prefix=strdup(s);
515  else ty->prefix=NULL;
516 }
517 
518 
519 
521  assert(ty);
522  assert(ty->refCount);
523  return ty->extendsPtr;
524 }
525 
526 
527 
529  assert(ty);
530  assert(ty->refCount);
531  ty->extendsPtr=p;
532 }
533 
534 
535 
537  assert(ty);
538  assert(ty->refCount);
539  return ty->inheritsPtr;
540 }
541 
542 
543 
545  assert(ty);
546  assert(ty->refCount);
547  ty->inheritsPtr=p;
548 }
549 
550 
551 
553  assert(ty);
554  assert(ty->refCount);
555  return ty->baseTypePtr;
556 }
557 
558 
559 
561  assert(ty);
562  assert(ty->refCount);
563  ty->baseTypePtr=p;
564 }
565 
566 
567 
568 TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty) {
569  assert(ty);
570  assert(ty->refCount);
571  return ty->members;
572 }
573 
574 
575 
576 TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty) {
577  assert(ty);
578  assert(ty->refCount);
579  return ty->headers;
580 }
581 
582 
583 
584 TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty) {
585  assert(ty);
586  assert(ty->refCount);
587  return ty->enums;
588 }
589 
590 
591 
592 TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty) {
593  assert(ty);
594  assert(ty->refCount);
595  return ty->defines;
596 }
597 
598 
599 
600 TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty) {
601  assert(ty);
602  assert(ty->refCount);
603  return ty->codeDefs;
604 }
605 
606 
607 
608 TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty) {
609  assert(ty);
610  assert(ty->refCount);
611  return ty->inlines;
612 }
613 
614 
615 
616 TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty) {
617  assert(ty);
618  assert(ty->refCount);
619  return ty->virtualFns;
620 }
621 
622 
623 
624 TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty) {
625  assert(ty);
626  assert(ty->refCount);
627  return ty->signals;
628 }
629 
630 
631 
632 TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty) {
633  assert(ty);
634  assert(ty->refCount);
635  return ty->slots;
636 }
637 
638 
639 
640 TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty) {
641  assert(ty);
642  assert(ty->refCount);
643  return ty->groupTree;
644 }
645 
646 
647 
649  assert(ty);
650  assert(ty->refCount);
651  return ty->nonVolatileMemberCount;
652 }
653 
654 
655 
657  assert(ty);
658  assert(ty->refCount);
659  ty->nonVolatileMemberCount=i;
660 }
661 
662 
663 
665  assert(ty);
666  assert(ty->refCount);
667  return ty->fieldCountId;
668 }
669 
670 
671 
673  assert(ty);
674  assert(ty->refCount);
675  free(ty->fieldCountId);
676  if (s) ty->fieldCountId=strdup(s);
677  else ty->fieldCountId=NULL;
678 }
679 
680 
681 
682 
684  const char *wantedLang) {
685  GWEN_XMLNODE *n;
686 
687  /* read members */
688  n=GWEN_XMLNode_GetFirstTag(node);
689  while (n) {
690  const char *s;
691 
692  /* get tag name */
694  if (s) {
695  if (strcasecmp(s, "member")==0) {
696  TYPEMAKER2_MEMBER *tm;
697  int rv;
698 
700  rv=Typemaker2_Member_readXml(tm, n, wantedLang);
701  if (rv<0) {
702  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
704  return rv;
705  }
706  /* set current parentGroup as group */
707  Typemaker2_Member_SetGroupPtr(tm, parentGroup);
708 
709  Typemaker2_Member_List_Add(tm, ty->members);
710  }
711  else if (strcasecmp(s, "group")==0) {
712  TYPEMAKER2_GROUP *group;
713  int rv;
714 
715  /* create and read group */
716  group=Typemaker2_Group_new();
717  rv=Typemaker2_Group_readXml(group, n, wantedLang);
718  if (rv<0) {
719  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
720  Typemaker2_Group_free(group);
721  return rv;
722  }
723  Typemaker2_Group_Tree_AddChild(parentGroup, group);
724 
725  /* read sub-groups and -members */
726  rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, group, wantedLang);
727  if (rv<0) {
728  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
729  return rv;
730  }
731  }
732  }
733 
735  }
736 
737  return 0;
738 }
739 
740 
741 
742 
743 int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang) {
744  GWEN_XMLNODE *langNode=NULL;
745  GWEN_XMLNODE *n;
746  const char *s;
747  TYPEMAKER2_GROUP *rootGroup=NULL;
748 
749  /* parse type */
750  s=GWEN_XMLNode_GetProperty(node, "type", "opaque");
751  if (strcasecmp(s, "opaque")==0)
753  else if (strcasecmp(s, "pointer")==0)
755  else if (strcasecmp(s, "array")==0)
757  else {
758  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type [%s]", s);
759  return GWEN_ERROR_BAD_DATA;
760  }
761 
762  s=GWEN_XMLNode_GetProperty(node, "id", NULL);
764 
765  s=GWEN_XMLNode_GetProperty(node, "extends", NULL);
767 
768  s=GWEN_XMLNode_GetProperty(node, "basetype", NULL);
770 
771  if (wantedLang)
772  langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang);
773  if (langNode==NULL)
774  langNode=node;
775 
776  /* read identifier and prefix */
777  s=GWEN_XMLNode_GetCharValue(langNode, "identifier", NULL);
779 
780  s=GWEN_XMLNode_GetCharValue(langNode, "prefix", NULL);
782 
783  s=GWEN_XMLNode_GetCharValue(langNode, "aqdb_type", NULL);
785 
786  /* read base file name (used to derive other output filenames) */
787  s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL);
789 
790  s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL);
792 
793  /* read flags. this element exists for <type> elements.
794  * For <typedef> elements the flags are stored in the <defaults> group. */
795  s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL);
796  if (s && *s)
798 
799  /* read headers */
800  n=GWEN_XMLNode_FindFirstTag(langNode, "headers", NULL, NULL);
801  if (n) {
802  GWEN_XMLNODE *nn;
803 
804  nn=GWEN_XMLNode_FindFirstTag(n, "header", NULL, NULL);
805  while(nn) {
806  TYPEMAKER2_HEADER *th;
807  int rv;
808 
810  rv=Typemaker2_Header_readXml(th, nn);
811  if (rv<0) {
812  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
814  return rv;
815  }
816  Typemaker2_Header_List_Add(th, ty->headers);
817  nn=GWEN_XMLNode_FindNextTag(nn, "header", NULL, NULL);
818  }
819  }
820 
821  /* read description */
822  n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL);
823  if (n) {
824  GWEN_BUFFER *tbuf;
825  int rv;
826 
827  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
829  if (rv<0) {
830  DBG_ERROR(0, "here (%d)", rv);
831  }
832  else {
834  }
835  GWEN_Buffer_free(tbuf);
836  }
837 
838  /* create and add root group */
839  Typemaker2_Group_Tree_Clear(ty->groupTree);
840  rootGroup=Typemaker2_Group_new();
843 
844  Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup);
845 
846  /* read members */
847  n=GWEN_XMLNode_FindFirstTag(node, "members", NULL, NULL);
848  if (n) {
849  int rv;
850 
851  rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, rootGroup, wantedLang);
852  if (rv<0) {
853  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
854  return rv;
855  }
856  }
857 
858  /* read codedefs */
859  n=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL);
860  if (n) {
861  GWEN_XMLNODE *nn;
862 
863  nn=GWEN_XMLNode_FindFirstTag(n, "codedef", NULL, NULL);
864  while(nn) {
865  TYPEMAKER2_CODE *tc;
866 
868  if (tc) {
869  const char *s;
870 
872  if (s && *s)
874 
876  if (s && *s)
878  }
879 
880  Typemaker2_Code_List_Add(tc, ty->codeDefs);
881  nn=GWEN_XMLNode_FindNextTag(nn, "codedef", NULL, NULL);
882  }
883  }
884 
885  /* read inlines */
886  n=GWEN_XMLNode_FindFirstTag(langNode, "inlines", NULL, NULL);
887  if (n) {
888  GWEN_XMLNODE *nn;
889 
890  nn=GWEN_XMLNode_FindFirstTag(n, "inline", NULL, NULL);
891  while(nn) {
892  TYPEMAKER2_INLINE *ti;
893 
895  Typemaker2_Inline_List_Add(ti, ty->inlines);
896  nn=GWEN_XMLNode_FindNextTag(nn, "inline", NULL, NULL);
897  }
898  }
899 
900  /* read enums */
901  n=GWEN_XMLNode_FindFirstTag(node, "enums", NULL, NULL);
902  if (n) {
903  GWEN_XMLNODE *nn;
904 
905  nn=GWEN_XMLNode_FindFirstTag(n, "enum", NULL, NULL);
906  while(nn) {
907  TYPEMAKER2_ENUM *te;
908  GWEN_XMLNODE *nnn;
909 
911 
912  /* read items */
913  nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
914  while(nnn) {
915  TYPEMAKER2_ITEM *ti;
916 
917  ti=Typemaker2_Item_fromXml(nnn);
918  Typemaker2_Item_List_Add(ti, Typemaker2_Enum_GetItems(te));
919  nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
920  }
921 
922  Typemaker2_Enum_List_Add(te, ty->enums);
923  nn=GWEN_XMLNode_FindNextTag(nn, "enum", NULL, NULL);
924  }
925  }
926 
927  /* read defines */
928  n=GWEN_XMLNode_FindFirstTag(node, "defines", NULL, NULL);
929  if (n) {
930  GWEN_XMLNODE *nn;
931 
932  nn=GWEN_XMLNode_FindFirstTag(n, "define", NULL, NULL);
933  while(nn) {
934  TYPEMAKER2_DEFINE *td;
935  GWEN_XMLNODE *nnn;
936 
938 
939  /* read items */
940  nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
941  while(nnn) {
942  TYPEMAKER2_ITEM *ti;
943 
944  ti=Typemaker2_Item_fromXml(nnn);
945  Typemaker2_Item_List_Add(ti, Typemaker2_Define_GetItems(td));
946  nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
947  }
948 
949  Typemaker2_Define_List_Add(td, ty->defines);
950  nn=GWEN_XMLNode_FindNextTag(nn, "define", NULL, NULL);
951  }
952  }
953 
954  /* read virtual functions */
955  n=GWEN_XMLNode_FindFirstTag(node, "virtualFns", NULL, NULL);
956  if (n) {
957  GWEN_XMLNODE *nn;
958 
959  nn=GWEN_XMLNode_FindFirstTag(n, "fn", NULL, NULL);
960  while(nn) {
962  int rv;
963 
965  rv=Typemaker2_VirtualFn_readXml(vf, nn);
966  if (rv<0) {
967  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
969  return rv;
970  }
971  Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns);
972  nn=GWEN_XMLNode_FindNextTag(nn, "fn", NULL, NULL);
973  }
974  }
975 
976  /* read signals */
977  n=GWEN_XMLNode_FindFirstTag(node, "signals", NULL, NULL);
978  if (n) {
979  GWEN_XMLNODE *nn;
980 
981  nn=GWEN_XMLNode_FindFirstTag(n, "signal", NULL, NULL);
982  while(nn) {
983  TYPEMAKER2_SIGNAL *sig;
984  GWEN_XMLNODE *nnn;
985  int i;
986 
987  s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
988  if (!(s && *s)) {
989  DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed signal");
990  return GWEN_ERROR_INVALID;
991  }
992  sig=Typemaker2_Signal_new();
994  Typemaker2_Signal_SetParamType1(sig, "none");
995  Typemaker2_Signal_SetParamType2(sig, "none");
996 
997  i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
998  if (i)
1000  i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1001  if (i)
1003 
1004  nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1005  if (nnn) {
1006  GWEN_XMLNODE *nnnn;
1007  int i;
1008 
1009  nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1010  i=1;
1011  while(nnnn && i<3) {
1012  const char *s;
1013 
1014  s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1015  if (i==1)
1017  else
1019  i++;
1020  nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1021  }
1022  }
1023  Typemaker2_Signal_List_Add(sig, ty->signals);
1024  nn=GWEN_XMLNode_FindNextTag(nn, "signal", NULL, NULL);
1025  }
1026  }
1027 
1028 
1029  /* read slots */
1030  n=GWEN_XMLNode_FindFirstTag(node, "slots", NULL, NULL);
1031  if (n) {
1032  GWEN_XMLNODE *nn;
1033 
1034  nn=GWEN_XMLNode_FindFirstTag(n, "slot", NULL, NULL);
1035  while(nn) {
1036  TYPEMAKER2_SLOT *slot;
1037  GWEN_XMLNODE *nnn;
1038  int i;
1039 
1040  s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1041  if (!(s && *s)) {
1042  DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed slot");
1043  return GWEN_ERROR_INVALID;
1044  }
1045  slot=Typemaker2_Slot_new();
1046  Typemaker2_Slot_SetName(slot, s);
1047  Typemaker2_Slot_SetParamType1(slot, "none");
1048  Typemaker2_Slot_SetParamType2(slot, "none");
1049 
1050  i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1051  if (i)
1053  i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1054  if (i)
1056 
1057 
1058  nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1059  if (nnn) {
1060  GWEN_XMLNODE *nnnn;
1061  int i;
1062 
1063  nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1064  i=1;
1065  while(nnnn && i<3) {
1066  const char *s;
1067 
1068  s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1069  if (i==1)
1071  else
1073  i++;
1074  nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1075  }
1076  }
1077  Typemaker2_Slot_List_Add(slot, ty->slots);
1078  nn=GWEN_XMLNode_FindNextTag(nn, "slot", NULL, NULL);
1079  }
1080  }
1081 
1082 
1083  /* read defaults */
1084  n=GWEN_XMLNode_FindFirstTag(langNode, "defaults", NULL, NULL);
1085  if (n) {
1086  s=GWEN_XMLNode_GetCharValue(n, "default", NULL);
1088 
1089  s=GWEN_XMLNode_GetCharValue(n, "preset", NULL);
1091 
1092  /* read flags */
1093  s=GWEN_XMLNode_GetCharValue(n, "flags", NULL);
1094  if (s && *s)
1096 
1097  /* read setflags */
1098  s=GWEN_XMLNode_GetCharValue(n, "setflags", NULL);
1099  if (s && *s)
1101 
1102  /* read getflags */
1103  s=GWEN_XMLNode_GetCharValue(n, "getflags", NULL);
1104  if (s && *s)
1106 
1107  /* read dupflags */
1108  s=GWEN_XMLNode_GetCharValue(n, "dupflags", NULL);
1109  if (s && *s)
1111 
1112  /* read copyflags */
1113  s=GWEN_XMLNode_GetCharValue(n, "copyflags", NULL);
1114  if (s && *s)
1116 
1117  /* read access */
1118  s=GWEN_XMLNode_GetCharValue(n, "access", NULL);
1119  if (s && *s) {
1120  int i=Typemaker2_AccessFromString(s);
1121  if (i==TypeMaker2_Access_Unknown) {
1122  DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s);
1123  return GWEN_ERROR_BAD_DATA;
1124  }
1126  }
1127  }
1128 
1129  s=GWEN_XMLNode_GetProperty(langNode, "usePrivateConstructor", "0");
1130  if (s && *s)
1132 
1133  return 0;
1134 }
1135 
1136 
1137 
1138 void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent) {
1139  if (ty) {
1140  int i;
1141  TYPEMAKER2_MEMBER *tm;
1142  const char *s1, *s2;
1143 
1144  for (i=0; i<indent; i++) fprintf(f, " ");
1145  fprintf(f, "Type\n");
1146 
1147  for (i=0; i<indent+2; i++) fprintf(f, " ");
1148  fprintf(f, "Name : %s\n", (ty->name)?(ty->name):"<null>");
1149 
1150  for (i=0; i<indent+2; i++) fprintf(f, " ");
1151  fprintf(f, "Identifier: %s\n", (ty->identifier)?(ty->identifier):"<null>");
1152 
1153  for (i=0; i<indent+2; i++) fprintf(f, " ");
1154  fprintf(f, "AEDB Type : %s\n", (ty->aqdb_type)?(ty->aqdb_type):"<null>");
1155 
1156  for (i=0; i<indent+2; i++) fprintf(f, " ");
1157  fprintf(f, "Extends : %s\n", (ty->extends)?(ty->extends):"<null>");
1158 
1159  for (i=0; i<indent+2; i++) fprintf(f, " ");
1160  s1=ty->inherits;
1162  fprintf(f, "Inherits : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1163 
1164  for (i=0; i<indent+2; i++) fprintf(f, " ");
1165  fprintf(f, "BaseType : %s\n", (ty->baseType)?(ty->baseType):"<null>");
1166 
1167  for (i=0; i<indent+2; i++) fprintf(f, " ");
1168  fprintf(f, "Prefix : %s\n", (ty->prefix)?(ty->prefix):"<null>");
1169 
1170  for (i=0; i<indent+2; i++) fprintf(f, " ");
1171  fprintf(f, "Access : %d [%d]\n", ty->access, Typemaker2_Type_GetAccess(ty));
1172 
1173  for (i=0; i<indent+2; i++) fprintf(f, " ");
1174  fprintf(f, "Flags : %08x [%08x]\n", ty->flags, Typemaker2_Type_GetFlags(ty));
1175 
1176  for (i=0; i<indent+2; i++) fprintf(f, " ");
1177  fprintf(f, "SetFlags : %08x [%08x]\n", ty->setFlags, Typemaker2_Type_GetSetFlags(ty));
1178 
1179  for (i=0; i<indent+2; i++) fprintf(f, " ");
1180  fprintf(f, "GetFlags : %08x [%08x]\n", ty->getFlags, Typemaker2_Type_GetGetFlags(ty));
1181 
1182  for (i=0; i<indent+2; i++) fprintf(f, " ");
1183  fprintf(f, "DupFlags : %08x [%08x]\n", ty->dupFlags, Typemaker2_Type_GetDupFlags(ty));
1184 
1185  for (i=0; i<indent+2; i++) fprintf(f, " ");
1186  fprintf(f, "CopyFlags : %08x [%08x]\n", ty->copyFlags, Typemaker2_Type_GetCopyFlags(ty));
1187 
1188  for (i=0; i<indent+2; i++) fprintf(f, " ");
1189  s1=ty->defaultValue;
1191  fprintf(f, "Default : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1192 
1193  for (i=0; i<indent+2; i++) fprintf(f, " ");
1194  s1=ty->presetValue;
1196  fprintf(f, "Preset : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1197 
1198  for (i=0; i<indent+2; i++) fprintf(f, " ");
1199  fprintf(f, "Members\n");
1200  tm=Typemaker2_Member_List_First(ty->members);
1201  if (tm==NULL) {
1202  for (i=0; i<indent+4; i++) fprintf(f, " ");
1203  fprintf(f, "none\n");
1204  }
1205  else {
1206  while(tm) {
1207  Typemaker2_Member_Dump(tm, f, indent+4);
1208  tm=Typemaker2_Member_List_Next(tm);
1209  }
1210  }
1211  for (i=0; i<indent+2; i++) fprintf(f, " ");
1212  fprintf(f, "Field Count Id: %s\n", (ty->fieldCountId)?(ty->fieldCountId):"<null>");
1213 
1214  for (i=0; i<indent+2; i++) fprintf(f, " ");
1215  fprintf(f, "Descript. : %s\n", (ty->descr)?(ty->descr):"<null>");
1216 
1217  }
1218 }
1219 
1220 
1221 
1223  TYPEMAKER2_ENUM *te;
1224 
1225  assert(ty);
1226  te=Typemaker2_Enum_List_First(ty->enums);
1227  while(te) {
1228  const char *n;
1229 
1230  n=Typemaker2_Enum_GetId(te);
1231  if (n && strcasecmp(s, n)==0)
1232  break;
1233  te=Typemaker2_Enum_List_Next(te);
1234  }
1235 
1236  return te;
1237 }
1238 
1239 
1240 
1242  const TYPEMAKER2_MEMBER *tm,
1243  const char *id) {
1244  TYPEMAKER2_CODE *tc=NULL;
1245  uint32_t flags=0;
1246 
1247  if (tm)
1248  flags=Typemaker2_Member_GetFlags(tm);
1249 
1250  /* try code within member definition first, if any */
1251  if (tm) {
1252  tc=Typemaker2_Code_List_First(Typemaker2_Member_GetCodeDefs(tm));
1253  while(tc) {
1254  const char *s;
1255 
1256  s=Typemaker2_Code_GetId(tc);
1257  if (s && strcasecmp(s, id)==0) {
1259  return tc;
1260  }
1261  tc=Typemaker2_Code_List_Next(tc);
1262  }
1263  }
1264 
1265  while(ty) {
1266  tc=Typemaker2_Code_List_First(ty->codeDefs);
1267  while(tc) {
1268  const char *s;
1269 
1270  s=Typemaker2_Code_GetId(tc);
1271  if (s && strcasecmp(s, id)==0) {
1273  return tc;
1274  }
1275  tc=Typemaker2_Code_List_Next(tc);
1276  }
1277 
1278  ty=ty->extendsPtr;
1279  }
1280 
1281  return NULL;
1282 }
1283 
1284 
1285 
1286 
1287 
int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:404
void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:250
void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:232
TYPEMAKER2_VIRTUALFN_LIST * Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:616
void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:492
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:223
void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:396
void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
Definition: tm_signal.c:157
void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
Definition: tm_type.c:1138
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:206
void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src)
Definition: tm_code.c:232
const char * Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:142
struct TYPEMAKER2_SIGNAL TYPEMAKER2_SIGNAL
Definition: tm_signal.h:27
void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:656
TYPEMAKER2_ITEM_LIST * Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:191
void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:356
TYPEMAKER2_ENUM * Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_enum.c:377
void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:213
GWENHYWFAR_API int GWEN_XMLNode_toBuffer(const GWEN_XMLNODE *n, GWEN_BUFFER *buf, uint32_t flags)
Definition: xmlrw.c:351
int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
Definition: tm_type.c:743
#define GWEN_ERROR_INVALID
Definition: error.h:67
void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:64
const char * Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:242
void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:416
#define GWEN_XML_FLAGS_SIMPLE
Definition: xml.h:89
TYPEMAKER2_SLOT_LIST * Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:632
const char * GWEN_XMLNode_GetProperty(const GWEN_XMLNODE *n, const char *name, const char *defaultValue)
Definition: xml.c:228
int Typemaker2_Type_readMembersAndGroupsXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, TYPEMAKER2_GROUP *parentGroup, const char *wantedLang)
Definition: tm_type.c:683
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:576
const char * Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:182
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:520
void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:560
GWEN_XMLNODE * GWEN_XMLNode_FindNextTag(const GWEN_XMLNODE *n, const char *tname, const char *pname, const char *pvalue)
Definition: xml.c:712
void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:474
const char * Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:155
TYPEMAKER2_MEMBER * Typemaker2_Member_new()
Definition: tm_member.c:31
TYPEMAKER2_SLOT * Typemaker2_Slot_new(void)
Definition: tm_slot.c:24
void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:544
TYPEMAKER2_SIGNAL * Typemaker2_Signal_new(void)
Definition: tm_signal.c:24
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
#define NULL
Definition: binreloc.c:290
struct TYPEMAKER2_SLOT TYPEMAKER2_SLOT
Definition: tm_slot.h:27
#define TYPEMAKER2_SLOT_FLAGS_USE_PARAM3
Definition: tm_slot.h:17
#define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4
Definition: tm_signal.h:18
void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:45
TYPEMAKER2_TYPE * Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:552
struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP
Definition: tm_group.h:19
#define GWEN_LOGDOMAIN
Definition: logger.h:35
uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:324
const char * Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:160
void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:294
struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE
Definition: tm_define.h:24
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition: tm_header.h:19
void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
Definition: tm_signal.c:144
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
Definition: tm_enum.h:24
uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:384
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:38
TYPEMAKER2_SIGNAL_LIST * Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:624
struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM
Definition: tm_item.h:22
void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent)
Definition: tm_member.c:647
const char * Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:462
void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:510
struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE
Definition: tm_inline.h:19
struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN
Definition: tm_virtualfn.h:21
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition: stringlist.c:57
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_Enum_GetId(const TYPEMAKER2_ENUM *p_struct)
Definition: tm_enum.c:176
TYPEMAKER2_TYPE * Typemaker2_Type_new()
Definition: tm_type.c:32
void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:432
TYPEMAKER2_INLINE_LIST * Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:608
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf)
Definition: tm_virtualfn.c:44
int GWEN_XMLNode_GetIntProperty(const GWEN_XMLNODE *n, const char *name, int defaultValue)
Definition: xml.c:251
void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr)
Definition: tm_member.c:466
const char * GWEN_XMLNode_GetCharValue(const GWEN_XMLNODE *n, const char *name, const char *defValue)
Definition: xml.c:729
GWEN_XMLNODE * GWEN_XMLNode_GetNextTag(const GWEN_XMLNODE *n)
Definition: xml.c:635
void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:272
TYPEMAKER2_ITEM * Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_item.c:187
void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:336
TYPEMAKER2_HEADER * Typemaker2_Header_new()
Definition: tm_header.c:29
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:484
uint32_t Typemaker2_FlagsFromString(const char *t)
Definition: tm_util.c:23
int Typemaker2_AccessFromString(const char *s)
Definition: tm_util.c:157
uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:170
const char * Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:223
TYPEMAKER2_CODE_LIST * Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:490
int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node)
Definition: tm_virtualfn.c:73
uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:364
TYPEMAKER2_CODE * Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_code.c:332
TYPEMAKER2_GROUP * Typemaker2_Group_new()
Definition: tm_group.c:29
const char * Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:282
TYPEMAKER2_ITEM_LIST * Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:190
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:648
int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node, const char *wantedLang)
Definition: tm_member.c:498
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:568
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:83
int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node, const char *wantedLang)
Definition: tm_group.c:106
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:41
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
const char * Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:124
void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:672
#define GWEN_XML_FLAGS_HANDLE_COMMENTS
Definition: xml.h:60
TYPEMAKER2_INLINE * Typemaker2_Inline_fromXml(GWEN_XMLNODE *node)
Definition: tm_inline.c:132
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
GWEN_XMLNODE * GWEN_XMLNode_GetFirstTag(const GWEN_XMLNODE *n)
Definition: xml.c:629
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition: tm_type.h:21
#define TYPEMAKER2_SLOT_FLAGS_USE_PARAM4
Definition: tm_slot.h:18
const char * GWEN_XMLNode_GetData(const GWEN_XMLNODE *n)
Definition: xml.c:351
void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src)
Definition: tm_slot.c:170
uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:344
void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src)
Definition: tm_signal.c:170
uint32_t Typemaker2_TypeFlagsFromString(const char *t)
Definition: tm_util.c:92
const char * Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:260
#define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3
Definition: tm_signal.h:17
void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i)
Definition: tm_type.c:174
void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src)
Definition: tm_code.c:237
TYPEMAKER2_DEFINE * Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db)
Definition: tm_define.c:370
void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s)
Definition: tm_group.c:95
TYPEMAKER2_VIRTUALFN * Typemaker2_VirtualFn_new()
Definition: tm_virtualfn.c:30
TYPEMAKER2_ENUM_LIST * Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:584
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
int Typemaker2_Header_readXml(TYPEMAKER2_HEADER *th, GWEN_XMLNODE *node)
Definition: tm_header.c:115
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:502
void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr)
Definition: tm_group.c:41
void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src)
Definition: tm_signal.c:188
TYPEMAKER2_TYPE * Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:536
#define GWEN_LIST_INIT(t, element)
Definition: list1.h:465
int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:160
void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:132
TYPEMAKER2_CODE_LIST * Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:600
void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:316
int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:424
GWEN_LIST_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
struct TYPEMAKER2_CODE TYPEMAKER2_CODE
Definition: tm_code.h:24
void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:116
void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition: tm_type.c:528
void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s)
Definition: tm_group.c:75
void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition: tm_type.c:376
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:640
void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src)
Definition: tm_slot.c:157
void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:194
void Typemaker2_Header_free(TYPEMAKER2_HEADER *th)
Definition: tm_header.c:41
GWEN_STRINGLIST * GWEN_StringList_new(void)
Definition: stringlist.c:46
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:304
const char * Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:440
void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src)
Definition: tm_slot.c:188
void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:452
#define GWEN_LIST_FINI(t, element)
Definition: list1.h:474
TYPEMAKER2_ENUM * Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:1222
struct GWEN__XMLNODE GWEN_XMLNODE
Definition: xml.h:148
TYPEMAKER2_CODE * Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id)
Definition: tm_type.c:1241
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:592
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:664
uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:175
void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src)
Definition: tm_slot.c:144
const char * Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct)
Definition: tm_code.c:150
const char * Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:204
void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s)
Definition: tm_type.c:150