gsdInqSize
Inquire array size
Description:
This routine returns information
about the specified array. Returned are the names and units of each dimension, the
size along each dimension, and the overall size.
Invocation
int gsdInqSize( void
file_dsc, void
item_dsc, char
data_ptr, int itemno, int maxdims, char
dimnames,
char dimunits,
int dimvals, int
actdims, int
size );
Arguments
void
file_dsc (Given)
The GSD file
descriptor.
void item_dsc
(Given)
The array of GSD item descriptors related to the GSD file.
char
data_ptr (Given)
The buffer with all the data from the GSD file.
int itemno (Given)
The number of the item in the GSD file.
int maxdims (Given)
The number of dimensions required and accommodated by the calling routine.
char
dimnames
(Returned)
The names for each dimension. The calling routine must provide maxdims pointers to strings. It
must also provide the space for the strings, 16 bytes. See Notes for how to declare and pass dimnames.
char
dimunits
(Returned)
The units for each dimension. The calling routine must provide maxdims pointers to strings.
It must also provide the space for the strings, 11 bytes. See Notes for how to declare and pass dimunits.
int dimvals
(Returned)
The values for each dimension. The calling routine must provide an array
of maxdims integers. This would probably be declared as int dimvals[MAXDIMS];
int
actdims
(Returned)
The actual number of dimensions. If actdims is less than maxdims, then only actims elements
are returned in dimnames, dimunits, dimvals. Further elements declared by the caller are unchanged by this
routine.
int size
(Returned)
The total number of elements in the array.
Returned Value
int gsdInqSize();
Status.
-
[1:] Failed to get a dimension value and name.
-
[2:] Numbered item does not exist.
-
[3:] Array has more dimensions than accommodated by calling routine.
-
[0:] Otherwise.
Prototype
available via #include "gsd.h"
Note
The calling routine will probably
allocate storage for dimension names by declaring a two-dimensional array. That is not suitable for
passing to this routine though. The pointers to each string must be copied into an array of pointers.
For example:
char actual_space[MAXDIMS][16];
char pointr_array[MAXDIMS];
for ( i = 0; i
MAXDIMS; i
) pointr_array[i] = actual_space[i];
status = gsdInqSize( ..., pointr_array, ... );
The reason why this call works but passing actual_space does not work, is that gsdInqSize
uses the given value as a char
.
So in this routine given[1] goes forward in memory by the size of a char
or the
number of bytes needed to store a pointer. actual_space would need a step in memory by 16 bytes, i.e.
the distance from one string to the next. The main routine knows about this, because it declared
actual_space _and_ pointr_array.
Copyright
Copyright (C) 1986-1999 Particle Physics and
Astronomy Research Council. All Rights Reserved.