gwenhywfar  5.10.1
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) {
40  GWEN_Buffer_AppendString(tbuf, s);
41  GWEN_Buffer_AppendString(tbuf, " ");
42  }
43  GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *");
45  GWEN_Buffer_AppendString(tbuf, s);
46  GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n");
48  GWEN_Buffer_Reset(tbuf);
49 
50  /* implementation */
51  GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *");
53  GWEN_Buffer_AppendString(tbuf, s);
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 \"");
84  GWEN_Buffer_AppendString(tbuf, s);
85  GWEN_Buffer_AppendString(tbuf, "\" */\n");
86 
87  GWEN_Buffer_AppendString(tbuf, " p_c=AQDB_Column_new(");
89  if (s && *s) {
90  GWEN_Buffer_AppendString(tbuf, s);
91  }
92  else {
93  DBG_ERROR(GWEN_LOGDOMAIN, "Type has no AQDB type element");
94  GWEN_Buffer_free(tbuf);
95  return GWEN_ERROR_BAD_DATA;
96  }
97 
98  GWEN_Buffer_AppendString(tbuf, ", \"");
100  GWEN_Buffer_AppendString(tbuf, s);
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 \"");
119  GWEN_Buffer_AppendString(tbuf, s);
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) {
155  GWEN_Buffer_AppendString(tbuf, s);
156  GWEN_Buffer_AppendString(tbuf, " ");
157  }
158  GWEN_Buffer_AppendString(tbuf, "int ");
160  GWEN_Buffer_AppendString(tbuf, s);
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 ");
168  GWEN_Buffer_AppendString(tbuf, s);
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=");
177  GWEN_Buffer_AppendString(tbuf, s);
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) {
213  GWEN_Buffer_AppendString(tbuf, s);
214  GWEN_Buffer_AppendString(tbuf, " ");
215  }
216  GWEN_Buffer_AppendString(tbuf, "int ");
218  GWEN_Buffer_AppendString(tbuf, s);
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 ");
226  GWEN_Buffer_AppendString(tbuf, s);
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  }
236  GWEN_Buffer_AppendString(tbuf, s);
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 
TYPEMAKER2_TYPEMANAGER * Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb)
Definition: tm_builder.c:133
int TM2C_BuildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:24
TYPEMAKER2_TYPE * Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:467
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
const char * Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:195
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition: buffer.c:42
int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:369
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition: buffer.c:650
#define GWEN_ERROR_BAD_DATA
Definition: error.h:121
int TM2C_BuildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:140
int TM2C_BuildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty)
Definition: tm2c_object.c:198
int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:731
struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER
Definition: tm_builder.h:26
TYPEMAKER2_MEMBER_LIST * Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:641
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
void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s)
Definition: tm_builder.c:204
#define DBG_ERROR(dbg_logger, format, args...)
Definition: debug.h:97
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
struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER
const char * Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:565
const char * Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym)
struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER
Definition: tm_member.h:21
const char * Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm)
Definition: tm_member.c:83
#define TYPEMAKER2_FLAGS_VOLATILE
Definition: tm_type.h:32
const char * Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty)
Definition: tm_type.c:749
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition: buffer.c:989