[GRASS5] readsites() TODO list...

Hi Eric,

just a few suggestions...

1. We already have a struct Site, so to avoid confusion how about using
   "xyz_site" instead of "site" ? (If typedef'd then the convention would
   be to capitalize), e.g.
   typedef struct{
     double x, y, z;
   } XYZ_site;
   This typedef would then be added to site.h

2. I think that Z-dim is not really defined by the sites interface - only
   the first 2 dimensions are recognized as X and Y and any others dimensions
   are just referred to as dim[2], dim[3], ... so a user might have a sites
   file with 5 dimensions and no attributes, and want to use the 4th dimension
   as Z. From your example, I'd guess that I'd call readsites with type=0 and
   index=2 (2nd extra dimension?) That might need to be clarified.

3. num should probably be a *num so that the number actually read can be
   returned in it (in case file ends) Or else add another parameter. You might
   be able to eliminate done then (*num = 0).

4. What about the cat? User might want to use that as Z.

5. I suggest having a G_allocate_xyz_sites(numsites) so the allocation
   and freeing would be handled outside readsites, allowing
   users to re-use a block within a loop without re-allocating.

6. type should be defined and added to site.h, e.g.:
   #define SITE_DIM 0
   #define SITE_CAT 1
   #define SITE_DBL 2
   #define SITE_STR 3

- Bill

/* readsites: Reads a sites file converting to a site struct of xyz values.
* The Z value can come from one of the z-dimensions, a double attribute,
* or a string attribute converted to a double with strtod().
* If 'num' is less than one, attempt to read entire site file, otherwise
* read 'num' records. The number of records read is returned. If an
* error occurs, a negative value is returned. The caller can decide to
* abort or retry. Error values are:
* Couldn't allocate memory -1
* Attribute 'type' not found -2
* Attribute 'index' out of range -3
* Format error in file (includes conversion error) -4
* Something else (probably never happen) -5
*/

typedef struct _site {
double x, y, z;
} site;

int readsites(
FILE * fdsite, /* The FILE stream to the sites file */
int num, /* Number of records to read */
int type, /* Attribute type: 0 =3D Z-dim, 1 =3D double, 2 =3D string=
*/
int index, /* The field index (1 based) for the attribute */
int * done, /* No more records in file? 0 =3D false, 1 =3D true */
site **xyz /* The site array, caller must free between calls */
);

----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'