gwenhywfar  5.14.1
tm_builder_c.c
Go to the documentation of this file.
1 /***************************************************************************
2  begin : Thu Jul 02 2009
3  copyright : (C) 2018 by Martin Preuss
4  email : martin@libchipcard.de
5 
6  ***************************************************************************
7  * Please see toplevel file COPYING for license details *
8  ***************************************************************************/
9 
10 
11 
12 #include "tm_builder_c.h"
13 #include "tm2c_enums.h"
14 #include "tm2c_constructor.h"
15 #include "tm2c_destructor.h"
16 #include "tm2c_typedef.h"
17 #include "tm2c_struct.h"
18 #include "tm2c_getter.h"
19 #include "tm2c_setter.h"
20 #include "tm2c_readdb.h"
21 #include "tm2c_writedb.h"
22 #include "tm2c_readxml.h"
23 #include "tm2c_writexml.h"
24 #include "tm2c_readobject.h"
25 #include "tm2c_writeobject.h"
26 #include "tm2c_dup.h"
27 #include "tm2c_copy.h"
28 #include "tm2c_macros.h"
29 #include "tm2c_list1.h"
30 #include "tm2c_tree1.h"
31 #include "tm2c_tree2.h"
32 #include "tm2c_signal.h"
33 #include "tm2c_slot.h"
34 #include "tm2c_object.h"
35 #include "tm2c_virtualfn.h"
36 
37 
38 #include <gwenhywfar/debug.h>
39 
40 #include <ctype.h>
41 #include <string.h>
42 
43 
44 
45 /* DEBUG */
46 /*DBG_ERROR(0, "Member %s has flags %x", Typemaker2_Member_GetName(tm), Typemaker2_Member_GetFlags(tm));*/
47 
48 
49 
51 {
52  GWEN_BUFFER *tbuf;
53  TYPEMAKER2_MEMBER_LIST *tml;
54 
55  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
56 
58  if (tml) {
60 
61  tm=Typemaker2_Member_List_First(tml);
62  while (tm) {
65  "#define %s %d\n",
68  tm=Typemaker2_Member_List_Next(tm);
69  }
70  }
71 
72  GWEN_Buffer_AppendArgs(tbuf, "#define %s %d\n",
75 
77  GWEN_Buffer_free(tbuf);
78 
79  return 0;
80 }
81 
82 
84 {
85  GWEN_BUFFER *tbuf;
87  TYPEMAKER2_HEADER_LIST *hl;
88 
90  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
91 
92  /* handle post-headers */
94  if (hl) {
96 
97  h=Typemaker2_Header_List_First(hl);
98  if (h) {
99  GWEN_Buffer_AppendString(tbuf, "/* post-headers */\n");
100  while (h) {
102  GWEN_Buffer_AppendString(tbuf, "#include ");
103 
106  else
108  GWEN_Buffer_AppendString(tbuf, "\n");
109  }
110  h=Typemaker2_Header_List_Next(h);
111  }
112  }
113  GWEN_Buffer_AppendString(tbuf, "\n");
114  }
115 
117  GWEN_Buffer_free(tbuf);
118 
119  return 0;
120 }
121 
122 
123 
125 {
126  GWEN_BUFFER *tbuf;
128  TYPEMAKER2_HEADER_LIST *hl;
129 
131  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
132 
133  /* handle post-headers */
135  if (hl) {
137  int markAdded=0;
138 
139  h=Typemaker2_Header_List_First(hl);
140  while (h) {
142  if (!markAdded) {
143  GWEN_Buffer_AppendString(tbuf, "/* end-headers */\n");
144  markAdded=1;
145  }
146  GWEN_Buffer_AppendString(tbuf, "#include ");
147 
150  else
152  GWEN_Buffer_AppendString(tbuf, "\n");
153  }
154  h=Typemaker2_Header_List_Next(h);
155  }
156  GWEN_Buffer_AppendString(tbuf, "\n");
157  }
158 
160  GWEN_Buffer_free(tbuf);
161 
162  return 0;
163 }
164 
165 
166 
168 {
169  GWEN_BUFFER *tbuf;
170  TYPEMAKER2_MEMBER_LIST *tml;
171  uint32_t flags;
172  /* TYPEMAKER2_TYPEMANAGER *tym; */
173 
174  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
175  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
176 
177  flags=Typemaker2_Type_GetFlags(ty);
178 
180  if (tml) {
181  TYPEMAKER2_MEMBER *tm;
182 
183  tm=Typemaker2_Member_List_First(tml);
184  while (tm) {
185  TYPEMAKER2_TYPE *mty;
186  int rv;
187 
189  assert(mty);
190 
192  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
193  rv=TM2C_BuildList1GetByMember(tb, ty, tm);
194  if (rv<0) {
195  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
196  return rv;
197  }
198  }
199 
200  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) {
201  rv=TM2C_BuildTreeGetByMember(tb, ty, tm);
202  if (rv<0) {
203  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
204  return rv;
205  }
206  }
207 
208  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) {
209  rv=TM2C_BuildTree2GetByMember(tb, ty, tm);
210  if (rv<0) {
211  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
212  return rv;
213  }
214  }
215 
216  }
217  tm=Typemaker2_Member_List_Next(tm);
218  }
219  GWEN_Buffer_AppendString(tbuf, " return p_cl;\n");
220  }
221 
222  return 0;
223 }
224 
225 
226 
228 {
229  TYPEMAKER2_MEMBER_LIST *tml;
230  uint32_t flags;
231 
232  flags=Typemaker2_Type_GetFlags(ty);
233 
235  if (tml) {
236  TYPEMAKER2_MEMBER *tm;
237 
238  tm=Typemaker2_Member_List_First(tml);
239  while (tm) {
240  TYPEMAKER2_TYPE *mty;
241  int rv;
242 
244  assert(mty);
245 
247  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
248  rv=TM2C_BuildList1SortByMember(tb, ty, tm);
249  if (rv<0) {
250  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
251  return rv;
252  }
253  }
254  }
255  tm=Typemaker2_Member_List_Next(tm);
256  }
257  }
258 
259  return 0;
260 }
261 
262 
263 
265 {
266  TYPEMAKER2_DEFINE_LIST *defines;
267 
268  defines=Typemaker2_Type_GetDefines(ty);
269 
270  assert(defines);
271  if (Typemaker2_Define_List_GetCount(defines)) {
272  GWEN_BUFFER *tbuf;
273  const char *s;
274  TYPEMAKER2_DEFINE *td;
275 
276  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
277 
278  td=Typemaker2_Define_List_First(defines);
279  while (td) {
280  const char *prefix;
281  TYPEMAKER2_ITEM *ti;
282  int access=TypeMaker2_Access_Public;
284 
285  GWEN_Buffer_AppendString(tbuf, "/* define ");
287  if (s && *s)
288  GWEN_Buffer_AppendString(tbuf, s);
289  GWEN_Buffer_AppendString(tbuf, " */\n");
290 
291  prefix=Typemaker2_Define_GetPrefix(td);
292  if (prefix==NULL || *prefix==0) {
293  DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in define definition");
294  GWEN_Buffer_free(tbuf);
295  return GWEN_ERROR_BAD_DATA;
296  }
297 
298  ti=Typemaker2_Item_List_First(Typemaker2_Define_GetItems(td));
299  while (ti) {
300  GWEN_Buffer_AppendString(tbuf, "#define ");
301  if (prefix)
302  GWEN_Buffer_AppendString(tbuf, prefix);
304  if (s && *s) {
305  GWEN_Buffer_AppendString(tbuf, s);
306  }
308  if (s) {
309  GWEN_Buffer_AppendString(tbuf, " ");
310  GWEN_Buffer_AppendString(tbuf, s);
311  }
312  else {
313  char numbuf[32];
314  int k=0;
315 
316  switch (Typemaker2_Define_GetMode(td)) {
318  k=1<<j;
319  break;
321  default:
322  k=j;
323  }
324  snprintf(numbuf, sizeof(numbuf)-1, "%d", k);
325  numbuf[sizeof(numbuf)-1]=0;
326  GWEN_Buffer_AppendString(tbuf, " ");
327  GWEN_Buffer_AppendString(tbuf, numbuf);
328  j++;
329  }
330 
331  GWEN_Buffer_AppendString(tbuf, "\n");
332  ti=Typemaker2_Item_List_Next(ti);
333  }
334  GWEN_Buffer_AppendString(tbuf, "\n");
335 
336  switch (access) {
339  break;
342  break;
345  break;
348  break;
349  default:
350  DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type");
351  GWEN_Buffer_free(tbuf);
352  return GWEN_ERROR_BAD_DATA;
353  }
354  GWEN_Buffer_Reset(tbuf);
355 
356  td=Typemaker2_Define_List_Next(td);
357  }
358  }
359  return 0;
360 }
361 
362 
363 
365 {
366  GWEN_BUFFER *tbuf;
367  const char *s;
369  TYPEMAKER2_MEMBER_LIST *tml;
370  const char *sTypeId;
371  const char *sTypePrefix;
372 
374  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
375 
376  sTypeId=Typemaker2_Type_GetIdentifier(ty);
377  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
378 
379  /* prototype */
381  if (s && *s)
382  GWEN_Buffer_AppendArgs(tbuf, "%s ", s);
383  GWEN_Buffer_AppendArgs(tbuf, "void %s_toHashString(const %s *p_struct, GWEN_BUFFER *p_buffer);\n",
384  sTypePrefix, sTypeId);
386  GWEN_Buffer_Reset(tbuf);
387 
388  /* implementation */
389  GWEN_Buffer_AppendArgs(tbuf, "void %s_toHashString(const %s *p_struct, GWEN_BUFFER *p_buffer) {\n",
390  sTypePrefix, sTypeId);
391  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
392 
394  if (tml) {
395  TYPEMAKER2_MEMBER *tm;
396 
397  tm=Typemaker2_Member_List_First(tml);
398  while (tm) {
399  TYPEMAKER2_TYPE *mty;
400  const char *sMemberName;
401 
403  assert(mty);
404  sMemberName=Typemaker2_Member_GetName(tm);
405 
407  GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\"*/\n", sMemberName);
408  /* toHashString */
409  if (1) {
410  GWEN_BUFFER *srcbuf;
411  int rv;
412 
413  srcbuf=GWEN_Buffer_new(0, 256, 0, 1);
414  GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", sMemberName);
415 
416  GWEN_Buffer_AppendString(tbuf, " ");
418  GWEN_Buffer_GetStart(srcbuf),
419  NULL, /* no dest */
420  tbuf);
421  GWEN_Buffer_free(srcbuf);
422  if (rv<0) {
423  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
424  GWEN_Buffer_free(tbuf);
425  return rv;
426  }
427  GWEN_Buffer_AppendString(tbuf, "\n");
428  }
429 
430  GWEN_Buffer_AppendString(tbuf, " GWEN_Buffer_AppendByte(p_buffer, \':\');\n");
431  }
432  else
433  GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" doesn't have with_hash flag, ignoring */\n", sMemberName);
434 
435  tm=Typemaker2_Member_List_Next(tm);
436  } /* while tm */
437  }
438 
439  GWEN_Buffer_AppendString(tbuf, "}\n");
440 
442  GWEN_Buffer_free(tbuf);
443 
444  return 0;
445 }
446 
447 
448 
450 {
451  GWEN_BUFFER *tbuf;
452  uint32_t flags;
453 
454  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
455 
456  flags=Typemaker2_Type_GetFlags(ty);
457 
458  while (ty) {
459  TYPEMAKER2_INLINE *ti;
460 
461  ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(ty));
462  while (ti) {
464  const char *content;
465 
466  content=Typemaker2_Inline_GetContent(ti);
467  if (content && *content) {
468  GWEN_DB_NODE *db;
469  int rv;
470 
472  assert(db);
473  rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf);
474  if (rv<0) {
475  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
476  GWEN_Buffer_free(tbuf);
477  return rv;
478  }
479 
480  /* include code */
481  switch (Typemaker2_Inline_GetLocation(ti)) {
484  break;
485 
488  break;
489  }
490  }
491  GWEN_Buffer_Reset(tbuf);
492  }
493 
494  ti=Typemaker2_Inline_List_Next(ti);
495  }
497  }
498  GWEN_Buffer_free(tbuf);
499 
500  return 0;
501 }
502 
503 
504 
506 {
507  TYPEMAKER2_TYPE *structType;
508  GWEN_BUFFER *tbuf;
509  /* TYPEMAKER2_TYPEMANAGER *tym; */
510 
511  structType=ty;
512 
513  /* tym=Typemaker2_Builder_GetTypeManager(tb); */
514  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
515 
516  while (ty) {
517  TYPEMAKER2_MEMBER_LIST *tml;
518 
520  if (tml) {
521  TYPEMAKER2_MEMBER *tm;
522 
523  tm=Typemaker2_Member_List_First(tml);
524  while (tm) {
525  TYPEMAKER2_TYPE *mty;
526  uint32_t memberFlags;
527 
528  memberFlags=Typemaker2_Member_GetFlags(tm);
530  /* TODO: Check that we don't create duplicate code here!! */
531  if (mty && mty!=structType && mty!=ty) {
532  TYPEMAKER2_INLINE *ti;
533 
534  /* get inlines from member type */
535  ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(mty));
536  while (ti) {
538  const char *content;
539 
540  content=Typemaker2_Inline_GetContent(ti);
541  if (content && *content) {
542  GWEN_DB_NODE *db;
543  int rv;
544 
545  /* replace vars in context of the struct type, not the particular member type */
547  assert(db);
548  rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf);
549  if (rv<0) {
550  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
551  GWEN_Buffer_free(tbuf);
552  return rv;
553  }
554 
555  /* include code */
556  switch (Typemaker2_Inline_GetLocation(ti)) {
559  break;
560 
563  break;
564  }
565  }
566  GWEN_Buffer_Reset(tbuf);
567  }
568 
569  ti=Typemaker2_Inline_List_Next(ti);
570  }
571  } /* if mty */
572 
573  tm=Typemaker2_Member_List_Next(tm);
574  } /* while tm */
575  } /* if tml */
576 
578  }
579 
580  return 0;
581 }
582 
583 
584 
586 {
587  GWEN_BUFFER *tbuf;
588  const char *s;
590  const char *sTypeId;
591  const char *sTypePrefix;
592 
594  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
595 
596  sTypeId=Typemaker2_Type_GetIdentifier(ty);
597  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
598 
599  /* prototype */
601  if (s && *s)
602  GWEN_Buffer_AppendArgs(tbuf, "%s ", s);
603 
604  GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct);\n", sTypePrefix, sTypeId);
605 
607  GWEN_Buffer_Reset(tbuf);
608 
609  /* implementation */
610  GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct) {\n", sTypePrefix, sTypeId);
611  GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
612  GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n");
613  GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount++;\n");
614  GWEN_Buffer_AppendString(tbuf, "}\n");
615 
617  GWEN_Buffer_free(tbuf);
618 
619  return 0;
620 }
621 
622 
623 
625 {
626  GWEN_BUFFER *tbuf;
628  const char *sApi;
629  const char *sTypePrefix;
630 
632  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
633 
635  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
636 
637  /* public prototypes */
638  GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n");
639 
640  if (sApi && *sApi)
641  GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
642  GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Attach(void *ptr);\n", sTypePrefix);
643  GWEN_Buffer_AppendString(tbuf, "\n");
644 
645  if (sApi && *sApi)
646  GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
647  GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Free(void *ptr);\n", sTypePrefix);
648  GWEN_Buffer_AppendString(tbuf, "\n");
649 
651  GWEN_Buffer_Reset(tbuf);
652 
653  /* implementations */
654  GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n");
655  GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Attach(void *ptr) {\n", sTypePrefix);
656  GWEN_Buffer_AppendString(tbuf, " return 0;\n");
657  GWEN_Buffer_AppendString(tbuf, "}\n");
658  GWEN_Buffer_AppendString(tbuf, "\n");
659 
660  GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Free(void *ptr) {\n", sTypePrefix);
661  GWEN_Buffer_AppendString(tbuf, " return 0;\n");
662  GWEN_Buffer_AppendString(tbuf, "}\n");
663  GWEN_Buffer_AppendString(tbuf, "\n");
664 
666  GWEN_Buffer_free(tbuf);
667 
668  return 0;
669 }
670 
671 
672 
674  TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf)
675 {
676  const char *s;
677  TYPEMAKER2_GROUP *childGrp;
678  TYPEMAKER2_MEMBER_LIST *members;
679  const char *sTypeIdentifier;
680  const char *sTypePrefix;
681 
682  sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty);
683  sTypePrefix=Typemaker2_Type_GetPrefix(ty);
684 
685  /* write title */
687  GWEN_Buffer_AppendString(buf, "\n\n");
688  GWEN_Buffer_AppendArgs(buf, "<h%d>%s</h%d>\n", depth, (s && *s)?s:"Unnamed Group", depth);
689  GWEN_Buffer_AppendString(buf, "\n");
690 
692  if (s && *s) {
693  GWEN_DB_NODE *dbCall;
694  int rv;
695 
697  assert(dbCall);
698  rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf);
699  if (rv<0) {
700  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
701  GWEN_DB_Group_free(dbCall);
702  GWEN_Buffer_free(buf);
703  return rv;
704  }
705  GWEN_DB_Group_free(dbCall);
706  GWEN_Buffer_AppendString(buf, "\n");
707  }
708 
709  /* write member docs */
710  members=Typemaker2_Type_GetMembers(ty);
711  if (members) {
712  TYPEMAKER2_MEMBER *tm;
713 
714  tm=Typemaker2_Member_List_First(members);
715  while (tm) {
716  if (Typemaker2_Member_GetGroupPtr(tm)==grp) {
717  const char *sMemberName;
718 
719  sMemberName=Typemaker2_Member_GetName(tm);
720  GWEN_Buffer_AppendArgs(buf, "\n\n@anchor %s_%s\n", sTypeIdentifier, sMemberName);
721  GWEN_Buffer_AppendArgs(buf, "<h%d>%s</h%d>\n\n", depth+1, sMemberName, depth+1);
722 
723  /* add description, if any */
725  if (s && *s) {
726  GWEN_DB_NODE *dbCall;
727  int rv;
728 
729  dbCall=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, NULL, NULL);
730  assert(dbCall);
731  rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf);
732  if (rv<0) {
733  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
734  GWEN_DB_Group_free(dbCall);
735  GWEN_Buffer_free(buf);
736  return rv;
737  }
738  GWEN_DB_Group_free(dbCall);
739  GWEN_Buffer_AppendString(buf, "\n");
740  }
741 
742  /* add setter/getter info */
744  "<p>Set this property with @ref %s_Set%c%s(), ",
745  sTypePrefix, toupper(*sMemberName), sMemberName+1);
747  "get it with @ref %s_Get%c%s().</p>\n",
748  sTypePrefix, toupper(*sMemberName), sMemberName+1);
749  }
750  tm=Typemaker2_Member_List_Next(tm);
751  }
752  }
753 
754  /* write children groups */
755  childGrp=Typemaker2_Group_Tree_GetFirstChild(grp);
756  while (childGrp) {
757  int rv;
758 
759  rv=_buildGroupApiDoc(tb, ty, childGrp, depth+1, buf);
760  if (rv<0) {
761  DBG_ERROR(0, "here (%d)", rv);
762  return rv;
763  }
764  childGrp=Typemaker2_Group_Tree_GetNext(childGrp);
765  }
766 
767  return 0;
768 }
769 
770 
771 
772 
774 {
775  TYPEMAKER2_GROUP_TREE *groupTree;
776  TYPEMAKER2_GROUP *grp;
777  GWEN_BUFFER *tbuf;
778  const char *sTypeIdentifier;
779 
780  sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty);
781 
782  groupTree=Typemaker2_Type_GetGroupTree(ty);
783 
784  tbuf=GWEN_Buffer_new(0, 256, 0, 1);
785 
786  GWEN_Buffer_AppendArgs(tbuf, "/** @page P_%s Structure %s\n", sTypeIdentifier, sTypeIdentifier);
787  GWEN_Buffer_AppendArgs(tbuf, "<p>This page describes the properties of %s.</p>\n", sTypeIdentifier);
788  GWEN_Buffer_AppendString(tbuf, "\n");
789 
790  grp=Typemaker2_Group_Tree_GetFirst(groupTree);
791  while (grp) {
792  _buildGroupApiDoc(tb, ty, grp, 1, tbuf);
793  grp=Typemaker2_Group_Tree_GetNext(grp);
794  }
795  GWEN_Buffer_AppendString(tbuf, "\n");
796  GWEN_Buffer_AppendString(tbuf, "*/\n");
797 
799 
800  GWEN_Buffer_free(tbuf);
801 
802  return 0;
803 }
804 
805 
806 
807 
808 
809 
810 
811 
813 {
814  int rv;
815  uint32_t flags;
816 
817  flags=Typemaker2_Type_GetFlags(ty);
818 
819  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) {
822  if (rv<0) {
823  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
824  return rv;
825  }
826  }
827 
828 
829  rv=TM2C_SetEnumStringFns(ty);
830  if (rv<0) {
831  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
832  return rv;
833  }
834 
835  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) {
836  rv=_buildFieldIds(tb, ty);
837  if (rv<0) {
838  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
839  return rv;
840  }
841  }
842 
843  rv=_buildApiDoc(tb, ty);
844  if (rv<0) {
845  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
846  return rv;
847  }
848 
849  rv=_buildDefineDefines(tb, ty);
850  if (rv<0) {
851  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
852  return rv;
853  }
854 
855  rv=TM2C_BuildTypedef(tb, ty);
856  if (rv<0) {
857  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
858  return rv;
859  }
860 
861  rv=TM2C_BuildDefineEnums(tb, ty);
862  if (rv<0) {
863  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
864  return rv;
865  }
866 
867  rv=TM2C_BuildDefineVirtualFns(tb, ty, "pre");
868  if (rv<0) {
869  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
870  return rv;
871  }
872 
873  rv=_buildPostHeaders(tb, ty);
874  if (rv<0) {
875  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
876  return rv;
877  }
878 
879  rv=TM2C_BuildDefineVirtualFns(tb, ty, "post");
880  if (rv<0) {
881  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
882  return rv;
883  }
884 
885  rv=TM2C_BuildStruct(tb, ty);
886  if (rv<0) {
887  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
888  return rv;
889  }
890 
891  rv=TM2C_BuildMacroFunctions(tb, ty);
892  if (rv<0) {
893  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
894  return rv;
895  }
896 
897  rv=TM2C_BuildEnumFromString(tb, ty);
898  if (rv<0) {
899  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
900  return rv;
901  }
902 
903  rv=TM2C_BuildEnumToString(tb, ty);
904  if (rv<0) {
905  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
906  return rv;
907  }
908 
909  rv=TM2C_BuildConstructor(tb, ty);
910  if (rv<0) {
911  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
912  return rv;
913  }
914 
915  rv=TM2C_BuildDestructor(tb, ty);
916  if (rv<0) {
917  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
918  return rv;
919  }
920 
922  rv=_buildAttach(tb, ty);
923  if (rv<0) {
924  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
925  return rv;
926  }
927  }
928 
929  if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) {
930  rv=TM2C_BuildDup(tb, ty);
931  if (rv<0) {
932  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
933  return rv;
934  }
935  }
936 
937  if (!(flags & TYPEMAKER2_TYPEFLAGS_NOCOPY)) {
938  rv=TM2C_BuildCopy(tb, ty);
939  if (rv<0) {
940  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
941  return rv;
942  }
943  }
944 
945  rv=TM2C_BuildGetter(tb, ty);
946  if (rv<0) {
947  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
948  return rv;
949  }
950 
951  rv=TM2C_BuildSetter(tb, ty);
952  if (rv<0) {
953  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
954  return rv;
955  }
956 
957  rv=TM2C_BuildProtoVirtualFns(tb, ty);
958  if (rv<0) {
959  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
960  return rv;
961  }
962 
963  rv=TM2C_BuildCodeVirtualFns(tb, ty);
964  if (rv<0) {
965  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
966  return rv;
967  }
968 
970  if (rv<0) {
971  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
972  return rv;
973  }
974 
975  rv=TM2C_BuildSetterVirtualFns(tb, ty);
976  if (rv<0) {
977  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
978  return rv;
979  }
980 
982  if (rv<0) {
983  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
984  return rv;
985  }
986 
987  rv=TM2C_BuildGetterVirtualFns(tb, ty);
988  if (rv<0) {
989  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
990  return rv;
991  }
992 
993  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) {
994  if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) {
995  rv=TM2C_BuildList1Dup(tb, ty);
996  if (rv<0) {
997  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
998  return rv;
999  }
1000  }
1001  }
1002 
1003  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_DB) {
1004  rv=TM2C_BuildReadDb(tb, ty);
1005  if (rv<0) {
1006  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1007  return rv;
1008  }
1009 
1010  rv=TM2C_BuildWriteDb(tb, ty);
1011  if (rv<0) {
1012  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1013  return rv;
1014  }
1015 
1016  rv=TM2C_BuildFromDb(tb, ty);
1017  if (rv<0) {
1018  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1019  return rv;
1020  }
1021 
1022  rv=TM2C_BuildToDb(tb, ty);
1023  if (rv<0) {
1024  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1025  return rv;
1026  }
1027 
1028  }
1029 
1030  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_XML) {
1031  rv=TM2C_BuildReadXml(tb, ty);
1032  if (rv<0) {
1033  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1034  return rv;
1035  }
1036 
1037  rv=TM2C_BuildWriteXml(tb, ty);
1038  if (rv<0) {
1039  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1040  return rv;
1041  }
1042 
1043  rv=TM2C_BuildToXml(tb, ty);
1044  if (rv<0) {
1045  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1046  return rv;
1047  }
1048 
1049  rv=TM2C_BuildFromXml(tb, ty);
1050  if (rv<0) {
1051  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1052  return rv;
1053  }
1054  }
1055 
1056  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) {
1057  rv=TM2C_BuildReadObject(tb, ty);
1058  if (rv<0) {
1059  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1060  return rv;
1061  }
1062 
1063  rv=TM2C_BuildWriteObject(tb, ty);
1064  if (rv<0) {
1065  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1066  return rv;
1067  }
1068 
1069  rv=TM2C_BuildToObject(tb, ty);
1070  if (rv<0) {
1071  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1072  return rv;
1073  }
1074 
1075  rv=TM2C_BuildFromObject(tb, ty);
1076  if (rv<0) {
1077  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1078  return rv;
1079  }
1080 
1081  rv=TM2C_BuildCreateColumnList(tb, ty);
1082  if (rv<0) {
1083  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1084  return rv;
1085  }
1086 
1087  rv=TM2C_BuildCreateTable(tb, ty);
1088  if (rv<0) {
1089  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1090  return rv;
1091  }
1092 
1093  rv=TM2C_BuildCreateObject(tb, ty);
1094  if (rv<0) {
1095  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1096  return rv;
1097  }
1098  }
1099 
1100  rv=_buildGetByMember(tb, ty);
1101  if (rv<0) {
1102  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1103  return rv;
1104  }
1105 
1106  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_HASH) {
1107  rv=_buildToHashString(tb, ty);
1108  if (rv<0) {
1109  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1110  return rv;
1111  }
1112  }
1113 
1114  rv=_buildMemberInlines(tb, ty);
1115  if (rv<0) {
1116  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1117  return rv;
1118  }
1119 
1120 
1121  rv=_buildSortByMember(tb, ty);
1122  if (rv<0) {
1123  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1124  return rv;
1125  }
1126 
1127 
1128  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) {
1129  rv=TM2C_BuildSignalFunctions(tb, ty);
1130  if (rv<0) {
1131  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1132  return rv;
1133  }
1134  }
1135 
1136  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) {
1137  rv=TM2C_BuildSlotFunctions(tb, ty);
1138  if (rv<0) {
1139  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1140  return rv;
1141  }
1142  }
1143 
1144  if (flags & TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS) {
1145  rv=_buildCacheFunctions(tb, ty);
1146  if (rv<0) {
1147  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1148  return rv;
1149  }
1150  }
1151 
1152  rv=_buildInlines(tb, ty);
1153  if (rv<0) {
1154  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1155  return rv;
1156  }
1157 
1158  rv=_buildEndHeaders(tb, ty);
1159  if (rv<0) {
1160  DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv);
1161  return rv;
1162  }
1163 
1164  return 0;
1165 }
1166 
1167 
1168 
1170 {
1171  TYPEMAKER2_BUILDER *tb;
1172 
1175 
1176  return tb;
1177 }
1178 
1179 
1180 
1181 
1182 
int TM2C_BuildSlotFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_slot.c:24
const char * Typemaker2_Item_GetName(const TYPEMAKER2_ITEM *p_struct)
Definition: tm_item.c:101
int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:90
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE2
Definition: tm_type.h:71
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:133
void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn)
Definition: tm_builder.c:352
int TM2C_BuildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:24
#define DBG_ERROR(dbg_logger, format,...)
Definition: debug.h:97
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:467
int TM2C_BuildDestructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition: buffer.c:235
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:237
int TM2C_BuildTreeGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_tree1.c:30
#define TYPEMAKER2_TYPEFLAGS_WITH_HASH
Definition: tm_type.h:69
const char * Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:68
#define TYPEMAKER2_TYPEFLAGS_NODUP
Definition: tm_type.h:66
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
int Typemaker2_Inline_GetTypeFlagsValue(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:136
void GWEN_DB_Group_free(GWEN_DB_NODE *n)
Definition: db.c:421
const char * Typemaker2_Inline_GetContent(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:69
int TM2C_BuildReadXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readxml.c:31
TYPEMAKER2_HEADER_LIST * Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:692
const char * Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:171
TYPEMAKER2_TYPE * Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:629
#define TYPEMAKER2_TYPEFLAGS_NOCOPY
Definition: tm_type.h:68
int TM2C_BuildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
static int _buildCacheFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:624
int TM2C_BuildSetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_setter.c:35
const char * Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:149
#define NULL
Definition: binreloc.c:300
int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th)
Definition: tm_header.c:108
int TM2C_BuildConstructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr)
Definition: tm_group.c:69
#define TYPEMAKER2_TYPEFLAGS_WITH_XML
Definition: tm_type.h:54
static int _buildToHashString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:364
int TM2C_BuildSignalFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_signal.c:25
int TM2C_BuildGetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_getter.c:32
struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP
Definition: tm_group.h:19
#define GWEN_LOGDOMAIN
Definition: logger.h:32
#define TYPEMAKER2_FLAGS_WITH_GETBYMEMBER
Definition: tm_type.h:46
static int _buildFieldIds(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:50
#define TYPEMAKER2_TYPEFLAGS_WITH_SLOTS
Definition: tm_type.h:63
struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE
Definition: tm_define.h:24
struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER
Definition: tm_header.h:19
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
#define TYPEMAKER2_FLAGS_SORTBYMEMBER
Definition: tm_type.h:44
struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM
Definition: tm_item.h:22
const char * Typemaker2_Define_GetPrefix(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:190
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:653
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:196
int TM2C_BuildReadDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readdb.c:31
int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf)
Definition: tm_builder.c:548
int TM2C_BuildDup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_dup.c:34
const char * Typemaker2_Item_GetValue(const TYPEMAKER2_ITEM *p_struct)
Definition: tm_item.c:107
int TM2C_BuildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int TM2C_BuildWriteObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
static int _buildMemberInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:505
struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE
Definition: tm_inline.h:19
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
int TM2C_BuildToObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int TM2C_BuildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:140
static int _buildGroupApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf)
Definition: tm_builder_c.c:673
int TM2C_BuildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Define_GetId(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:184
void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s)
Definition: tm_builder.c:149
TYPEMAKER2_INLINE_LIST * Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:728
static int _buildPostHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:83
int TM2C_BuildMacroFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_macros.c:24
int TM2C_BuildFromObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr)
Definition: tm_group.c:93
int TM2C_BuildList1Dup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_list1.c:59
int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:539
int TM2C_BuildReadObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int Typemaker2_Define_GetStartValue(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:214
int Typemaker2_Inline_GetTypeFlagsMask(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:127
int TM2C_BuildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *loc)
int TM2C_BuildWriteDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writedb.c:32
static int _buildSortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:227
#define TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS
Definition: tm_type.h:62
#define TYPEMAKER2_FLAGS_WITH_HASH
Definition: tm_type.h:47
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:585
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:188
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
Definition: buffer.c:1087
#define TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS
Definition: tm_type.h:64
#define TYPEMAKER2_TYPEFLAGS_WITH_TREE
Definition: tm_type.h:60
static int Typemaker2_Builder_C_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:812
int TM2C_BuildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:198
static int _buildApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:773
int TM2C_BuildTypedef(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_typedef.c:31
TYPEMAKER2_ITEM_LIST * Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:202
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:773
static int _buildDefineDefines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:264
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition: tm_builder.h:26
void TM2C_DelVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty)
Definition: tm2c_slot.c:267
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:683
int TM2C_BuildProtoGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition: buffer.c:89
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition: buffer.h:38
int TM2C_BuildEnumToString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:289
int TM2C_BuildTree2GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_tree2.c:30
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:204
static int _buildAttach(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:585
int TM2C_BuildWriteXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writexml.c:32
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition: tm_type.h:21
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:172
int TM2C_BuildToDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_writedb.c:161
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
TYPEMAKER2_BUILDER * Typemaker2_Builder_C_new()
int TM2C_BuildDefineEnums(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:25
static int _buildInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:449
int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:91
int TM2C_BuildGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:180
int TM2C_BuildList1SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_list1.c:75
static int _buildGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:167
#define TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT
Definition: tm_type.h:61
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:607
int Typemaker2_Inline_GetAccess(const TYPEMAKER2_INLINE *th)
Definition: tm_inline.c:109
TYPEMAKER2_GROUP * Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:521
int TM2C_BuildStruct(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_struct.c:30
int TM2C_AddVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty)
Definition: tm2c_slot.c:187
TYPEMAKER2_BUILDER * Typemaker2_Builder_new()
Definition: tm_builder.c:53
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
#define DBG_INFO(dbg_logger, format,...)
Definition: debug.h:181
int TM2C_BuildList1GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
Definition: tm2c_list1.c:43
int TM2C_SetEnumStringFns(TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:126
int TM2C_BuildFromXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readxml.c:171
TYPEMAKER2_GROUP_TREE * Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:764
int TM2C_BuildFromDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_readdb.c:171
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:361
int TM2C_BuildToXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:83
static int _buildEndHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm_builder_c.c:124
#define TYPEMAKER2_FLAGS_VOLATILE
Definition: tm_type.h:32
#define TYPEMAKER2_TYPEFLAGS_WITH_OBJECT
Definition: tm_type.h:55
TYPEMAKER2_DEFINE_LIST * Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:710
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:791
int TM2C_BuildEnumFromString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_enums.c:179
#define GWEN_UNUSED
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:992
int TM2C_BuildProtoVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int Typemaker2_Builder_Invoke_ToHashStringFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf)
#define TYPEMAKER2_TYPEFLAGS_WITH_DB
Definition: tm_type.h:53
int Typemaker2_Define_GetMode(const TYPEMAKER2_DEFINE *p_struct)
Definition: tm_define.c:208
GWEN_DB_NODE * Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst)
Definition: tm_builder.c:371
int TM2C_BuildCopy(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_copy.c:34
#define TYPEMAKER2_TYPEFLAGS_WITH_LIST1
Definition: tm_type.h:56