/*
 * geoLines.h --
 *
 *	This header file declares structures and functions that
 *	manage GeoLn's (arrays of GeoPts) and GeoLnArr's (arrays of
 *	GeoLn's).  See the GeoLn(3) and GeoLnArr(3) man pages for details.
 * 
 * Copyright (c) 2004 Gordon D. Carrie.  All rights reserved.
 * 
 * Licensed under the Open Software License version 2.1
 * 
 * Please address questions and feedback to user0@tkgeomap.org
 *
 * @(#) $Id: geoLines.h,v 1.5 2004/09/22 21:57:51 tkgeomap Exp $
 *
 ********************************************
 *
 */

#ifndef _GEOLINES_H_
#define _GEOLINES_H_

#include "geography.h"

/*
 * For C++ compilers, use extern "C"
 */

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Structure to store an array of geographic points
 */

struct GeoLn {
    unsigned	nPts;		/* Number of points */
    unsigned	nPtsMax;	/* Max number of points in current allocation */
    Angle	latMax;		/* Max longitude */
    Angle	lonMax;		/* Max latitude */
    Angle	latMin;		/* Min longitude */
    Angle	lonMin;		/* Min latitude */
    GeoPt	*pts;		/* Array of points in the line */
};
typedef struct GeoLn *GeoLn;

/*
 * Global functions that manage GeoLn structures
 */

EXTERN GeoLn 		GeoLnCreate _ANSI_ARGS_((unsigned nptsMax));
EXTERN void		GeoLnClear _ANSI_ARGS_((GeoLn geoLn));
EXTERN void		GeoLnSetAlloc _ANSI_ARGS_((GeoLn geoLn,
				unsigned nptsMax));
EXTERN void		GeoLnAddPt _ANSI_ARGS_((GeoPt geoPt, GeoLn geoLn));
EXTERN GeoPt		GeoLnGetPt _ANSI_ARGS_((GeoLn geoLn, unsigned n));
EXTERN void		GeoLnDestroy _ANSI_ARGS_((GeoLn geoLn));
EXTERN CartPt		GeoLnCtr _ANSI_ARGS_((GeoLn ln));
EXTERN int		GeoLnContainGeoPt _ANSI_ARGS_((GeoPt geoPt,
				GeoLn geoLn));

/*
 * Structure to store an array of GeoLn's
 */

struct GeoLnArr {
    char	*descr;		/* Descriptor */
    unsigned	nLines;		/* Number of lines */
    unsigned	nLinesMax;	/* Max number of lines in current allocation */
    unsigned	nPts;		/* Number of points for all lines */
    unsigned	nMax;		/* Number of points in longest line */
    Angle	latMax;		/* Max longitude for all lines */
    Angle	lonMax;		/* Max latitude for all lines */
    Angle	latMin;		/* Min longitude for all lines */
    Angle	lonMin;		/* Min latitude for all lines */
    GeoLn 	*lines;		/* Array of lines */
};
typedef struct GeoLnArr *GeoLnArr;

/*
 * Global functions to manage GeoLnArr's
 */

EXTERN GeoLnArr 	GeoLnArrCreate _ANSI_ARGS_((unsigned nLinesMax));
EXTERN void		GeoLnArrSetDescr _ANSI_ARGS_((GeoLnArr lnArr,
				CONST char *descr));
EXTERN void		GeoLnArrSetAlloc _ANSI_ARGS_((GeoLnArr lnArr,
				unsigned nLinesMax));
EXTERN int		GeoLnArrAddLine _ANSI_ARGS_((GeoLn geoLn,
				GeoLnArr lnArr));
EXTERN int		GeoLnArrPutLine _ANSI_ARGS_((GeoLn geoLn,
				GeoLnArr lnArr));
EXTERN int		GeoLnArrContainGeoPt _ANSI_ARGS_((GeoPt geoPt,
				GeoLnArr lnArr));
EXTERN char		*GeoLnArrGetDescr _ANSI_ARGS_((GeoLnArr lnArr));
EXTERN GeoLn 		GeoLnArrGetLine _ANSI_ARGS_((GeoLnArr lnArr,
				unsigned n));
EXTERN void		GeoLnArrFree _ANSI_ARGS_((GeoLnArr lnArr));
EXTERN void		GeoLnArrDestroy _ANSI_ARGS_((GeoLnArr lnArr));

/*
 * end block for C++
 */
    
#ifdef __cplusplus
}
#endif

#endif


syntax highlighted by Code2HTML, v. 0.9.1