Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[Data description]
[simgrid.git] / src / gras / DataDesc / datadesc.c
1 /* $Id$ */
2
3 /* datadesc - data description in order to send/recv it in GRAS             */
4
5 /* Authors: Olivier Aumage, Martin Quinson                                  */
6 /* Copyright (C) 2003, 2004 the GRAS posse.                                 */
7
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. */
10
11 #include "DataDesc/datadesc_private.h"
12
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;
16
17
18 /* callback for array size when sending strings */
19 static int
20 _strlen_cb(void                 *vars,
21            gras_datadesc_type_t *type,
22            void                 *data) {
23
24   return 1+(long int)strlen(data);
25 }
26
27
28 /**
29  * gras_datadesc_init:
30  *
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.
34  **/
35 void
36 gras_datadesc_init(void) {
37   gras_error_t errcode;
38   gras_datadesc_type_t *ddt; /* What to add */
39   gras_datadesc_type_t *elm; /* element of ddt when needed */
40
41   /* only initialize once */
42   if (gras_datadesc_set_local != NULL)
43     return;
44   
45   VERB0("Initializing DataDesc");
46   
47   TRYFAIL(gras_set_new(&gras_datadesc_set_local));
48   
49   TRYFAIL(gras_datadesc_declare_scalar("signed char", 
50                                        gras_ddt_scalar_char, 
51                                        e_gras_dd_scalar_encoding_sint, 
52                                        NULL, &ddt));
53   TRYFAIL(gras_datadesc_declare_scalar("char", 
54                                        gras_ddt_scalar_char, 
55                                        e_gras_dd_scalar_encoding_sint, 
56                                        NULL, &ddt));
57   TRYFAIL(gras_datadesc_declare_scalar("unsigned char", 
58                                        gras_ddt_scalar_char, 
59                                        e_gras_dd_scalar_encoding_uint, 
60                                        NULL, &ddt));
61   
62   TRYFAIL(gras_datadesc_declare_scalar("signed short int", 
63                                        gras_ddt_scalar_short, 
64                                        e_gras_dd_scalar_encoding_sint, 
65                                        NULL, &ddt));
66   TRYFAIL(gras_datadesc_declare_scalar("short int", 
67                                        gras_ddt_scalar_short, 
68                                        e_gras_dd_scalar_encoding_sint, 
69                                        NULL, &ddt));
70   TRYFAIL(gras_datadesc_declare_scalar("unsigned short int", 
71                                        gras_ddt_scalar_short, 
72                                        e_gras_dd_scalar_encoding_uint, 
73                                        NULL, &ddt));
74   
75   TRYFAIL(gras_datadesc_declare_scalar("signed int", 
76                                        gras_ddt_scalar_int, 
77                                        e_gras_dd_scalar_encoding_sint, 
78                                        NULL, &ddt));
79   TRYFAIL(gras_datadesc_declare_scalar("int", 
80                                        gras_ddt_scalar_int, 
81                                        e_gras_dd_scalar_encoding_sint, 
82                                        NULL, &ddt));
83   TRYFAIL(gras_datadesc_declare_scalar("unsigned int", 
84                                        gras_ddt_scalar_int, 
85                                        e_gras_dd_scalar_encoding_uint, 
86                                        NULL, &ddt));
87   
88   TRYFAIL(gras_datadesc_declare_scalar("signed long int", 
89                                        gras_ddt_scalar_long, 
90                                        e_gras_dd_scalar_encoding_sint, 
91                                        NULL, &ddt));
92   TRYFAIL(gras_datadesc_declare_scalar("long int", 
93                                        gras_ddt_scalar_long, 
94                                        e_gras_dd_scalar_encoding_sint, 
95                                        NULL, &ddt));
96   TRYFAIL(gras_datadesc_declare_scalar("unsigned long int", 
97                                        gras_ddt_scalar_long, 
98                                        e_gras_dd_scalar_encoding_uint, 
99                                        NULL, &ddt));
100   
101   TRYFAIL(gras_datadesc_declare_scalar("signed long long int", 
102                                        gras_ddt_scalar_long_long, 
103                                        e_gras_dd_scalar_encoding_sint, 
104                                        NULL, &ddt));
105   TRYFAIL(gras_datadesc_declare_scalar("long long int", 
106                                        gras_ddt_scalar_long_long, 
107                                        e_gras_dd_scalar_encoding_sint, 
108                                        NULL, &ddt));
109   TRYFAIL(gras_datadesc_declare_scalar("unsigned long long int", 
110                                        gras_ddt_scalar_long_long, 
111                                        e_gras_dd_scalar_encoding_uint, 
112                                        NULL, &ddt));
113   
114   TRYFAIL(gras_datadesc_declare_scalar("data pointer", 
115                                        gras_ddt_scalar_pdata, 
116                                        e_gras_dd_scalar_encoding_uint, 
117                                        NULL, &ddt));
118   TRYFAIL(gras_datadesc_declare_scalar("function pointer", 
119                                        gras_ddt_scalar_pfunc, 
120                                        e_gras_dd_scalar_encoding_uint, 
121                                        NULL, &ddt));
122   
123   TRYFAIL(gras_datadesc_declare_scalar("float", 
124                                        gras_ddt_scalar_float, 
125                                        e_gras_dd_scalar_encoding_float, 
126                                        NULL, &ddt));
127   TRYFAIL(gras_datadesc_declare_scalar("double", 
128                                        gras_ddt_scalar_float, 
129                                        e_gras_dd_scalar_encoding_float, 
130                                        NULL,&ddt));
131
132   TRYFAIL(gras_datadesc_declare_array_dyn("string", 
133                                           gras_datadesc_by_name("char"), 
134                                           _strlen_cb,&ddt));
135
136   //  elm=ddt;
137   //  TRYFAIL(gras_datadesc_declare_ref("string", elm, &ddt));
138 }
139
140 /**
141  * gras_datadesc_exit:
142  *
143  * Finalize the datadesc module
144  **/
145 void
146 gras_datadesc_exit(void) {
147   VERB0("Exiting DataDesc");
148   gras_set_free(&gras_datadesc_set_local);
149   gras_datadesc_set_local = NULL;
150 }
151
152