3 /* ddt_declare - user functions to create datatypes on locale machine */
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"
14 gras_datadesc_declare_struct_cb(const char *name,
15 gras_datadesc_type_cb_void_t pre,
16 gras_datadesc_type_cb_void_t post,
19 gras_datadesc_type_t *type;
20 TRY(gras_ddt_new_struct(name, pre, post, &type));
21 TRY(gras_ddt_register(type));
27 gras_datadesc_declare_struct_add_name_cb(long int struct_code,
28 const char *field_name,
29 const char *field_type_name,
30 gras_datadesc_type_cb_void_t pre_cb,
31 gras_datadesc_type_cb_void_t post_cb) {
34 gras_datadesc_type_t *struct_type;
35 gras_datadesc_type_t *field_type;
37 TRY(gras_set_get_by_id(gras_datadesc_set_local,struct_code,
38 (gras_set_elm_t**)struct_type));
39 TRY(gras_set_get_by_name(gras_datadesc_set_local,field_type_name,
40 (gras_set_elm_t**)field_type));
42 TRY(gras_ddt_new_struct_append(struct_type,
43 field_name, field_type,
49 gras_datadesc_declare_struct_add_code_cb(long int struct_code,
50 const char *field_name,
52 gras_datadesc_type_cb_void_t pre_cb,
53 gras_datadesc_type_cb_void_t post_cb) {
55 gras_datadesc_type_t *struct_type;
56 gras_datadesc_type_t *field_type;
58 TRY(gras_set_get_by_id(gras_datadesc_set_local,struct_code,
59 (gras_set_elm_t**)struct_type));
60 TRY(gras_set_get_by_id(gras_datadesc_set_local,field_code,
61 (gras_set_elm_t**)field_type));
63 TRY(gras_ddt_new_struct_append(struct_type,
64 field_name, field_type,
71 gras_datadesc_declare_union_cb(const char *name,
72 gras_datadesc_type_cb_int_t field_count,
73 gras_datadesc_type_cb_void_t post,
76 gras_datadesc_type_t *type;
77 TRY(gras_ddt_new_union(name, field_count, post, &type));
78 TRY(gras_ddt_register(type));
84 gras_datadesc_declare_union_add_name_cb(long int union_code,
85 const char *field_name,
86 const char *field_type_name,
87 gras_datadesc_type_cb_void_t pre_cb,
88 gras_datadesc_type_cb_void_t post_cb) {
90 gras_datadesc_type_t *union_type;
91 gras_datadesc_type_t *field_type;
93 TRY(gras_set_get_by_id(gras_datadesc_set_local,union_code,
94 (gras_set_elm_t**)union_type));
95 TRY(gras_set_get_by_name(gras_datadesc_set_local,field_type_name,
96 (gras_set_elm_t**)field_type));
98 TRY(gras_ddt_new_union_append(union_type,
99 field_name, field_type,
105 gras_datadesc_declare_union_add_code_cb(long int union_code,
106 const char *field_name,
108 gras_datadesc_type_cb_void_t pre_cb,
109 gras_datadesc_type_cb_void_t post_cb) {
110 gras_error_t errcode;
111 gras_datadesc_type_t *union_type;
112 gras_datadesc_type_t *field_type;
114 TRY(gras_set_get_by_id(gras_datadesc_set_local,union_code,
115 (gras_set_elm_t**)union_type));
116 TRY(gras_set_get_by_id(gras_datadesc_set_local,field_code,
117 (gras_set_elm_t**)field_type));
119 TRY(gras_ddt_new_union_append(union_type,
120 field_name, field_type,
127 gras_datadesc_declare_ref_cb(const char *name,
128 gras_datadesc_type_t *referenced_type,
129 gras_datadesc_type_cb_int_t discriminant,
130 gras_datadesc_type_cb_void_t post,
132 gras_error_t errcode;
133 gras_datadesc_type_t *type;
134 TRY(gras_ddt_new_ref(name, referenced_type,discriminant,post, &type));
135 TRY(gras_ddt_register(type));
141 gras_datadesc_declare_array_cb(const char *name,
142 gras_datadesc_type_t *element_type,
144 gras_datadesc_type_cb_int_t dynamic_size,
145 gras_datadesc_type_cb_void_t post,
147 gras_error_t errcode;
148 gras_datadesc_type_t *type;
149 TRY(gras_ddt_new_array(name, element_type, fixed_size, dynamic_size, post, &type));
150 TRY(gras_ddt_register(type));
156 * gras_datadesc_parse:
158 * Parse a C type declaration, and declare locally the corresponding type description
161 gras_datadesc_parse(const char *name,
162 const char *definition,
164 gras_error_t errcode;
165 gras_datadesc_type_t *type;
166 TRY(gras_ddt_new_parse(name,definition,&type));
167 TRY(gras_ddt_register( type));
173 * gras_datadesc_parse:
175 * Parse a NWS type declaration, and declare locally the corresponding type description
178 gras_datadesc_from_nws(const char *name,
179 const DataDescriptor *desc,
183 gras_error_t errcode;
184 gras_datadesc_type_t *type;
185 TRY(gras_ddt_new_from_nws(name,desc,howmany,&type));
186 TRY(gras_ddt_register(type));