gwenhywfar 5.12.0
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 return ty->pack;
294}
295
296
297
299{
300 assert(ty);
301 assert(ty->refCount);
302 ty->pack=i;
303}
304
305
306
307
308
310{
311 assert(ty);
312 assert(ty->refCount);
313
314 if (ty->baseType==NULL && ty->extendsPtr)
315 return Typemaker2_Type_GetBaseType(ty->extendsPtr);
316
317 return ty->baseType;
318}
319
320
321
323{
324 assert(ty);
325 assert(ty->refCount);
326 free(ty->baseType);
327 if (s && *s)
328 ty->baseType=strdup(s);
329 else
330 ty->baseType=NULL;
331}
332
333
334
336{
337 assert(ty);
338 assert(ty->refCount);
339
340 if (ty->inherits==NULL && ty->extendsPtr)
341 return Typemaker2_Type_GetInherits(ty->extendsPtr);
342
343 return ty->inherits;
344}
345
346
347
349{
350 assert(ty);
351 assert(ty->refCount);
352 free(ty->inherits);
353 if (s && *s)
354 ty->inherits=strdup(s);
355 else
356 ty->inherits=NULL;
357}
358
359
360
362{
363 assert(ty);
364 assert(ty->refCount);
365
366 if (ty->flags==0 && ty->extendsPtr)
367 return Typemaker2_Type_GetFlags(ty->extendsPtr);
368
369 return ty->flags;
370}
371
372
373
375{
376 assert(ty);
377 assert(ty->refCount);
378 ty->flags=i;
379}
380
381
382
384{
385 assert(ty);
386 assert(ty->refCount);
387
388 if (ty->setFlags==0 && ty->extendsPtr)
389 return Typemaker2_Type_GetSetFlags(ty->extendsPtr);
390
391 return ty->setFlags;
392}
393
394
395
397{
398 assert(ty);
399 assert(ty->refCount);
400 ty->setFlags=i;
401}
402
403
404
406{
407 assert(ty);
408 assert(ty->refCount);
409
410 if (ty->getFlags==0 && ty->extendsPtr)
411 return Typemaker2_Type_GetGetFlags(ty->extendsPtr);
412
413 return ty->getFlags;
414}
415
416
417
419{
420 assert(ty);
421 assert(ty->refCount);
422 ty->getFlags=i;
423}
424
425
426
428{
429 assert(ty);
430 assert(ty->refCount);
431
432 if (ty->dupFlags==0 && ty->extendsPtr)
433 return Typemaker2_Type_GetDupFlags(ty->extendsPtr);
434
435 return ty->dupFlags;
436}
437
438
439
441{
442 assert(ty);
443 assert(ty->refCount);
444 ty->dupFlags=i;
445}
446
447
448
450{
451 assert(ty);
452 assert(ty->refCount);
453
454 if (ty->copyFlags==0 && ty->extendsPtr)
455 return Typemaker2_Type_GetCopyFlags(ty->extendsPtr);
456
457 return ty->copyFlags;
458}
459
460
461
463{
464 assert(ty);
465 assert(ty->refCount);
466 ty->copyFlags=i;
467}
468
469
470
472{
473 assert(ty);
474 assert(ty->refCount);
475
476 if (ty->access==TypeMaker2_Access_Unknown && ty->extendsPtr)
477 return Typemaker2_Type_GetAccess(ty->extendsPtr);
478
479 return ty->access;
480}
481
482
483
485{
486 assert(ty);
487 assert(ty->refCount);
488 ty->access=i;
489}
490
491
492
494{
495 assert(ty);
496 assert(ty->refCount);
497
498 if (ty->structAccess==TypeMaker2_Access_Unknown && ty->extendsPtr)
499 return Typemaker2_Type_GetStructAccess(ty->extendsPtr);
500
501 return ty->structAccess;
502}
503
504
505
507{
508 assert(ty);
509 assert(ty->refCount);
510 ty->structAccess=i;
511}
512
513
514
516{
517 assert(ty);
518 assert(ty->refCount);
519 return ty->usePrivateConstructor;
520}
521
522
523
525{
526 assert(ty);
527 assert(ty->refCount);
528 ty->usePrivateConstructor=i;
529}
530
531
532
534{
535 assert(ty);
536 assert(ty->refCount);
537
538 if (ty->defaultValue==NULL && ty->extendsPtr)
539 return Typemaker2_Type_GetDefaultValue(ty->extendsPtr);
540
541 return ty->defaultValue;
542}
543
544
545
547{
548 assert(ty);
549 assert(ty->refCount);
550 free(ty->defaultValue);
551 if (s && *s)
552 ty->defaultValue=strdup(s);
553 else
554 ty->defaultValue=NULL;
555}
556
557
558
560{
561 assert(ty);
562 assert(ty->refCount);
563
564 if (ty->presetValue==NULL && ty->extendsPtr)
565 return Typemaker2_Type_GetPresetValue(ty->extendsPtr);
566
567 return ty->presetValue;
568}
569
570
571
573{
574 assert(ty);
575 assert(ty->refCount);
576 free(ty->presetValue);
577 if (s && *s)
578 ty->presetValue=strdup(s);
579 else
580 ty->presetValue=NULL;
581}
582
583
584
586{
587 assert(ty);
588 assert(ty->refCount);
589 return ty->identifier;
590}
591
592
593
595{
596 assert(ty);
597 assert(ty->refCount);
598 free(ty->identifier);
599 if (s && *s)
600 ty->identifier=strdup(s);
601 else
602 ty->identifier=NULL;
603}
604
605
606
608{
609 assert(ty);
610 assert(ty->refCount);
611 return ty->prefix;
612}
613
614
615
617{
618 assert(ty);
619 assert(ty->refCount);
620 free(ty->prefix);
621 if (s && *s)
622 ty->prefix=strdup(s);
623 else
624 ty->prefix=NULL;
625}
626
627
628
630{
631 assert(ty);
632 assert(ty->refCount);
633 return ty->extendsPtr;
634}
635
636
637
639{
640 assert(ty);
641 assert(ty->refCount);
642 ty->extendsPtr=p;
643}
644
645
646
648{
649 assert(ty);
650 assert(ty->refCount);
651 return ty->inheritsPtr;
652}
653
654
655
657{
658 assert(ty);
659 assert(ty->refCount);
660 ty->inheritsPtr=p;
661}
662
663
664
666{
667 assert(ty);
668 assert(ty->refCount);
669 return ty->baseTypePtr;
670}
671
672
673
675{
676 assert(ty);
677 assert(ty->refCount);
678 ty->baseTypePtr=p;
679}
680
681
682
683TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
684{
685 assert(ty);
686 assert(ty->refCount);
687 return ty->members;
688}
689
690
691
692TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
693{
694 assert(ty);
695 assert(ty->refCount);
696 return ty->headers;
697}
698
699
700
701TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
702{
703 assert(ty);
704 assert(ty->refCount);
705 return ty->enums;
706}
707
708
709
710TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
711{
712 assert(ty);
713 assert(ty->refCount);
714 return ty->defines;
715}
716
717
718
719TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty)
720{
721 assert(ty);
722 assert(ty->refCount);
723 return ty->codeDefs;
724}
725
726
727
728TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
729{
730 assert(ty);
731 assert(ty->refCount);
732 return ty->inlines;
733}
734
735
736
737TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
738{
739 assert(ty);
740 assert(ty->refCount);
741 return ty->virtualFns;
742}
743
744
745
746TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
747{
748 assert(ty);
749 assert(ty->refCount);
750 return ty->signals;
751}
752
753
754
755TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
756{
757 assert(ty);
758 assert(ty->refCount);
759 return ty->slots;
760}
761
762
763
764TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
765{
766 assert(ty);
767 assert(ty->refCount);
768 return ty->groupTree;
769}
770
771
772
774{
775 assert(ty);
776 assert(ty->refCount);
777 return ty->nonVolatileMemberCount;
778}
779
780
781
783{
784 assert(ty);
785 assert(ty->refCount);
786 ty->nonVolatileMemberCount=i;
787}
788
789
790
792{
793 assert(ty);
794 assert(ty->refCount);
795 return ty->fieldCountId;
796}
797
798
799
801{
802 assert(ty);
803 assert(ty->refCount);
804 free(ty->fieldCountId);
805 if (s)
806 ty->fieldCountId=strdup(s);
807 else
808 ty->fieldCountId=NULL;
809}
810
811
812
813
815 const char *wantedLang)
816{
817 GWEN_XMLNODE *n;
818
819 /* read members */
821 while (n) {
822 const char *s;
823
824 /* get tag name */
826 if (s) {
827 if (strcasecmp(s, "member")==0) {
829 int rv;
830
832 rv=Typemaker2_Member_readXml(tm, n, wantedLang);
833 if (rv<0) {
834 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
836 return rv;
837 }
838 /* set current parentGroup as group */
839 Typemaker2_Member_SetGroupPtr(tm, parentGroup);
840
841 Typemaker2_Member_List_Add(tm, ty->members);
842 }
843 else if (strcasecmp(s, "group")==0) {
844 TYPEMAKER2_GROUP *group;
845 int rv;
846
847 /* create and read group */
848 group=Typemaker2_Group_new();
849 rv=Typemaker2_Group_readXml(group, n, wantedLang);
850 if (rv<0) {
851 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
853 return rv;
854 }
855 Typemaker2_Group_Tree_AddChild(parentGroup, group);
856
857 /* read sub-groups and -members */
858 rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, group, wantedLang);
859 if (rv<0) {
860 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
861 return rv;
862 }
863 }
864 }
865
867 }
868
869 return 0;
870}
871
872
873
874
875int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang)
876{
877 GWEN_XMLNODE *langNode=NULL;
878 GWEN_XMLNODE *n;
879 const char *s;
880 TYPEMAKER2_GROUP *rootGroup=NULL;
881
882 /* parse type */
883 s=GWEN_XMLNode_GetProperty(node, "type", "opaque");
884 if (strcasecmp(s, "opaque")==0)
886 else if (strcasecmp(s, "pointer")==0)
888 else if (strcasecmp(s, "array")==0)
890 else {
891 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type [%s]", s);
892 return GWEN_ERROR_BAD_DATA;
893 }
894
895 s=GWEN_XMLNode_GetProperty(node, "id", NULL);
897
898 s=GWEN_XMLNode_GetProperty(node, "extends", NULL);
900
901 s=GWEN_XMLNode_GetProperty(node, "basetype", NULL);
903
904 if (wantedLang)
905 langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang);
906 if (langNode==NULL)
907 langNode=node;
908
909 /* read identifier and prefix */
910 s=GWEN_XMLNode_GetCharValue(langNode, "identifier", NULL);
912
913 s=GWEN_XMLNode_GetCharValue(langNode, "prefix", NULL);
915
916 s=GWEN_XMLNode_GetCharValue(langNode, "aqdb_type", NULL);
918
919 /* read base file name (used to derive other output filenames) */
920 s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL);
922
923 s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL);
925
926 ty->pack=GWEN_XMLNode_GetIntValue(langNode, "pack", 0);
927
928 s=GWEN_XMLNode_GetCharValue(langNode, "structAccess", "private");
929 if (s && *s) {
930 ty->structAccess=Typemaker2_AccessFromString(s);
931 if (ty->structAccess==TypeMaker2_Access_Unknown) {
932 DBG_ERROR(0, "Invalid structAcces entry [%s]", s);
933 return GWEN_ERROR_BAD_DATA;
934 }
935 }
936 else
937 ty->structAccess=TypeMaker2_Access_Private;
938
939 /* read flags. this element exists for <type> elements.
940 * For <typedef> elements the flags are stored in the <defaults> group. */
941 s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL);
942 if (s && *s)
944
945 /* read headers */
946 n=GWEN_XMLNode_FindFirstTag(langNode, "headers", NULL, NULL);
947 if (n) {
948 GWEN_XMLNODE *nn;
949
950 nn=GWEN_XMLNode_FindFirstTag(n, "header", NULL, NULL);
951 while (nn) {
953 int rv;
954
956 rv=Typemaker2_Header_readXml(th, nn);
957 if (rv<0) {
958 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
960 return rv;
961 }
962 Typemaker2_Header_List_Add(th, ty->headers);
963 nn=GWEN_XMLNode_FindNextTag(nn, "header", NULL, NULL);
964 }
965 }
966
967 /* read description */
968 n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL);
969 if (n) {
970 GWEN_BUFFER *tbuf;
971 int rv;
972
973 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
975 if (rv<0) {
976 DBG_ERROR(0, "here (%d)", rv);
977 }
978 else {
980 }
981 GWEN_Buffer_free(tbuf);
982 }
983
984 /* create and add root group */
985 Typemaker2_Group_Tree_Clear(ty->groupTree);
986 rootGroup=Typemaker2_Group_new();
989
990 Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup);
991
992 /* read members */
993 n=GWEN_XMLNode_FindFirstTag(node, "members", NULL, NULL);
994 if (n) {
995 int rv;
996
997 rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, rootGroup, wantedLang);
998 if (rv<0) {
999 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1000 return rv;
1001 }
1002 }
1003
1004 /* read codedefs */
1005 n=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL);
1006 if (n) {
1007 GWEN_XMLNODE *nn;
1008
1009 nn=GWEN_XMLNode_FindFirstTag(n, "codedef", NULL, NULL);
1010 while (nn) {
1011 TYPEMAKER2_CODE *tc;
1012
1014 if (tc) {
1015 const char *s;
1016
1018 if (s && *s)
1020
1022 if (s && *s)
1024 }
1025
1026 Typemaker2_Code_List_Add(tc, ty->codeDefs);
1027 nn=GWEN_XMLNode_FindNextTag(nn, "codedef", NULL, NULL);
1028 }
1029 }
1030
1031 /* read inlines */
1032 n=GWEN_XMLNode_FindFirstTag(langNode, "inlines", NULL, NULL);
1033 if (n) {
1034 GWEN_XMLNODE *nn;
1035
1036 nn=GWEN_XMLNode_FindFirstTag(n, "inline", NULL, NULL);
1037 while (nn) {
1039
1041 Typemaker2_Inline_List_Add(ti, ty->inlines);
1042 nn=GWEN_XMLNode_FindNextTag(nn, "inline", NULL, NULL);
1043 }
1044 }
1045
1046 /* read enums */
1047 n=GWEN_XMLNode_FindFirstTag(node, "enums", NULL, NULL);
1048 if (n) {
1049 GWEN_XMLNODE *nn;
1050
1051 nn=GWEN_XMLNode_FindFirstTag(n, "enum", NULL, NULL);
1052 while (nn) {
1053 TYPEMAKER2_ENUM *te;
1054 GWEN_XMLNODE *nnn;
1055
1057
1058 /* read items */
1059 nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
1060 while (nnn) {
1061 TYPEMAKER2_ITEM *ti;
1062
1064 Typemaker2_Item_List_Add(ti, Typemaker2_Enum_GetItems(te));
1065 nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
1066 }
1067
1068 Typemaker2_Enum_List_Add(te, ty->enums);
1069 nn=GWEN_XMLNode_FindNextTag(nn, "enum", NULL, NULL);
1070 }
1071 }
1072
1073 /* read defines */
1074 n=GWEN_XMLNode_FindFirstTag(node, "defines", NULL, NULL);
1075 if (n) {
1076 GWEN_XMLNODE *nn;
1077
1078 nn=GWEN_XMLNode_FindFirstTag(n, "define", NULL, NULL);
1079 while (nn) {
1081 GWEN_XMLNODE *nnn;
1082
1084
1085 /* read items */
1086 nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL);
1087 while (nnn) {
1088 TYPEMAKER2_ITEM *ti;
1089
1091 Typemaker2_Item_List_Add(ti, Typemaker2_Define_GetItems(td));
1092 nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL);
1093 }
1094
1095 Typemaker2_Define_List_Add(td, ty->defines);
1096 nn=GWEN_XMLNode_FindNextTag(nn, "define", NULL, NULL);
1097 }
1098 }
1099
1100 /* read virtual functions */
1101 n=GWEN_XMLNode_FindFirstTag(node, "virtualFns", NULL, NULL);
1102 if (n) {
1103 GWEN_XMLNODE *nn;
1104
1105 nn=GWEN_XMLNode_FindFirstTag(n, "fn", NULL, NULL);
1106 while (nn) {
1108 int rv;
1109
1112 if (rv<0) {
1113 DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1115 return rv;
1116 }
1117 Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns);
1118 nn=GWEN_XMLNode_FindNextTag(nn, "fn", NULL, NULL);
1119 }
1120 }
1121
1122 /* read signals */
1123 n=GWEN_XMLNode_FindFirstTag(node, "signals", NULL, NULL);
1124 if (n) {
1125 GWEN_XMLNODE *nn;
1126
1127 nn=GWEN_XMLNode_FindFirstTag(n, "signal", NULL, NULL);
1128 while (nn) {
1129 TYPEMAKER2_SIGNAL *sig;
1130 GWEN_XMLNODE *nnn;
1131 int i;
1132
1133 s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1134 if (!(s && *s)) {
1135 DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed signal");
1136 return GWEN_ERROR_INVALID;
1137 }
1142
1143 i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1144 if (i)
1146 i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1147 if (i)
1149
1150 nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1151 if (nnn) {
1152 GWEN_XMLNODE *nnnn;
1153 int i;
1154
1155 nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1156 i=1;
1157 while (nnnn && i<3) {
1158 const char *s;
1159
1160 s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1161 if (i==1)
1163 else
1165 i++;
1166 nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1167 }
1168 }
1169 Typemaker2_Signal_List_Add(sig, ty->signals);
1170 nn=GWEN_XMLNode_FindNextTag(nn, "signal", NULL, NULL);
1171 }
1172 }
1173
1174
1175 /* read slots */
1176 n=GWEN_XMLNode_FindFirstTag(node, "slots", NULL, NULL);
1177 if (n) {
1178 GWEN_XMLNODE *nn;
1179
1180 nn=GWEN_XMLNode_FindFirstTag(n, "slot", NULL, NULL);
1181 while (nn) {
1182 TYPEMAKER2_SLOT *slot;
1183 GWEN_XMLNODE *nnn;
1184 int i;
1185
1186 s=GWEN_XMLNode_GetProperty(nn, "name", NULL);
1187 if (!(s && *s)) {
1188 DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed slot");
1189 return GWEN_ERROR_INVALID;
1190 }
1191 slot=Typemaker2_Slot_new();
1192 Typemaker2_Slot_SetName(slot, s);
1193 Typemaker2_Slot_SetParamType1(slot, "none");
1194 Typemaker2_Slot_SetParamType2(slot, "none");
1195
1196 i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0);
1197 if (i)
1199 i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0);
1200 if (i)
1202
1203
1204 nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL);
1205 if (nnn) {
1206 GWEN_XMLNODE *nnnn;
1207 int i;
1208
1209 nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL);
1210 i=1;
1211 while (nnnn && i<3) {
1212 const char *s;
1213
1214 s=GWEN_XMLNode_GetProperty(nnnn, "type", "none");
1215 if (i==1)
1217 else
1219 i++;
1220 nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL);
1221 }
1222 }
1223 Typemaker2_Slot_List_Add(slot, ty->slots);
1224 nn=GWEN_XMLNode_FindNextTag(nn, "slot", NULL, NULL);
1225 }
1226 }
1227
1228
1229 /* read defaults */
1230 n=GWEN_XMLNode_FindFirstTag(langNode, "defaults", NULL, NULL);
1231 if (n) {
1232 s=GWEN_XMLNode_GetCharValue(n, "default", NULL);
1234
1235 s=GWEN_XMLNode_GetCharValue(n, "preset", NULL);
1237
1238 /* read flags */
1239 s=GWEN_XMLNode_GetCharValue(n, "flags", NULL);
1240 if (s && *s)
1242
1243 /* read setflags */
1244 s=GWEN_XMLNode_GetCharValue(n, "setflags", NULL);
1245 if (s && *s)
1247
1248 /* read getflags */
1249 s=GWEN_XMLNode_GetCharValue(n, "getflags", NULL);
1250 if (s && *s)
1252
1253 /* read dupflags */
1254 s=GWEN_XMLNode_GetCharValue(n, "dupflags", NULL);
1255 if (s && *s)
1257
1258 /* read copyflags */
1259 s=GWEN_XMLNode_GetCharValue(n, "copyflags", NULL);
1260 if (s && *s)
1262
1263 /* read access */
1264 s=GWEN_XMLNode_GetCharValue(n, "access", NULL);
1265 if (s && *s) {
1268 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s);
1269 return GWEN_ERROR_BAD_DATA;
1270 }
1272 }
1273 }
1274
1275 s=GWEN_XMLNode_GetProperty(langNode, "usePrivateConstructor", "0");
1276 if (s && *s)
1278
1279 return 0;
1280}
1281
1282
1283
1284void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
1285{
1286 if (ty) {
1287 int i;
1289 const char *s1, *s2;
1290
1291 for (i=0; i<indent; i++)
1292 fprintf(f, " ");
1293 fprintf(f, "Type\n");
1294
1295 for (i=0; i<indent+2; i++)
1296 fprintf(f, " ");
1297 fprintf(f, "Name : %s\n", (ty->name)?(ty->name):"<null>");
1298
1299 for (i=0; i<indent+2; i++)
1300 fprintf(f, " ");
1301 fprintf(f, "Identifier: %s\n", (ty->identifier)?(ty->identifier):"<null>");
1302
1303 for (i=0; i<indent+2; i++)
1304 fprintf(f, " ");
1305 fprintf(f, "AEDB Type : %s\n", (ty->aqdb_type)?(ty->aqdb_type):"<null>");
1306
1307 for (i=0; i<indent+2; i++)
1308 fprintf(f, " ");
1309 fprintf(f, "Extends : %s\n", (ty->extends)?(ty->extends):"<null>");
1310
1311 for (i=0; i<indent+2; i++)
1312 fprintf(f, " ");
1313 s1=ty->inherits;
1315 fprintf(f, "Inherits : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1316
1317 for (i=0; i<indent+2; i++)
1318 fprintf(f, " ");
1319 fprintf(f, "BaseType : %s\n", (ty->baseType)?(ty->baseType):"<null>");
1320
1321 for (i=0; i<indent+2; i++)
1322 fprintf(f, " ");
1323 fprintf(f, "Prefix : %s\n", (ty->prefix)?(ty->prefix):"<null>");
1324
1325 for (i=0; i<indent+2; i++)
1326 fprintf(f, " ");
1327 fprintf(f, "Access : %d [%d]\n", ty->access, Typemaker2_Type_GetAccess(ty));
1328
1329 for (i=0; i<indent+2; i++)
1330 fprintf(f, " ");
1331 fprintf(f, "Flags : %08x [%08x]\n", ty->flags, Typemaker2_Type_GetFlags(ty));
1332
1333 for (i=0; i<indent+2; i++)
1334 fprintf(f, " ");
1335 fprintf(f, "SetFlags : %08x [%08x]\n", ty->setFlags, Typemaker2_Type_GetSetFlags(ty));
1336
1337 for (i=0; i<indent+2; i++)
1338 fprintf(f, " ");
1339 fprintf(f, "GetFlags : %08x [%08x]\n", ty->getFlags, Typemaker2_Type_GetGetFlags(ty));
1340
1341 for (i=0; i<indent+2; i++)
1342 fprintf(f, " ");
1343 fprintf(f, "DupFlags : %08x [%08x]\n", ty->dupFlags, Typemaker2_Type_GetDupFlags(ty));
1344
1345 for (i=0; i<indent+2; i++)
1346 fprintf(f, " ");
1347 fprintf(f, "CopyFlags : %08x [%08x]\n", ty->copyFlags, Typemaker2_Type_GetCopyFlags(ty));
1348
1349 for (i=0; i<indent+2; i++)
1350 fprintf(f, " ");
1351 s1=ty->defaultValue;
1353 fprintf(f, "Default : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1354
1355 for (i=0; i<indent+2; i++)
1356 fprintf(f, " ");
1357 s1=ty->presetValue;
1359 fprintf(f, "Preset : %s [%s]\n", s1?s1:"<null>", s2?s2:"<null>");
1360
1361 for (i=0; i<indent+2; i++)
1362 fprintf(f, " ");
1363 fprintf(f, "Members\n");
1364 tm=Typemaker2_Member_List_First(ty->members);
1365 if (tm==NULL) {
1366 for (i=0; i<indent+4; i++)
1367 fprintf(f, " ");
1368 fprintf(f, "none\n");
1369 }
1370 else {
1371 while (tm) {
1372 Typemaker2_Member_Dump(tm, f, indent+4);
1373 tm=Typemaker2_Member_List_Next(tm);
1374 }
1375 }
1376 for (i=0; i<indent+2; i++)
1377 fprintf(f, " ");
1378 fprintf(f, "Field Count Id: %s\n", (ty->fieldCountId)?(ty->fieldCountId):"<null>");
1379
1380 for (i=0; i<indent+2; i++)
1381 fprintf(f, " ");
1382 fprintf(f, "Descript. : %s\n", (ty->descr)?(ty->descr):"<null>");
1383
1384 }
1385}
1386
1387
1388
1390{
1391 TYPEMAKER2_ENUM *te;
1392
1393 assert(ty);
1394 te=Typemaker2_Enum_List_First(ty->enums);
1395 while (te) {
1396 const char *n;
1397
1399 if (n && strcasecmp(s, n)==0)
1400 break;
1401 te=Typemaker2_Enum_List_Next(te);
1402 }
1403
1404 return te;
1405}
1406
1407
1408
1410 const TYPEMAKER2_MEMBER *tm,
1411 const char *id)
1412{
1414 uint32_t flags=0;
1415
1416 if (tm)
1418
1419 /* try code within member definition first, if any */
1420 if (tm) {
1421 tc=Typemaker2_Code_List_First(Typemaker2_Member_GetCodeDefs(tm));
1422 while (tc) {
1423 const char *s;
1424
1426 if (s && strcasecmp(s, id)==0) {
1428 return tc;
1429 }
1430 tc=Typemaker2_Code_List_Next(tc);
1431 }
1432 }
1433
1434 while (ty) {
1435 tc=Typemaker2_Code_List_First(ty->codeDefs);
1436 while (tc) {
1437 const char *s;
1438
1440 if (s && strcasecmp(s, id)==0) {
1442 return tc;
1443 }
1444 tc=Typemaker2_Code_List_Next(tc);
1445 }
1446
1447 ty=ty->extendsPtr;
1448 }
1449
1450 return NULL;
1451}
1452
1453
1454
1455
1456
#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,...)
Definition debug.h:181
#define DBG_ERROR(dbg_logger, format,...)
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:475
#define GWEN_LIST_FUNCTIONS(t, pr)
Definition list1.h:367
#define GWEN_LIST_INIT(t, element)
Definition list1.h:466
#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:719
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:710
void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition tm_type.c:462
uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:383
int Typemaker2_Type_GetStructAccess(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:493
void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition tm_type.c:440
TYPEMAKER2_ENUM * Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:1389
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:449
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:791
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:647
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:692
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:585
void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i)
Definition tm_type.c:524
int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:471
void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:594
void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition tm_type.c:656
void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition tm_type.c:374
TYPEMAKER2_SLOT_LIST * Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:755
void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent)
Definition tm_type.c:1284
TYPEMAKER2_VIRTUALFN_LIST * Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:737
int Typemaker2_Type_GetPack(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:289
const char * Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:559
void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition tm_type.c:396
void Typemaker2_Type_SetPack(TYPEMAKER2_TYPE *ty, int i)
Definition tm_type.c:298
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:361
int Typemaker2_Type_readMembersAndGroupsXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, TYPEMAKER2_GROUP *parentGroup, const char *wantedLang)
Definition tm_type.c:814
void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:616
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:665
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:546
void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i)
Definition tm_type.c:418
uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:405
TYPEMAKER2_ENUM_LIST * Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:701
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:728
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:773
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:607
void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i)
Definition tm_type.c:484
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:674
void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:572
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:629
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:683
const char * Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:309
void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:348
const char * Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:335
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:764
const char * Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:533
void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:322
void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:276
void Typemaker2_Type_SetStructAccess(TYPEMAKER2_TYPE *ty, int i)
Definition tm_type.c:506
void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p)
Definition tm_type.c:638
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:515
TYPEMAKER2_CODE * Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id)
Definition tm_type.c:1409
void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i)
Definition tm_type.c:782
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:875
uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:427
TYPEMAKER2_SIGNAL_LIST * Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:746
void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s)
Definition tm_type.c:800
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition tm_type.h:21
@ TypeMaker2_Access_Private
Definition tm_type.h:89
@ TypeMaker2_Access_Unknown
Definition tm_type.h:85
@ 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
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)
TYPEMAKER2_VIRTUALFN * Typemaker2_VirtualFn_new()
int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node)
struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN
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
int GWEN_XMLNode_GetIntValue(const GWEN_XMLNODE *n, const char *name, int defValue)
Definition xml.c:923
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:627
#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