#include "DataDesc/datadesc_private.h"
-/* callback for array size when sending strings */
-static int
-_strlen_cb(void *vars,
- gras_datadesc_type_t *type,
- void *data) {
-
- // (void)p_vars; /* FIXME(Oli): Why that? Avoid warning? That's not needed*/
- // (void)p_type;
-
- return 1+(long int)strlen(data);
-}
/***
*** Table of all known architectures.
***/
-typedef struct {
- const char *name;
-
- int endian;
-
- int sizeof_char;
- int sizeof_short;
- int sizeof_int;
- int sizeof_long;
- int sizeof_long_long;
-
- int sizeof_pdata;
- int sizeof_pfunc;
-
- int sizeof_float;
- int sizeof_double;
-} gras_arch_sizes_t;
-
-const gras_arch_sizes_t gras_arch_sizes[] = {
- {"i386", 0, 1,2,4,4,8, 4,4, 4,8}
+const gras_arch_sizes_t gras_arch_sizes[gras_arch_count] = {
+ {"i386", 0, {1,2,4,4,8, 4,4, 4,8}}
};
-const int gras_arch_sizes_count = 1;
-
/**
* gras_free_ddt:
*
- * gime that memory back, dude
+ * gime that memory back, dude. I mean it.
*/
static void gras_free_ddt(void *ddt) {
gras_datadesc_type_t *type= (gras_datadesc_type_t *)ddt;
*
* Add a type to a type set
*/
-gras_error_t gras_ddt_register(gras_set_t *set,
- gras_datadesc_type_t *type) {
- return gras_set_add(set,
+gras_error_t gras_ddt_register(gras_datadesc_type_t *type) {
+ return gras_set_add(gras_datadesc_set_local,
(gras_set_elm_t*)type,
&gras_free_ddt);
*
* Retrieve a type from its name
*/
-gras_error_t gras_ddt_get_by_name(gras_set_t *set,
- const char *name,
+gras_error_t gras_ddt_get_by_name(const char *name,
gras_datadesc_type_t **type) {
- return gras_set_get_by_name(set,name,(gras_set_elm_t**)type);
+ return gras_set_get_by_name(gras_datadesc_set_local,name,(gras_set_elm_t**)type);
}
/**
- * gras_dd_typeset_create:
+ * gras_ddt_get_by_code:
*
- * create a type set, and bootstrap it by declaring all basic types in it
+ * Retrieve a type from its name
*/
-gras_error_t
-gras_dd_typeset_create(int gras_arch,
- gras_set_t **s) {
- gras_error_t errcode;
- gras_datadesc_type_t *ddt; /* What to add */
- gras_datadesc_type_t *elm; /* element of ddt when needed */
- gras_set_t *set; /* result */
-
- if (gras_arch >= gras_arch_sizes_count) {
- RAISE1(mismatch_error, "Remote architecture signature (=%d) unknown locally\n", gras_arch);
- }
-
- TRY(gras_set_new(s));
- set=*s;
-
- TRY(gras_ddt_new_scalar("signed char",
- gras_arch_sizes[gras_arch].sizeof_char,
- e_gras_dd_scalar_encoding_sint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("unsigned char",
- gras_arch_sizes[gras_arch].sizeof_char,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- TRY(gras_ddt_new_scalar("signed short int",
- gras_arch_sizes[gras_arch].sizeof_short,
- e_gras_dd_scalar_encoding_sint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("unsigned short int",
- gras_arch_sizes[gras_arch].sizeof_short,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- TRY(gras_ddt_new_scalar("signed int",
- gras_arch_sizes[gras_arch].sizeof_int,
- e_gras_dd_scalar_encoding_sint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("unsigned int",
- gras_arch_sizes[gras_arch].sizeof_int,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- TRY(gras_ddt_new_scalar("signed long int",
- gras_arch_sizes[gras_arch].sizeof_long,
- e_gras_dd_scalar_encoding_sint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("unsigned long int",
- gras_arch_sizes[gras_arch].sizeof_long,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- TRY(gras_ddt_new_scalar("signed long long int",
- gras_arch_sizes[gras_arch].sizeof_long_long,
- e_gras_dd_scalar_encoding_sint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("unsigned long long int",
- gras_arch_sizes[gras_arch].sizeof_long_long,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- TRY(gras_ddt_new_scalar("data pointer",
- gras_arch_sizes[gras_arch].sizeof_pdata,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("function pointer",
- gras_arch_sizes[gras_arch].sizeof_pfunc,
- e_gras_dd_scalar_encoding_uint,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- TRY(gras_ddt_new_scalar("float",
- gras_arch_sizes[gras_arch].sizeof_float,
- e_gras_dd_scalar_encoding_float,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_new_scalar("double",
- gras_arch_sizes[gras_arch].sizeof_float,
- e_gras_dd_scalar_encoding_float,
- NULL,
- &ddt));
- TRY(gras_ddt_register(set,ddt));
-
- TRY(gras_ddt_get_by_name(set,"unsigned char",&elm));
- TRY(gras_ddt_new_array("string", elm, 0, _strlen_cb, NULL, &ddt));
- TRY(gras_ddt_register(set,ddt));
-
-
- return no_error;
+gras_error_t gras_ddt_get_by_code(int code,
+ gras_datadesc_type_t **type) {
+ return gras_set_get_by_id(gras_datadesc_set_local,code,(gras_set_elm_t**)type);
}
-