libsim  Versione 7.2.6
vol7d_serialize_dballe_class.F03
1 ! Copyright (C) 2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
2 ! authors:
3 ! Davide Cesari <dcesari@arpa.emr.it>
4 ! Paolo Patruno <ppatruno@arpa.emr.it>
5 
6 ! This program is free software; you can redistribute it and/or
7 ! modify it under the terms of the GNU General Public License as
8 ! published by the Free Software Foundation; either version 2 of
9 ! the License, or (at your option) any later version.
10 
11 ! This program is distributed in the hope that it will be useful,
12 ! but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ! GNU General Public License for more details.
15 
16 ! You should have received a copy of the GNU General Public License
17 ! along with this program. If not, see <http://www.gnu.org/licenses/>.
18 MODULE vol7d_serialize_dballe_class
19 use,INTRINSIC :: iso_c_binding
22 USE vol7d_class
23 USE dballe_class
24 IMPLICIT NONE
25 
26 TYPE,EXTENDS(vol7d_serialize) :: vol7d_serialize_dballe
27  !!TYPE(vol7d_ana) :: ana !< identificativo della stazione da exportare
28  CONTAINS
29 ! PROCEDURE :: vol7d_serialize_optionparser
30  PROCEDURE :: vol7d_serialize_export
31 END TYPE vol7d_serialize_dballe
32 
33 type counter
34  integer :: nvar,nattr
35  integer :: nanavar,nanaattr
36 end type counter
37 
38 PRIVATE
39 PUBLIC vol7d_serialize_dballe, vol7d_serialize_dballe_new
40 
41 CONTAINS
42 
43 FUNCTION vol7d_serialize_dballe_new() RESULT(this)
44 TYPE(vol7d_serialize_dballe) :: this
45 !!$TYPE(vol7d_ana),INTENT(in),optional :: ana !< identificativo della stazione da exportare
46 !!$
47 !!$if (present(ana))then
48 !!$ this%ana=ana
49 !!$else
50 !!$ call init(this%ana)
51 !!$end if
52 
53 this%vol7d_serialize = vol7d_serialize_new()
54 
55 ! reset unconditionally some parameters
56 this%column = 'ana,time,timerange,level,network'
57 this%loop = 'ana,time,timerange,level,network'
58 this%keep_miss = .false.
59 this%cachedesc = .true.
60 ! call original parse method to fix tuning parameters without forcing
61 ! to call option methods explicitely
62 CALL this%vol7d_serialize_parse()
63 
64 END FUNCTION vol7d_serialize_dballe_new
65 
66 
67 !SUBROUTINE vol7d_serialize_parse(this, category)
68 !CLASS(vol7d_serialize_geojson),INTENT(inout) :: this !< object having undorgone the vol7d_serialize_optionparser method
69 !INTEGER,INTENT(in),OPTIONAL :: category !< log4fortran category for logging error messages
70 !
71 !!! do nothing
72 !
73 !END SUBROUTINE vol7d_serialize_parse
74 
75 
76 
77 SUBROUTINE vol7d_ana_callback_dba(ana, genericptr)
78 TYPE(vol7d_ana), INTENT(in) :: ana
79 TYPE(c_ptr),VALUE :: genericptr
80 
81 type(dbametaanddata),POINTER :: metaanddata
82 
83 CALL c_f_pointer(genericptr, metaanddata)
84 
85 metaanddata%metadata%ana%vol7d_ana=ana
86 
87 END SUBROUTINE vol7d_ana_callback_dba
88 
89 
90 SUBROUTINE vol7d_time_callback_dba(time, genericptr)
91 TYPE(datetime), INTENT(in) :: time
92 TYPE(c_ptr),VALUE :: genericptr
93 
94 type(dbametaanddata),POINTER :: metaanddata
95 
96 CALL c_f_pointer(genericptr, metaanddata)
97 
98 metaanddata%metadata%datetime%datetime=time
99 
100 END SUBROUTINE vol7d_time_callback_dba
101 
102 SUBROUTINE vol7d_timerange_callback_dba(timerange, genericptr)
103 TYPE(vol7d_timerange), INTENT(in) :: timerange
104 TYPE(c_ptr),VALUE :: genericptr
105 
106 type(dbametaanddata),POINTER :: metaanddata
107 
108 CALL c_f_pointer(genericptr, metaanddata)
109 
110 metaanddata%metadata%timerange%vol7d_timerange=timerange
111 
112 END SUBROUTINE vol7d_timerange_callback_dba
113 
114 
115 SUBROUTINE vol7d_level_callback_dba(level, genericptr)
116 TYPE(vol7d_level), INTENT(in) :: level
117 TYPE(c_ptr),VALUE :: genericptr
118 
119 type(dbametaanddata),POINTER :: metaanddata
120 
121 CALL c_f_pointer(genericptr, metaanddata)
122 
123 metaanddata%metadata%level%vol7d_level=level
124 
125 END SUBROUTINE vol7d_level_callback_dba
126 
127 
128 SUBROUTINE vol7d_network_callback_dba(network, genericptr)
129 TYPE(vol7d_network), INTENT(in) :: network
130 TYPE(c_ptr),VALUE :: genericptr
131 
132 type(dbametaanddata),POINTER :: metaanddata
133 
134 CALL c_f_pointer(genericptr, metaanddata)
135 
136 metaanddata%metadata%network%vol7d_network=network
137 
138 END SUBROUTINE vol7d_network_callback_dba
139 
140 
141 SUBROUTINE vol7d_valuer_callback_dba(valu, var, genericptr)
142 REAL,INTENT(in) :: valu
143 TYPE(vol7d_var),INTENT(in) :: var
144 TYPE(c_ptr),VALUE :: genericptr
145 type(dbametaanddata),POINTER :: metaanddata
146 integer :: i
147 
148 CALL c_f_pointer(genericptr, metaanddata)
149 
150 do i =1, size(metaanddata%dataattrv%dataattr)
151  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
152  allocate(metaanddata%dataattrv%dataattr(i)%dat,source=dbadatar(var%btable,valu))
153  exit
154  end if
155 end do
156 
157 END SUBROUTINE vol7d_valuer_callback_dba
158 
159 
160 SUBROUTINE vol7d_valued_callback_dba(valu, var, genericptr)
161 double precision,INTENT(in) :: valu
162 TYPE(vol7d_var),INTENT(in) :: var
163 TYPE(c_ptr),VALUE :: genericptr
164 type(dbametaanddata),POINTER :: metaanddata
165 integer :: i
166 
167 CALL c_f_pointer(genericptr, metaanddata)
168 
169 do i =1, size(metaanddata%dataattrv%dataattr)
170  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
171  allocate(metaanddata%dataattrv%dataattr(i)%dat,source=dbadatad(var%btable,valu))
172  exit
173  end if
174 end do
175 
176 END SUBROUTINE vol7d_valued_callback_dba
177 
178 
179 SUBROUTINE vol7d_valuei_callback_dba(valu, var, genericptr)
180 integer,INTENT(in) :: valu
181 TYPE(vol7d_var),INTENT(in) :: var
182 TYPE(c_ptr),VALUE :: genericptr
183 type(dbametaanddata),POINTER :: metaanddata
184 integer :: i
185 
186 CALL c_f_pointer(genericptr, metaanddata)
187 
188 do i =1, size(metaanddata%dataattrv%dataattr)
189  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
190  allocate(metaanddata%dataattrv%dataattr(i)%dat,source=dbadatai(var%btable,valu))
191  exit
192  end if
193 end do
194 
195 END SUBROUTINE vol7d_valuei_callback_dba
196 
197 
198 SUBROUTINE vol7d_valueb_callback_dba(valu, var, genericptr)
199 INTEGER(kind=int_b),INTENT(in) :: valu
200 TYPE(vol7d_var),INTENT(in) :: var
201 TYPE(c_ptr),VALUE :: genericptr
202 type(dbametaanddata),POINTER :: metaanddata
203 integer :: i
204 
205 CALL c_f_pointer(genericptr, metaanddata)
206 
207 do i =1, size(metaanddata%dataattrv%dataattr)
208  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
209  allocate(metaanddata%dataattrv%dataattr(i)%dat,source=dbadatab(var%btable,valu))
210  exit
211  end if
212 end do
213 
214 END SUBROUTINE vol7d_valueb_callback_dba
215 
216 
217 SUBROUTINE vol7d_valuec_callback_dba(valu, var, genericptr)
218 character(len=*),INTENT(in) :: valu
219 TYPE(vol7d_var),INTENT(in) :: var
220 TYPE(c_ptr),VALUE :: genericptr
221 type(dbametaanddata),POINTER :: metaanddata
222 integer :: i
223 
224 CALL c_f_pointer(genericptr, metaanddata)
225 
226 do i =1, size(metaanddata%dataattrv%dataattr)
227  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
228  allocate(metaanddata%dataattrv%dataattr(i)%dat,source=dbadatac(var%btable,valu))
229  exit
230  end if
231 end do
232 
233 END SUBROUTINE vol7d_valuec_callback_dba
234 
235 
236 
237 SUBROUTINE vol7d_valuer_attr_callback_dba(valu, var, attr, genericptr)
238 REAL,INTENT(in) :: valu
239 TYPE(vol7d_var),INTENT(in) :: var
240 TYPE(vol7d_var),INTENT(in) :: attr
241 TYPE(c_ptr),VALUE :: genericptr
242 type(dbametaanddata),POINTER :: metaanddata
243 integer :: i,j
244 
245 CALL c_f_pointer(genericptr, metaanddata)
246 
247 !print*, "vol7d_valuei_attr_callback_dba: ",var%btable,attr%btable
248 ivar:do i =1, size(metaanddata%dataattrv%dataattr)
249  if (allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
250  if (metaanddata%dataattrv%dataattr(i)%dat%btable == var%btable) then
251  do j =1, size(metaanddata%dataattrv%dataattr(i)%attrv%dcv)
252  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)) then
253  !print *,"allocate attributei: ",var%btable
254  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat,source=dbadatar(attr%btable,valu))
255  exit ivar
256  end if
257  end do
258  end if
259  end if
260 end do ivar
261 
262 END SUBROUTINE vol7d_valuer_attr_callback_dba
263 
264 
265 
266 SUBROUTINE vol7d_valued_attr_callback_dba(valu, var, attr, genericptr)
267 double precision,INTENT(in) :: valu
268 TYPE(vol7d_var),INTENT(in) :: var
269 TYPE(vol7d_var),INTENT(in) :: attr
270 TYPE(c_ptr),VALUE :: genericptr
271 type(dbametaanddata),POINTER :: metaanddata
272 integer :: i,j
273 
274 CALL c_f_pointer(genericptr, metaanddata)
275 
276 !print*, "vol7d_valuei_attr_callback_dba: ",var%btable,attr%btable
277 ivar:do i =1, size(metaanddata%dataattrv%dataattr)
278  if (allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
279  if (metaanddata%dataattrv%dataattr(i)%dat%btable == var%btable) then
280  do j =1, size(metaanddata%dataattrv%dataattr(i)%attrv%dcv)
281  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)) then
282  !print *,"allocate attributei: ",var%btable
283  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat,source=dbadatad(attr%btable,valu))
284  exit ivar
285  end if
286  end do
287  end if
288  end if
289 end do ivar
290 
291 END SUBROUTINE vol7d_valued_attr_callback_dba
292 
293 
294 
295 SUBROUTINE vol7d_valuei_attr_callback_dba(valu, var, attr, genericptr)
296 integer,INTENT(in) :: valu
297 TYPE(vol7d_var),INTENT(in) :: var
298 TYPE(vol7d_var),INTENT(in) :: attr
299 TYPE(c_ptr),VALUE :: genericptr
300 type(dbametaanddata),POINTER :: metaanddata
301 integer :: i,j
302 
303 CALL c_f_pointer(genericptr, metaanddata)
304 
305 !print*, "vol7d_valuei_attr_callback_dba: ",var%btable,attr%btable
306 ivar:do i =1, size(metaanddata%dataattrv%dataattr)
307  if (allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
308  if (metaanddata%dataattrv%dataattr(i)%dat%btable == var%btable) then
309  do j =1, size(metaanddata%dataattrv%dataattr(i)%attrv%dcv)
310  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)) then
311  !print *,"allocate attributei: ",var%btable
312  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat,source=dbadatai(attr%btable,valu))
313  exit ivar
314  end if
315  end do
316  end if
317  end if
318 end do ivar
319 
320 END SUBROUTINE vol7d_valuei_attr_callback_dba
321 
322 
323 SUBROUTINE vol7d_valueb_attr_callback_dba(valu, var, attr, genericptr)
324 INTEGER(kind=int_b),INTENT(in) :: valu
325 TYPE(vol7d_var),INTENT(in) :: var
326 TYPE(vol7d_var),INTENT(in) :: attr
327 TYPE(c_ptr),VALUE :: genericptr
328 type(dbametaanddata),POINTER :: metaanddata
329 integer :: i,j
330 
331 CALL c_f_pointer(genericptr, metaanddata)
332 
333 !print*, "vol7d_valuei_attr_callback_dba: ",var%btable,attr%btable
334 ivar:do i =1, size(metaanddata%dataattrv%dataattr)
335  if (allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
336  if (metaanddata%dataattrv%dataattr(i)%dat%btable == var%btable) then
337  do j =1, size(metaanddata%dataattrv%dataattr(i)%attrv%dcv)
338  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)) then
339  !print *,"allocate attributei: ",var%btable
340  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat,source=dbadatab(attr%btable,valu))
341  exit ivar
342  end if
343  end do
344  end if
345  end if
346 end do ivar
347 
348 END SUBROUTINE vol7d_valueb_attr_callback_dba
349 
350 SUBROUTINE vol7d_valuec_attr_callback_dba(valu, var, attr, genericptr)
351 character(len=*),INTENT(in) :: valu
352 TYPE(vol7d_var),INTENT(in) :: var
353 TYPE(vol7d_var),INTENT(in) :: attr
354 TYPE(c_ptr),VALUE :: genericptr
355 type(dbametaanddata),POINTER :: metaanddata
356 integer :: i,j
357 
358 CALL c_f_pointer(genericptr, metaanddata)
359 
360 !print*, "vol7d_valuei_attr_callback_dba: ",var%btable,attr%btable
361 ivar:do i =1, size(metaanddata%dataattrv%dataattr)
362  if (allocated(metaanddata%dataattrv%dataattr(i)%dat)) then
363  if (metaanddata%dataattrv%dataattr(i)%dat%btable == var%btable) then
364  do j =1, size(metaanddata%dataattrv%dataattr(i)%attrv%dcv)
365  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)) then
366  !print *,"allocate attributei: ",var%btable
367  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat,source=dbadatac(attr%btable,valu))
368  exit ivar
369  end if
370  end do
371  end if
372  end if
373 end do ivar
374 
375 END SUBROUTINE vol7d_valuec_attr_callback_dba
376 
377 
378 SUBROUTINE vol7d_void_callback_dba(genericptr)
379 TYPE(c_ptr),VALUE :: genericptr
380 end SUBROUTINE vol7d_void_callback_dba
381 
382 
383 SUBROUTINE vol7d_value_var_header_callback_dba(var, typ, genericptr)
384 TYPE(vol7d_var),INTENT(in) :: var
385 CHARACTER(len=*),INTENT(in) :: typ
386 TYPE(c_ptr),VALUE :: genericptr
387 
388 type (counter),POINTER :: conta
389 
390 CALL c_f_pointer(genericptr, conta)
391 
392 if (typ(2:2) == "d") then
393  conta%nvar=conta%nvar+1
394 else if (typ(2:2) == "a") then
395  conta%nanavar=conta%nanavar+1
396 end if
397 
398 END SUBROUTINE vol7d_value_var_header_callback_dba
399 
400 
401 SUBROUTINE vol7d_value_attr_header_callback_dba(var, attr, typ, genericptr)
402 TYPE(vol7d_var),INTENT(in) :: var
403 TYPE(vol7d_var),INTENT(in) :: attr
404 CHARACTER(len=*),INTENT(in) :: typ
405 TYPE(c_ptr),VALUE :: genericptr
406 
407 type (counter),POINTER :: conta
408 
409 CALL c_f_pointer(genericptr, conta)
410 
411 if (typ(2:2) == "d") then
412  conta%nattr=conta%nattr+1
413 else if (typ(2:2) == "a") then
414  conta%nanaattr=conta%nanaattr+1
415 end if
416 
417 END SUBROUTINE vol7d_value_attr_header_callback_dba
418 
419 SUBROUTINE vol7d_var_callback_dba(var, genericptr)
420 TYPE(vol7d_var), INTENT(in) :: var
421 TYPE(c_ptr),VALUE :: genericptr
422 
423 END SUBROUTINE vol7d_var_callback_dba
424 
425 
426 SUBROUTINE vol7d_attr_callback_dba(var, attr, genericptr)
427 TYPE(vol7d_var), INTENT(in) :: var
428 TYPE(vol7d_var), INTENT(in) :: attr
429 TYPE(c_ptr),VALUE :: genericptr
430 
431 END SUBROUTINE vol7d_attr_callback_dba
432 
433 
434 
435 SUBROUTINE vol7d_serialize_export(this, metaanddatal)
436 CLASS(vol7d_serialize_dballe),INTENT(inout) :: this
437 type(dbametaanddatalist),INTENT(inout) :: metaanddatal
438 TYPE(vol7d_serialize_iterline) :: linei
439 TYPE(vol7d_serialize_itercol) :: coli
440 
441 type (counter),target :: conta
442 type(dbametaanddata),target :: metaanddata
443 integer :: i,j, nvar , nattr
444 
445 conta=counter(0,0,0,0)
446 
447 ! set "header" callbacks
448 CALL this%vol7d_serialize_set_callback(&
449  vol7d_void_callback_dba,&
450  vol7d_void_callback_dba,&
451  vol7d_void_callback_dba,&
452  vol7d_void_callback_dba,&
453  vol7d_void_callback_dba,&
454  vol7d_void_callback_dba,&
455  vol7d_void_callback_dba,&
456  vol7d_value_var_callback=vol7d_value_var_header_callback_dba, &
457  vol7d_value_attr_callback=vol7d_value_attr_header_callback_dba)
458 
459 ! loop over headers and count columns
460 coli = this%vol7d_serialize_itercol_new() ! column iterator from this (header line)
461 DO WHILE(coli%next())
462 ! call callbacks
463  CALL coli%export(c_loc(conta))
464 END DO
465 
466 !print *,"Conta: ",conta
467 nattr = 0
468 if (conta%nvar > 0) nattr= nattr + conta%nattr/conta%nvar
469 if (conta%nanavar > 0) nattr= nattr + conta%nanaattr/conta%nanavar
470 nvar = conta%nvar + conta%nanavar
471 !print *,"nvar: ",nvar,"nattr: ",nattr
472 
473 metaanddata%metadata=dbametadata() ! initialize must be done for station constant data
474 
475 allocate(metaanddata%dataattrv%dataattr(nvar))
476 do i =1,nvar
477  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(nattr))
478 enddo
479 
480 ! loop over lines
481 linei = this%vol7d_serialize_iterline_new()
482 
483 ! set "data lines" callbacks
484 CALL linei%vol7d_serialize_iterline_set_callback(vol7d_ana_callback_dba &
485  ,vol7d_time_callback_dba, vol7d_level_callback_dba &
486  ,vol7d_timerange_callback_dba, vol7d_network_callback_dba &
487  ,vol7d_var_callback_dba, vol7d_attr_callback_dba&
488  ,vol7d_valuer_callback_dba &
489  ,vol7d_valued_callback_dba &
490  ,vol7d_valuei_callback_dba &
491  ,vol7d_valueb_callback_dba &
492  ,vol7d_valuec_callback_dba &
493  ,vol7d_valuer_attr_callback_dba &
494  ,vol7d_valued_attr_callback_dba &
495  ,vol7d_valuei_attr_callback_dba &
496  ,vol7d_valueb_attr_callback_dba &
497  ,vol7d_valuec_attr_callback_dba &
498  )
499 
500 DO WHILE(linei%next())
501 
502  coli = linei%vol7d_serialize_itercol_new() ! column iterator from linei (data line)
503  DO WHILE(coli%next())
504 ! call callbacks
505  CALL coli%export(c_loc(metaanddata))
506  END DO
507 
508 ! manage time definition
509  if (this%v7d%time_definition == 0) then
510  metaanddata%metadata%datetime%datetime = &
511  metaanddata%metadata%datetime%datetime + &
512  timedelta_new(sec=metaanddata%metadata%timerange%vol7d_timerange%p1)
513  end if
514 
515 !! set to missing
516  do i =1,nvar
517  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%dat)) &
518  allocate(metaanddata%dataattrv%dataattr(i)%dat,source=dbadatai())
519  do j=1,nattr
520  if (.not. allocated(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)) &
521  allocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat,source=dbadatac())
522  end do
523  enddo
524 
525  call metaanddatal%append(metaanddata)
526 
527 !! deallocate
528  do i =1,nvar
529  deallocate(metaanddata%dataattrv%dataattr(i)%dat)
530  do j=1,nattr
531  deallocate(metaanddata%dataattrv%dataattr(i)%attrv%dcv(j)%dat)
532  end do
533  enddo
534 
535 ! restore reference time if changed because of time definition
536 ! otherwise strange things happen
537  if (this%v7d%time_definition == 0) then
538  metaanddata%metadata%datetime%datetime = &
539  metaanddata%metadata%datetime%datetime - &
540  timedelta_new(sec=metaanddata%metadata%timerange%vol7d_timerange%p1)
541  end if
542 
543 END DO
544 
545 END SUBROUTINE vol7d_serialize_export
546 
547 !!$SUBROUTINE default_vol7d_valuec_callback(valu, var, genericptr)
548 !!$CHARACTER(len=*),INTENT(in) :: valu
549 !!$TYPE(vol7d_var),INTENT(in) :: var
550 !!$TYPE(c_ptr),VALUE :: genericptr
551 !!$
552 !!$CHARACTER(len=64),POINTER :: col
553 !!$
554 !!$CALL C_F_POINTER(genericptr, col)
555 !!$IF (c_e(valu)) THEN
556 !!$ IF (c_e(var%scalefactor) .AND. var%unit /= 'CCITTIA5' .AND. &
557 !!$ .NOT.(var%scalefactor == 0 .AND. var%unit == 'NUMERIC')) THEN
558 !!$ col = t2c(realdat(valu, var))
559 !!$ ELSE
560 !!$ col = TRIM(valu)
561 !!$ ENDIF
562 !!$ELSE
563 !!$ col = ''
564 !!$ENDIF
565 !!$
566 !!$END SUBROUTINE default_vol7d_valuec_callback
567 
568 
569 END MODULE vol7d_serialize_dballe_class
class for import and export data from e to DB-All.e.
Module for parsing command-line optons.
Classe per la gestione di un volume completo di dati osservati.
Extension of vol7d_class for serializing the contents of a volume.
byte version for dbadata
character version for dbadata
doubleprecision version for dbadata
integer version for dbadata
real version for dbadata
summ of all metadata pieces
Class for serializing a vol7d object.

Generated with Doxygen.