/* basics.C */
#include "../Coords.h"
/*--------------------------------------------------------------------*/
/*
----------------------------------------------
return the number of bytes taken by the object
created -- 95dec17, cca
----------------------------------------------
*/
int
Coords_sizeOf (
Coords *coords
) {
int nbytes ;
/*
---------------
check the input
---------------
*/
if ( coords == NULL ) {
fprintf(stderr, "\n fatal error in Coords_sizeof(%p)"
"\n bad input\n", coords) ;
exit(-1) ;
}
nbytes = sizeof(struct _Coords) ;
if ( coords->ndim > 0 && coords->ncoor > 0 ) {
nbytes += coords->ndim * coords->ncoor * sizeof(float) ;
}
return(nbytes) ; }
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
return the minimum coordinate in the dim-direction
created -- 95dec17, cca
--------------------------------------------------
*/
float
Coords_min (
Coords *coords,
int dim
) {
float minval ;
float *coors ;
int i, j, ncoor, ndim ;
if ( coords == NULL ) {
fprintf(stderr, "\n fatal error in Coords_min(%p,%d)"
"\n bad input \n", coords, dim) ;
exit(-1) ;
} else if ( !(coords->type == COORDS_BY_TUPLE
|| coords->type == COORDS_BY_COORD) ) {
fprintf(stderr, "\n fatal error in Coords_min(%p,%d)"
"\n coords->type = %d",
coords, dim, coords->type) ;
exit(-1) ;
} else if ( (ndim = coords->ndim) < 1 ) {
fprintf(stderr, "\n fatal error in Coords_min(%p,%d)"
"\n coords->ndim = %d",
coords, dim, coords->ndim) ;
exit(-1) ;
} else if ( (ncoor = coords->ncoor) < 1 ) {
fprintf(stderr, "\n fatal error in Coords_min(%p,%d)"
"\n coords->ncoor = %d",
coords, dim, coords->ncoor) ;
exit(-1) ;
} else if ( (coors = coords->coors) == NULL ) {
fprintf(stderr, "\n fatal error in Coords_min(%p,%d)"
"\n coords->coords = %p",
coords, dim, coords->coors) ;
exit(-1) ;
} else if ( dim <= 0 || dim > coords->ndim ) {
fprintf(stderr, "\n fatal error in Coords_min(%p,%d)"
"\n bad input value, dim %d, ndim %d",
coords, dim, dim, ndim) ;
exit(-1) ;
}
switch ( coords->type ) {
case COORDS_BY_TUPLE :
i = dim - 1 ;
minval = coors[i] ;
for ( j = 1, i += ndim ; j < ncoor ; j++, i += ndim ) {
if ( coors[i] < minval ) {
minval = coors[i] ;
}
}
break ;
case COORDS_BY_COORD :
i = (dim - 1)*ncoor ;
minval = coors[i] ;
for ( i++ ; i < ncoor ; i++ ) {
if ( coors[i] < minval ) {
minval = coors[i] ;
}
}
break ;
}
return(minval) ; }
/*--------------------------------------------------------------------*/
/*
--------------------------------------------------
return the maximum coordinate in the dim-direction
created -- 95dec17, cca
--------------------------------------------------
*/
float
Coords_max (
Coords *coords,
int dim
) {
float maxval ;
float *coors ;
int i, j, ncoor, ndim ;
if ( coords == NULL ) {
fprintf(stderr, "\n fatal error in Coords_max(%p,%d)"
"\n bad input \n", coords, dim) ;
exit(-1) ;
} else if ( !(coords->type == COORDS_BY_TUPLE
|| coords->type == COORDS_BY_COORD) ) {
fprintf(stderr, "\n fatal error in Coords_max(%p,%d)"
"\n coords->type = %d",
coords, dim, coords->type) ;
exit(-1) ;
} else if ( (ndim = coords->ndim) < 1 ) {
fprintf(stderr, "\n fatal error in Coords_max(%p,%d)"
"\n coords->ndim = %d",
coords, dim, coords->ndim) ;
exit(-1) ;
} else if ( (ncoor = coords->ncoor) < 1 ) {
fprintf(stderr, "\n fatal error in Coords_max(%p,%d)"
"\n coords->ncoor = %d",
coords, dim, coords->ncoor) ;
exit(-1) ;
} else if ( (coors = coords->coors) == NULL ) {
fprintf(stderr, "\n fatal error in Coords_max(%p,%d)"
"\n coords->coords = %p",
coords, dim, coords->coors) ;
exit(-1) ;
} else if ( dim <= 0 || dim > coords->ndim ) {
fprintf(stderr, "\n fatal error in Coords_max(%p,%d)"
"\n bad input value, dim %d, ndim %d",
coords, dim, dim, ndim) ;
exit(-1) ;
}
switch ( coords->type ) {
case COORDS_BY_TUPLE :
i = dim - 1 ;
maxval = coors[i] ;
for ( j = 1, i += ndim ; j < ncoor ; j++, i += ndim ) {
if ( coors[i] > maxval ) {
maxval = coors[i] ;
}
}
break ;
case COORDS_BY_COORD :
i = (dim - 1)*ncoor ;
maxval = coors[i] ;
for ( i++ ; i < ncoor ; i++ ) {
if ( coors[i] > maxval ) {
maxval = coors[i] ;
}
}
break ;
}
return(maxval) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
1 <= idim <= ndim
0 <= icoor < ncoor
created -- 95dec17, cca
-----------------------
*/
float
Coords_value (
Coords *coords,
int idim,
int icoor
) {
float val ;
/*
---------------
check the input
---------------
*/
if ( coords == NULL || idim <= 0
|| !(coords->type == COORDS_BY_TUPLE
|| coords->type == COORDS_BY_COORD)
|| icoor < 0 || coords->ncoor <= icoor || coords->coors == NULL ) {
fprintf(stderr, "\n fatal error in Coords_value(%p,%d,%d)"
"\n bad input or object\n", coords, idim, icoor) ;
exit(-1) ;
}
switch ( coords->type ) {
case COORDS_BY_TUPLE :
val = coords->coors[idim - 1 + coords->ndim*icoor] ;
break ;
case COORDS_BY_COORD :
val = coords->coors[icoor + coords->ncoor*(idim - 1)] ;
break ;
}
return(val) ; }
/*--------------------------------------------------------------------*/
/*
-----------------------
1 <= idim <= ndim
0 <= icoor < ncoor
created -- 95dec17, cca
-----------------------
*/
void
Coords_setValue (
Coords *coords,
int idim,
int icoor,
float val
) {
/*
---------------
check the input
---------------
*/
if ( coords == NULL || idim <= 0
|| !(coords->type == COORDS_BY_TUPLE
|| coords->type == COORDS_BY_COORD)
|| icoor < 0 || coords->ncoor <= icoor || coords->coors == NULL ) {
fprintf(stderr, "\n fatal error in Coords_setValue(%p,%d,%d,%f)"
"\n bad input or object\n", coords, idim, icoor, val) ;
exit(-1) ;
}
switch ( coords->type ) {
case COORDS_BY_TUPLE :
coords->coors[idim - 1 + coords->ndim*icoor] = val ;
break ;
case COORDS_BY_COORD :
coords->coors[icoor + coords->ncoor*(idim - 1)] = val ;
break ;
}
return ; }
/*--------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1