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