1 /*
2 * Copyright 2005-2018 ECMWF.
3 *
4 * This software is licensed under the terms of the Apache Licence Version 2.0
5 * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6 *
7 * In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
8 * virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
9 */
10
11 /**************************************
12 * Enrico Fucile
13 **************************************/
14
15
16 #include "grib_api_internal.h"
17
18
init_dumpers(grib_dumper_class * c,grib_dumper * d)19 static void init_dumpers(grib_dumper_class* c,grib_dumper* d)
20 {
21 if(c) {
22 grib_dumper_class *s = c->super ? *(c->super) : NULL;
23 if(!c->inited)
24 {
25 if(c->init_class) c->init_class(c);
26 c->inited = 1;
27 }
28 init_dumpers(s,d);
29 if(c->init) c->init(d);
30 }
31 }
32
grib_init_dumper(grib_dumper * d)33 void grib_init_dumper(grib_dumper* d)
34 {
35 init_dumpers(d->cclass,d);
36 }
37
grib_dumper_delete(grib_dumper * d)38 void grib_dumper_delete(grib_dumper* d)
39 {
40 grib_dumper_class *c = d->cclass;
41 grib_context *ctx = d->handle->context;
42 while(c)
43 {
44 grib_dumper_class *s = c->super ? *(c->super) : NULL;
45 if(c->destroy) c->destroy(d);
46 c = s;
47 }
48 grib_context_free(ctx,d);
49 }
50
51
grib_dump_long(grib_dumper * d,grib_accessor * a,const char * comment)52 void grib_dump_long(grib_dumper* d, grib_accessor* a, const char* comment)
53 {
54 grib_dumper_class *c = d->cclass;
55 while(c)
56 {
57 if(c->dump_long)
58 {
59 c->dump_long(d, a, comment);
60 return;
61 }
62 c = c->super ? *(c->super) : NULL;
63 }
64 Assert(0);
65 }
66
grib_dump_double(grib_dumper * d,grib_accessor * a,const char * comment)67 void grib_dump_double(grib_dumper* d,grib_accessor* a,const char* comment)
68 {
69 grib_dumper_class *c = d->cclass;
70 while(c)
71 {
72 if(c->dump_double)
73 {
74 c->dump_double(d, a, comment);
75 return;
76 }
77 c = c->super ? *(c->super) : NULL;
78 }
79 Assert(0);
80 }
81
grib_dump_string(grib_dumper * d,grib_accessor * a,const char * comment)82 void grib_dump_string(grib_dumper* d,grib_accessor* a,const char* comment)
83 {
84 grib_dumper_class *c = d->cclass;
85 while(c)
86 {
87 if(c->dump_string)
88 {
89 c->dump_string(d, a, comment);
90 return;
91 }
92 c = c->super ? *(c->super) : NULL;
93 }
94 Assert(0);
95 }
96
grib_dump_label(grib_dumper * d,grib_accessor * a,const char * comment)97 void grib_dump_label(grib_dumper* d,grib_accessor* a,const char* comment)
98 {
99 grib_dumper_class *c = d->cclass;
100 while(c)
101 {
102 if(c->dump_label)
103 {
104 c->dump_label(d, a, comment);
105 return;
106 }
107 c = c->super ? *(c->super) : NULL;
108 }
109 Assert(0);
110 }
111
grib_dump_bytes(grib_dumper * d,grib_accessor * a,const char * comment)112 void grib_dump_bytes(grib_dumper* d,grib_accessor* a,const char* comment)
113 {
114 grib_dumper_class *c = d->cclass;
115 while(c)
116 {
117 if(c->dump_bytes)
118 {
119 c->dump_bytes(d, a, comment);
120 return;
121 }
122 c = c->super ? *(c->super) : NULL;
123 }
124 Assert(0);
125 }
126
grib_dump_bits(grib_dumper * d,grib_accessor * a,const char * comment)127 void grib_dump_bits(grib_dumper* d,grib_accessor* a,const char* comment)
128 {
129 grib_dumper_class *c = d->cclass;
130 while(c)
131 {
132 if(c->dump_bits)
133 {
134 c->dump_bits(d, a, comment);
135 return;
136 }
137 c = c->super ? *(c->super) : NULL;
138 }
139 Assert(0);
140 }
141
142
grib_dump_section(grib_dumper * d,grib_accessor * a,grib_block_of_accessors * block)143 void grib_dump_section(grib_dumper* d,grib_accessor* a,grib_block_of_accessors* block)
144 {
145 grib_dumper_class *c = d->cclass;
146 while(c)
147 {
148 if(c->dump_section)
149 {
150 c->dump_section(d, a, block);
151 return;
152 }
153 c = c->super ? *(c->super) : NULL;
154 }
155 Assert(0);
156 }
157
grib_dump_values(grib_dumper * d,grib_accessor * a)158 void grib_dump_values(grib_dumper* d,grib_accessor* a)
159 {
160 grib_dumper_class *c = d->cclass;
161 while(c)
162 {
163 if(c->dump_values)
164 {
165 c->dump_values(d, a);
166 return;
167 }
168 c = c->super ? *(c->super) : NULL;
169 }
170 Assert(0);
171 }
172
grib_dump_header(grib_dumper * d,grib_handle * h)173 void grib_dump_header(grib_dumper* d,grib_handle* h)
174 {
175 grib_dumper_class *c = d->cclass;
176 while(c)
177 {
178 if(c->header)
179 {
180 c->header(d,h);
181 return;
182 }
183 c = c->super ? *(c->super) : NULL;
184 }
185 }
186
grib_dump_footer(grib_dumper * d,grib_handle * h)187 void grib_dump_footer(grib_dumper* d,grib_handle* h)
188 {
189 grib_dumper_class *c = d->cclass;
190 while(c)
191 {
192 if(c->footer)
193 {
194 c->footer(d,h);
195 return;
196 }
197 c = c->super ? *(c->super) : NULL;
198 }
199 }
200