3 /* datadesc - data description in order to send/recv it in GRAS */
5 /* Authors: Olivier Aumage, Martin Quinson */
6 /* Copyright (C) 2003, 2004 the GRAS posse. */
8 /* This program is free software; you can redistribute it and/or modify it
9 under the terms of the license (GNU LGPL) which comes with this package. */
11 #include "DataDesc/datadesc_private.h"
13 GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(DataDesc,GRAS);
14 /* FIXME: make this host-dependent using a trick such as UserData*/
15 gras_set_t *gras_datadesc_set_local=NULL;
18 /* callback for array size when sending strings */
20 _strlen_cb(void *vars,
21 gras_datadesc_type_t *type,
24 return 1+(long int)strlen(data);
31 * Initialize the datadesc module.
32 * FIXME: We assume that when neither signed nor unsigned is given,
33 * that means signed. To be checked by configure.
36 gras_datadesc_init(void) {
38 gras_datadesc_type_t *ddt; /* What to add */
39 gras_datadesc_type_t *elm; /* element of ddt when needed */
41 /* only initialize once */
42 if (gras_datadesc_set_local != NULL)
45 VERB0("Initializing DataDesc");
47 TRYFAIL(gras_set_new(&gras_datadesc_set_local));
49 TRYFAIL(gras_ddt_new_scalar("signed char",
51 e_gras_dd_scalar_encoding_sint,
53 TRYFAIL(gras_ddt_new_scalar("char",
55 e_gras_dd_scalar_encoding_sint,
57 TRYFAIL(gras_ddt_register(ddt));
59 TRYFAIL(gras_ddt_new_scalar("unsigned char",
61 e_gras_dd_scalar_encoding_uint,
63 TRYFAIL(gras_ddt_register(ddt));
66 TRYFAIL(gras_ddt_new_scalar("signed short int",
67 gras_ddt_scalar_short,
68 e_gras_dd_scalar_encoding_sint,
70 TRYFAIL(gras_ddt_register(ddt));
71 TRYFAIL(gras_ddt_new_scalar("short int",
72 gras_ddt_scalar_short,
73 e_gras_dd_scalar_encoding_sint,
75 TRYFAIL(gras_ddt_register(ddt));
76 TRYFAIL(gras_ddt_new_scalar("unsigned short int",
77 gras_ddt_scalar_short,
78 e_gras_dd_scalar_encoding_uint,
80 TRYFAIL(gras_ddt_register(ddt));
83 TRYFAIL(gras_ddt_new_scalar("signed int",
85 e_gras_dd_scalar_encoding_sint,
87 TRYFAIL(gras_ddt_register(ddt));
88 TRYFAIL(gras_ddt_new_scalar("int",
90 e_gras_dd_scalar_encoding_sint,
92 TRYFAIL(gras_ddt_register(ddt));
93 TRYFAIL(gras_ddt_new_scalar("unsigned int",
95 e_gras_dd_scalar_encoding_uint,
97 TRYFAIL(gras_ddt_register(ddt));
100 TRYFAIL(gras_ddt_new_scalar("signed long int",
101 gras_ddt_scalar_long,
102 e_gras_dd_scalar_encoding_sint,
104 TRYFAIL(gras_ddt_register(ddt));
105 TRYFAIL(gras_ddt_new_scalar("long int",
106 gras_ddt_scalar_long,
107 e_gras_dd_scalar_encoding_sint,
109 TRYFAIL(gras_ddt_register(ddt));
110 TRYFAIL(gras_ddt_new_scalar("unsigned long int",
111 gras_ddt_scalar_long,
112 e_gras_dd_scalar_encoding_uint,
114 TRYFAIL(gras_ddt_register(ddt));
117 TRYFAIL(gras_ddt_new_scalar("signed long long int",
118 gras_ddt_scalar_long_long,
119 e_gras_dd_scalar_encoding_sint,
121 TRYFAIL(gras_ddt_register(ddt));
122 TRYFAIL(gras_ddt_new_scalar("long long int",
123 gras_ddt_scalar_long_long,
124 e_gras_dd_scalar_encoding_sint,
126 TRYFAIL(gras_ddt_register(ddt));
127 TRYFAIL(gras_ddt_new_scalar("unsigned long long int",
128 gras_ddt_scalar_long_long,
129 e_gras_dd_scalar_encoding_uint,
131 TRYFAIL(gras_ddt_register(ddt));
134 TRYFAIL(gras_ddt_new_scalar("data pointer",
135 gras_ddt_scalar_pdata,
136 e_gras_dd_scalar_encoding_uint,
138 TRYFAIL(gras_ddt_register(ddt));
139 TRYFAIL(gras_ddt_new_scalar("function pointer",
140 gras_ddt_scalar_pfunc,
141 e_gras_dd_scalar_encoding_uint,
143 TRYFAIL(gras_ddt_register(ddt));
146 TRYFAIL(gras_ddt_new_scalar("float",
147 gras_ddt_scalar_float,
148 e_gras_dd_scalar_encoding_float,
150 TRYFAIL(gras_ddt_register(ddt));
152 TRYFAIL(gras_ddt_new_scalar("double",
153 gras_ddt_scalar_float,
154 e_gras_dd_scalar_encoding_float,
156 TRYFAIL(gras_ddt_register(ddt));
158 TRYFAIL(gras_datadesc_by_name("char",&elm));
159 TRYFAIL(gras_ddt_new_array("char array", elm, -1, _strlen_cb, NULL, &ddt));
160 TRYFAIL(gras_ddt_register(ddt));
163 TRYFAIL(gras_ddt_new_ref("string", elm, NULL, NULL, &ddt));
164 TRYFAIL(gras_ddt_register(ddt));
168 * gras_datadesc_exit:
170 * Finalize the datadesc module
173 gras_datadesc_exit(void) {
174 VERB0("Exiting DataDesc");
175 gras_set_free(&gras_datadesc_set_local);
176 gras_datadesc_set_local = NULL;