/*  Coords.h  */

#include "../cfiles.h"

/*--------------------------------------------------------------------*/
/*
   ---------------------------------------------------------------
   object to hold coordinates of a graph

   type  -- coordinates type
      1 -- use tuple, x(icoor, idim) = coors[idim + ndim*icoor]
      2 -- use bycoord, x(icoor, idim) = coors[icoor + ncoor*idim]
   ndim  -- number of dimensions
   ncoor -- number of coordinates
   coors -- coordinate array
   ---------------------------------------------------------------
*/
typedef struct _Coords   Coords ;
struct _Coords {
   int     type   ;
   int     ndim   ;
   int     ncoor  ;
   float   *coors ;
} ;
#define COORDS_BY_TUPLE 1
#define COORDS_BY_COORD 2
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in basics.c ----------------------------------------
------------------------------------------------------------------------
*/
/*
   -----------------------
   simplest constructor

   created -- 95dec17, cca
   -----------------------
*/
Coords *
Coords_new ( 
   void 
) ;
/*
   -----------------------
   set the default fields

   created -- 95dec17, cca
   -----------------------
*/
void
Coords_setDefaultFields (
   Coords   *coords
) ;
/*
   --------------------------------------------------
   clear the data fields, releasing allocated storage

   created -- 95dec17, cca
   --------------------------------------------------
*/
void
Coords_clearData ( 
   Coords   *coords 
) ;
/*
   ------------------------------------------
   destructor, free's the object and its data

   created -- 95dec17, cca
   ------------------------------------------
*/
Coords *
Coords_free ( 
   Coords   *coords 
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in init.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
   ---------------------------------------------------
   initialize the object, storage freed if repeat call

   created -- 95dec17, cca
   ---------------------------------------------------
*/
void
Coords_init ( 
   Coords   *coords,
   int      type, 
   int      ndim, 
   int      ncoor 
) ;
/*
   ----------------------------------------------------------
   purpose -- initialize a 9-point operator on a n1 x n2 grid

   input --

      bbox  -- bounding box
         bbox[0] -- x southwest
         bbox[1] -- y southwest
         bbox[2] -- x northeast
         bbox[3] -- y northeast
      Type  -- type of object
      n1    -- # of grid points in first direction
      n2    -- # of grid points in second direction
      ncomp -- # of components per grid point

   created -- 95dec17, cca
   ----------------------------------------------------------
*/
void
Coords_init9P ( 
   Coords   *coords,
   float    bbox[], 
   int      type, 
   int      n1, 
   int      n2, 
   int      ncomp 
) ;
/*
   ----------------------------------------------------------------
   purpose -- initialize a 27-point operator on a n1 x n2 x n3 grid

   input --

      bbox  -- bounding box
         bbox[0] -- x southwest bottom
         bbox[1] -- y southwest bottom
         bbox[2] -- z southwest bottom
         bbox[3] -- x northeast top
         bbox[4] -- y northeast top
         bbox[5] -- z northeast top
      Type  -- type of object
      n1    -- # of grid points in first direction
      n2    -- # of grid points in second direction
      n3    -- # of grid points in third direction
      ncomp -- # of components per grid point

   created -- 95dec17, cca
   ----------------------------------------------------------------
*/
void
Coords_init27P ( 
   Coords   *coords,
   float    bbox[], 
   int      Type, 
   int      n1, 
   int      n2, 
   int      n3, 
   int      ncomp 
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in util.c ------------------------------------------
------------------------------------------------------------------------
*/
/*
   ----------------------------------------------
   return the number of bytes taken by the object

   created -- 95dec17, cca
   ----------------------------------------------
*/
int
Coords_sizeOf ( 
   Coords   *coords
) ;
/*
   --------------------------------------------------
   return the minimum coordinate in the dim-direction

   created -- 95dec17, cca
   --------------------------------------------------
*/
float
Coords_min ( 
   Coords   *coords,
   int      dim 
) ;
/*
   --------------------------------------------------
   return the maximum coordinate in the dim-direction

   created -- 95dec17, cca
   --------------------------------------------------
*/
float
Coords_max ( 
   Coords   *coords,
   int      dim 
) ;
/*
   -----------------------
   1 <= idim  <= ndim
   0 <= icoor < ncoor

   created -- 95dec17, cca
   -----------------------
*/
float
Coords_value ( 
   Coords   *coords,
   int      idim, 
   int      icoor 
) ;
/*
   -----------------------
   1 <= idim  <= ndim
   0 <= icoor < ncoor

   created -- 95dec17, cca
   -----------------------
*/
void
Coords_setValue ( 
   Coords   *coords,
   int      idim, 
   int      icoor, 
   float    val 
) ;
/*--------------------------------------------------------------------*/
/*
------------------------------------------------------------------------
----- methods found in IO.c --------------------------------------------
------------------------------------------------------------------------
*/
/*
   --------------------------------------------------
   purpose -- to read in an Coords object from a file

   input --

      fn -- filename, must be *.coordsb or *.coordsf

   return value -- 1 if success, 0 if failure

   created -- 95dec19, cca
   ---------------------------------------------------
*/
int
Coords_readFromFile ( 
   Coords    *coords, 
   char   *fn 
) ;
/*
   ---------------------------------------------------------
   purpose -- to read an Coords object from a formatted file

   return value -- 1 if success, 0 if failure

   created -- 95dec19, cca
   ---------------------------------------------------------
*/
int
Coords_readFromFormattedFile ( 
   Coords    *coords, 
   FILE   *fp 
) ;
/*
   ------------------------------------------------------
   purpose -- to read an Coords object from a binary file

   return value -- 1 if success, 0  if failure

   created -- 95dec19, cca
   ------------------------------------------------------
*/
int
Coords_readFromBinaryFile ( 
   Coords    *coords, 
   FILE   *fp 
) ;
/*
   ----------------------------------------------
   purpose -- to write an Coords object to a file

   input --

      fn -- filename
        *.coordsb -- binary
        *.coordsf -- formatted
        anything else -- for human eye

   return value -- 1 if success, 0 otherwise

   created -- 95dec19, cca
   ----------------------------------------------
*/
int
Coords_writeToFile ( 
   Coords    *coords, 
   char   *fn 
) ;
/*
   --------------------------------------------------------
   purpose -- to write an Coords object to a formatted file

   return value -- 1 if success, 0 otherwise

   created -- 95dec19, cca
   --------------------------------------------------------
*/
int
Coords_writeToFormattedFile ( 
   Coords    *coords, 
   FILE   *fp 
) ;
/*
   -----------------------------------------------------
   purpose -- to write an Coords object to a binary file

   return value -- 1 if success, 0 otherwise

   created -- 95dec19, cca
   -----------------------------------------------------
*/
int
Coords_writeToBinaryFile ( 
   Coords    *coords, 
   FILE   *fp 
) ;
/*
   ----------------------------------------------------
   purpose -- to write an Coords object for a human eye

   return value -- 1 if success, 0 otherwise

   created -- 95dec19, cca
   ----------------------------------------------------
*/
int
Coords_writeForHumanEye ( 
   Coords    *coords, 
   FILE   *fp 
) ;
/*
   ------------------------------------------------------------
   purpose -- to write out the statistics for the Coords object

   return value -- 1 if success, 0 otherwise

   created -- 95dec19, cca
   ------------------------------------------------------------
*/
int
Coords_writeStats ( 
   Coords    *coords, 
   FILE   *fp 
) ;
/*--------------------------------------------------------------------*/


syntax highlighted by Code2HTML, v. 0.9.1