gwenhywfar 5.12.0
tm2c_getter.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#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14
15#include "tm2c_getter.h"
16
17#include <gwenhywfar/debug.h>
18
19#include <ctype.h>
20
21
22
27
28
29
30
31
33{
34 TYPEMAKER2_MEMBER_LIST *tml;
35 uint32_t flags;
36
38
39 /* probably add getter for signalObject */
41 _addSignalObjects(tb, ty);
42
43
45 if (tml) {
47
48 tm=Typemaker2_Member_List_First(tml);
49 while (tm) {
51 int rv;
52
53 rv=_addMemberProtoTypes(tb, ty, tm);
54 if (rv<0) {
55 DBG_INFO(NULL, "here (%d)", rv);
56 return rv;
57 }
58
59 _addMemberImplementation(tb, ty, tm);
60 }
61
62 tm=Typemaker2_Member_List_Next(tm);
63 }
64 }
65
66 return 0;
67}
68
69
70
72{
73 GWEN_BUFFER *tbuf;
75 const char *sTypeId;
76 const char *sTypePrefix;
77 const char *sApi;
78
81 sTypePrefix=Typemaker2_Type_GetPrefix(ty);
83
84 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
85
86 /* prototype */
87 if (sApi && *sApi)
88 GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
89
91 "GWEN_SIGNALOBJECT *%s_GetSignalObject(const %s *p_struct);\n",
92 sTypePrefix, sTypeId);
93
96
97 /* implementation */
99 "GWEN_SIGNALOBJECT *%s_GetSignalObject(const %s *p_struct) {\n",
100 sTypePrefix, sTypeId);
101
102 GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
103 GWEN_Buffer_AppendString(tbuf, " return p_struct->_signalObject;\n");
104
105 GWEN_Buffer_AppendString(tbuf, "}\n");
106
108 GWEN_Buffer_free(tbuf);
109}
110
111
112
114{
116 TYPEMAKER2_TYPE *mty;
117 GWEN_BUFFER *tbuf;
118 const char *sApi;
119
122
124 assert(mty);
125
126 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
127
128 /* apidoc */
130 "/** Getter.\n"
131 " * Use this function to get the member \"%s\" (see @ref %s_%s)\n*/\n",
135
136 /* prototype */
138 GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi);
139
140 _addFunctionDeclaration(ty, tm, tbuf);
141
142 GWEN_Buffer_AppendString(tbuf, ";\n");
143
144 switch (Typemaker2_Member_GetAccess(tm)) {
147 break;
150 break;
153 break;
156 break;
157 default:
158 DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type");
159 GWEN_Buffer_free(tbuf);
160 return GWEN_ERROR_BAD_DATA;
161 }
162 GWEN_Buffer_free(tbuf);
163
164 return 0;
165}
166
167
168
170{
171 TYPEMAKER2_TYPE *mty;
172 GWEN_BUFFER *tbuf;
173
175 assert(mty);
176
177 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
178
179 _addFunctionDeclaration(ty, tm, tbuf);
180
181 GWEN_Buffer_AppendString(tbuf, "{\n");
182
183 GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n");
184 GWEN_Buffer_AppendArgs(tbuf, " return p_struct->%s;\n", Typemaker2_Member_GetName(tm));
185
186 GWEN_Buffer_AppendString(tbuf, "}\n");
187
189
190 GWEN_Buffer_free(tbuf);
191}
192
193
194
196{
197 TYPEMAKER2_TYPE *mty;
198 const char *sTypeId;
199 const char *sTypePrefix;
200 const char *sMemberName;
201 const char *s;
202
204 sTypePrefix=Typemaker2_Type_GetPrefix(ty);
205 sMemberName=Typemaker2_Member_GetName(tm);
206
208 assert(mty);
209
210
211 /* determine and write return type */
212 /* const return value? */
216 GWEN_Buffer_AppendString(tbuf, "const ");
217
218 /* enum return value? */
220 TYPEMAKER2_ENUM *te;
221 const char *s;
222
224 assert(te);
226 if (s && *s)
228 else {
231 }
232 }
233 else {
236 }
237
238 GWEN_Buffer_AppendString(tbuf, " ");
239
240 /* pointer return value? */
243 GWEN_Buffer_AppendString(tbuf, "*");
244
245 /* function name */
246 GWEN_Buffer_AppendArgs(tbuf, "%s_Get%c%s(", sTypePrefix, toupper(*sMemberName), sMemberName+1);
247
249 GWEN_Buffer_AppendString(tbuf, "const ");
250
251 GWEN_Buffer_AppendArgs(tbuf, "%s *p_struct)", sTypeId);
252}
253
254
255
256
257
#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
int GWEN_Buffer_AppendArgs(GWEN_BUFFER *bf, const char *fmt,...)
Definition buffer.c:1087
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition buffer.c:653
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition buffer.c:89
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition buffer.c:992
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_BAD_DATA
Definition error.h:121
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
#define GWEN_LOGDOMAIN
Definition logger.h:35
static void _addSignalObjects(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition tm2c_getter.c:71
int TM2C_BuildGetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition tm2c_getter.c:32
static void _addFunctionDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf)
static int _addMemberProtoTypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
static void _addMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm)
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition tm_builder.c:204
void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition tm_builder.c:172
void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition tm_builder.c:180
void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition tm_builder.c:188
void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s)
Definition tm_builder.c:196
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition tm_builder.c:133
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition tm_builder.h:26
const char * Typemaker2_Enum_GetType(const TYPEMAKER2_ENUM *p_struct)
Definition tm_enum.c:192
struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM
Definition tm_enum.h:24
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:467
TYPEMAKER2_ENUM * Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:485
int Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:347
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:237
uint32_t Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:281
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:83
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition tm_member.h:21
int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:171
const char * Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:585
uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:361
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:607
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:683
#define TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS
Definition tm_type.h:62
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition tm_type.h:21
#define TYPEMAKER2_FLAGS_NOCONSTOBJECT
Definition tm_type.h:45
#define TYPEMAKER2_FLAGS_CONST
Definition tm_type.h:33
#define TYPEMAKER2_FLAGS_ENUM
Definition tm_type.h:38
@ TypeMaker2_Access_Private
Definition tm_type.h:89
@ TypeMaker2_Access_Library
Definition tm_type.h:88
@ TypeMaker2_Access_Protected
Definition tm_type.h:87
@ TypeMaker2_Access_Public
Definition tm_type.h:86
@ TypeMaker2_Type_Array
Definition tm_type.h:79
@ TypeMaker2_Type_Pointer
Definition tm_type.h:78
#define TYPEMAKER2_FLAGS_OMIT
Definition tm_type.h:41
#define TYPEMAKER2_TYPEFLAGS_WITH_SLOTS
Definition tm_type.h:63
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER