Also handling IN and IN_OUT types

This commit is contained in:
Pierre Pronchery 2009-10-24 01:04:41 +00:00
parent 44c43d3254
commit d63fc1541a
2 changed files with 24 additions and 8 deletions

View File

@ -42,4 +42,3 @@ It would also be helpful to:
- add scripting possibilities to configure (to regenerate the headers - add scripting possibilities to configure (to regenerate the headers
accordingly) accordingly)
- place this code directly inside AppInterface's class - place this code directly inside AppInterface's class
- implement IN/OUT/IN_OUT

View File

@ -36,7 +36,7 @@ typedef struct _BrokerData
/* broker */ /* broker */
static void _broker_head(BrokerData * data); static void _broker_head(BrokerData * data);
static int _broker_foreach(char const * key, Hash * value, BrokerData * data); static int _broker_foreach(char const * key, Hash * value, BrokerData * data);
static void _broker_foreach_arg(BrokerData * data, char const * sep, static int _broker_foreach_arg(BrokerData * data, char const * sep,
char const * arg); char const * arg);
static void _broker_tail(BrokerData * data); static void _broker_tail(BrokerData * data);
@ -63,7 +63,7 @@ static int _broker(char const * outfile, char const * filename)
} }
_broker_head(&data); _broker_head(&data);
fputs("\n\n/* functions */\n", data.fp); fputs("\n\n/* functions */\n", data.fp);
hash_foreach(config, _broker_foreach, &data); hash_foreach(config, (HashForeach)_broker_foreach, &data);
_broker_tail(&data); _broker_tail(&data);
if(outfile != NULL) if(outfile != NULL)
fclose(data.fp); fclose(data.fp);
@ -83,7 +83,19 @@ static void _broker_head(BrokerData * data)
fputs("typedef Buffer * BUFFER;\n", data->fp); fputs("typedef Buffer * BUFFER;\n", data->fp);
fputs("typedef int32_t INT32;\n", data->fp); fputs("typedef int32_t INT32;\n", data->fp);
fputs("typedef uint32_t UINT32;\n", data->fp); fputs("typedef uint32_t UINT32;\n", data->fp);
fputs("typedef String * STRING;\n", data->fp); fputs("typedef String const * STRING;\n", data->fp);
fputs("\ntypedef BUFFER BUFFER_IN;\n", data->fp);
fputs("typedef INT32 INT32_IN;\n", data->fp);
fputs("typedef UINT32 UINT32_IN;\n", data->fp);
fputs("typedef STRING STRING_IN;\n", data->fp);
fputs("\ntypedef Buffer * BUFFER_OUT;\n", data->fp);
fputs("typedef int32_t * INT32_OUT;\n", data->fp);
fputs("typedef uint32_t * UINT32_OUT;\n", data->fp);
fputs("typedef String ** STRING_OUT;\n", data->fp);
fputs("\ntypedef Buffer * BUFFER_INOUT;\n", data->fp);
fputs("typedef int32_t * INT32_INOUT;\n", data->fp);
fputs("typedef uint32_t * UINT32_INOUT;\n", data->fp);
fputs("typedef String ** STRING_INOUT;\n", data->fp);
} }
static int _broker_foreach(char const * key, Hash * value, BrokerData * data) static int _broker_foreach(char const * key, Hash * value, BrokerData * data)
@ -103,27 +115,32 @@ static int _broker_foreach(char const * key, Hash * value, BrokerData * data)
snprintf(buf, sizeof(buf), "arg%d", i + 1); snprintf(buf, sizeof(buf), "arg%d", i + 1);
if((p = hash_get(value, buf)) == NULL) if((p = hash_get(value, buf)) == NULL)
break; break;
_broker_foreach_arg(data, sep, p); if(_broker_foreach_arg(data, sep, p) != 0)
return 1;
sep = ", "; sep = ", ";
} }
fprintf(data->fp, "%s", ");\n"); fprintf(data->fp, "%s", ");\n");
return 0; return 0;
} }
static void _broker_foreach_arg(BrokerData * data, char const * sep, static int _broker_foreach_arg(BrokerData * data, char const * sep,
char const * arg) char const * arg)
{ {
char * p; char * p;
size_t size;
if((p = strchr(arg, ',')) == NULL) if((p = strchr(arg, ',')) == NULL)
{ {
fprintf(data->fp, "%s%s", sep, arg); fprintf(data->fp, "%s%s", sep, arg);
return; return 0;
} }
fputs(sep, data->fp); fputs(sep, data->fp);
fwrite(arg, sizeof(*arg), p - arg, data->fp); size = p - arg;
if(fwrite(arg, sizeof(*arg), size, data->fp) != size)
return 1;
if(*(++p) != '\0') if(*(++p) != '\0')
fprintf(data->fp, " %s", p); fprintf(data->fp, " %s", p);
return 0;
} }
static void _broker_tail(BrokerData * data) static void _broker_tail(BrokerData * data)