gwenhywfar 5.12.0
tm2c_object.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_object.h"
16#include "tm2c_misc.h"
17
18#include <gwenhywfar/debug.h>
19
20#include <ctype.h>
21
22
23
25{
26 GWEN_BUFFER *tbuf;
27 const char *s;
28 TYPEMAKER2_MEMBER_LIST *tml;
29 /* uint32_t flags; */
31
33 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
34
35 /* flags=Typemaker2_Type_GetFlags(ty); */
36
37 /* prototype */
39 if (s) {
41 GWEN_Buffer_AppendString(tbuf, " ");
42 }
43 GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *");
46 GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n");
49
50 /* implementation */
51 GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *");
54 GWEN_Buffer_AppendString(tbuf, "_CreateColumnList() {\n");
55
57 GWEN_Buffer_AppendString(tbuf, " return NULL;\n");
58 }
59 else {
60 GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN_LIST *p_cl;\n");
61 GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN *p_c;\n");
62 GWEN_Buffer_AppendString(tbuf, "\n");
63
64 GWEN_Buffer_AppendString(tbuf, " p_cl=AQDB_Column_List_new();\n");
65 GWEN_Buffer_AppendString(tbuf, "\n");
66
68 if (tml) {
70
71 tm=Typemaker2_Member_List_First(tml);
72 while (tm) {
73 TYPEMAKER2_TYPE *mty;
74
76 assert(mty);
77
79 char numbuf[32];
80 int l;
81
82 GWEN_Buffer_AppendString(tbuf, " /* member \"");
85 GWEN_Buffer_AppendString(tbuf, "\" */\n");
86
87 GWEN_Buffer_AppendString(tbuf, " p_c=AQDB_Column_new(");
89 if (s && *s) {
91 }
92 else {
93 DBG_ERROR(GWEN_LOGDOMAIN, "Type has no AQDB type element");
94 GWEN_Buffer_free(tbuf);
96 }
97
98 GWEN_Buffer_AppendString(tbuf, ", \"");
101 GWEN_Buffer_AppendString(tbuf, "\", ");
102
104 if (l==0) {
105 DBG_ERROR(GWEN_LOGDOMAIN, "Member [%s] has no maxlen attribute",
107 GWEN_Buffer_free(tbuf);
108 return GWEN_ERROR_BAD_DATA;
109 }
110 snprintf(numbuf, sizeof(numbuf)-1, "%d", l);
111 numbuf[sizeof(numbuf)-1]=0;
112 GWEN_Buffer_AppendString(tbuf, numbuf);
113 GWEN_Buffer_AppendString(tbuf, ");\n");
114 GWEN_Buffer_AppendString(tbuf, " AQDB_Column_List_Add(p_c, p_cl);\n");
115 }
116 else {
117 GWEN_Buffer_AppendString(tbuf, " /* member \"");
120 GWEN_Buffer_AppendString(tbuf, "\" is volatile, not adding to column list */\n");
121 }
122 GWEN_Buffer_AppendString(tbuf, "\n");
123
124 tm=Typemaker2_Member_List_Next(tm);
125 }
126 }
127 GWEN_Buffer_AppendString(tbuf, " return p_cl;\n");
128 }
129
130 GWEN_Buffer_AppendString(tbuf, "}\n");
131
133 GWEN_Buffer_free(tbuf);
134
135 return 0;
136}
137
138
139
141{
142 GWEN_BUFFER *tbuf;
143 const char *s;
144 /* uint32_t flags; */
146
148 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
149
150 /* flags=Typemaker2_Type_GetFlags(ty); */
151
152 /* prototype */
154 if (s) {
156 GWEN_Buffer_AppendString(tbuf, " ");
157 }
158 GWEN_Buffer_AppendString(tbuf, "int ");
161 GWEN_Buffer_AppendString(tbuf, "_CreateTable(AQDB_DB *p_db, const char *p_name, uint32_t p_flags);");
163 GWEN_Buffer_Reset(tbuf);
164
165 /* implementation */
166 GWEN_Buffer_AppendString(tbuf, "int ");
169 GWEN_Buffer_AppendString(tbuf, "_CreateTable(AQDB_DB *p_db, const char *p_name, uint32_t p_flags) {\n");
170
171 GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN_LIST *p_cl;\n");
172 GWEN_Buffer_AppendString(tbuf, " int p_rv;\n");
173 GWEN_Buffer_AppendString(tbuf, "\n");
174
175 GWEN_Buffer_AppendString(tbuf, " p_cl=");
178 GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n");
179
180 GWEN_Buffer_AppendString(tbuf, " p_rv=AQDB_DB_CreateTable(p_db, p_name, p_flags, p_cl);\n");
181 GWEN_Buffer_AppendString(tbuf, " AQDB_Column_List_free(p_cl);\n");
182 GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n");
183 GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\", p_rv);\n");
184 GWEN_Buffer_AppendString(tbuf, " return p_rv;\n");
185 GWEN_Buffer_AppendString(tbuf, " }\n");
186
187 GWEN_Buffer_AppendString(tbuf, " return 0;\n");
188 GWEN_Buffer_AppendString(tbuf, "}\n");
189
191 GWEN_Buffer_free(tbuf);
192
193 return 0;
194}
195
196
197
199{
200 GWEN_BUFFER *tbuf;
201 const char *s;
202 /* uint32_t flags; */
204
206 tbuf=GWEN_Buffer_new(0, 256, 0, 1);
207
208 /* flags=Typemaker2_Type_GetFlags(ty); */
209
210 /* prototype */
212 if (s) {
214 GWEN_Buffer_AppendString(tbuf, " ");
215 }
216 GWEN_Buffer_AppendString(tbuf, "int ");
219 GWEN_Buffer_AppendString(tbuf, "_CreateObject(AQDB_DB *p_db, AQDB_ID p_tableId, AQDB_ID p_id, AQDB_OBJECT **pp_o);\n");
221 GWEN_Buffer_Reset(tbuf);
222
223 /* implementation */
224 GWEN_Buffer_AppendString(tbuf, "int ");
227 GWEN_Buffer_AppendString(tbuf, "_CreateObject(AQDB_DB *p_db, AQDB_ID p_tableId, AQDB_ID p_id, AQDB_OBJECT **pp_o) {\n");
228
229 GWEN_Buffer_AppendString(tbuf, " AQDB_OBJECT *p_o;\n");
230 GWEN_Buffer_AppendString(tbuf, "\n");
231
232 GWEN_Buffer_AppendString(tbuf, " p_o=AQDB_Object_new(p_tableId, p_id, ");
234 if (s && *s) {
235 }
237 GWEN_Buffer_AppendString(tbuf, ");\n");
238 GWEN_Buffer_AppendString(tbuf, " *pp_o=p_o;\n");
239 GWEN_Buffer_AppendString(tbuf, " return 0;\n");
240 GWEN_Buffer_AppendString(tbuf, "}\n");
241
243 GWEN_Buffer_free(tbuf);
244
245 return 0;
246}
247
248
249
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition buffer.c:42
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_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
int TM2C_BuildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition tm2c_object.c:24
int TM2C_BuildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
int TM2C_BuildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
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
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition tm_builder.c:133
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition tm_builder.h:26
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:467
uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:237
int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:369
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition tm_member.c:83
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition tm_member.h:21
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:791
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
const char * Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:195
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition tm_type.c:683
struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE
Definition tm_type.h:21
#define TYPEMAKER2_FLAGS_VOLATILE
Definition tm_type.h:32
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER