1 /*
2  * geoLines.h --
3  *
4  *	This header file declares structures and functions that
5  *	manage GeoLn's (arrays of GeoPts) and GeoLnArr's (arrays of
6  *	GeoLn's).  See the GeoLn(3) and GeoLnArr(3) man pages for details.
7  *
8  * Copyright (c) 2004 Gordon D. Carrie.  All rights reserved.
9  *
10  * Licensed under the Open Software License version 2.1
11  *
12  * Please address questions and feedback to user0@tkgeomap.org
13  *
14  * @(#) $Id: geoLines.h,v 1.5 2004/09/22 21:57:51 tkgeomap Exp $
15  *
16  ********************************************
17  *
18  */
19 
20 #ifndef _GEOLINES_H_
21 #define _GEOLINES_H_
22 
23 #include "geography.h"
24 
25 /*
26  * For C++ compilers, use extern "C"
27  */
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 /*
34  * Structure to store an array of geographic points
35  */
36 
37 struct GeoLn {
38     unsigned	nPts;		/* Number of points */
39     unsigned	nPtsMax;	/* Max number of points in current allocation */
40     Angle	latMax;		/* Max longitude */
41     Angle	lonMax;		/* Max latitude */
42     Angle	latMin;		/* Min longitude */
43     Angle	lonMin;		/* Min latitude */
44     GeoPt	*pts;		/* Array of points in the line */
45 };
46 typedef struct GeoLn *GeoLn;
47 
48 /*
49  * Global functions that manage GeoLn structures
50  */
51 
52 EXTERN GeoLn 		GeoLnCreate _ANSI_ARGS_((unsigned nptsMax));
53 EXTERN void		GeoLnClear _ANSI_ARGS_((GeoLn geoLn));
54 EXTERN void		GeoLnSetAlloc _ANSI_ARGS_((GeoLn geoLn,
55 				unsigned nptsMax));
56 EXTERN void		GeoLnAddPt _ANSI_ARGS_((GeoPt geoPt, GeoLn geoLn));
57 EXTERN GeoPt		GeoLnGetPt _ANSI_ARGS_((GeoLn geoLn, unsigned n));
58 EXTERN void		GeoLnDestroy _ANSI_ARGS_((GeoLn geoLn));
59 EXTERN CartPt		GeoLnCtr _ANSI_ARGS_((GeoLn ln));
60 EXTERN int		GeoLnContainGeoPt _ANSI_ARGS_((GeoPt geoPt,
61 				GeoLn geoLn));
62 
63 /*
64  * Structure to store an array of GeoLn's
65  */
66 
67 struct GeoLnArr {
68     char	*descr;		/* Descriptor */
69     unsigned	nLines;		/* Number of lines */
70     unsigned	nLinesMax;	/* Max number of lines in current allocation */
71     unsigned	nPts;		/* Number of points for all lines */
72     unsigned	nMax;		/* Number of points in longest line */
73     Angle	latMax;		/* Max longitude for all lines */
74     Angle	lonMax;		/* Max latitude for all lines */
75     Angle	latMin;		/* Min longitude for all lines */
76     Angle	lonMin;		/* Min latitude for all lines */
77     GeoLn 	*lines;		/* Array of lines */
78 };
79 typedef struct GeoLnArr *GeoLnArr;
80 
81 /*
82  * Global functions to manage GeoLnArr's
83  */
84 
85 EXTERN GeoLnArr 	GeoLnArrCreate _ANSI_ARGS_((unsigned nLinesMax));
86 EXTERN void		GeoLnArrSetDescr _ANSI_ARGS_((GeoLnArr lnArr,
87 				CONST char *descr));
88 EXTERN void		GeoLnArrSetAlloc _ANSI_ARGS_((GeoLnArr lnArr,
89 				unsigned nLinesMax));
90 EXTERN int		GeoLnArrAddLine _ANSI_ARGS_((GeoLn geoLn,
91 				GeoLnArr lnArr));
92 EXTERN int		GeoLnArrPutLine _ANSI_ARGS_((GeoLn geoLn,
93 				GeoLnArr lnArr));
94 EXTERN int		GeoLnArrContainGeoPt _ANSI_ARGS_((GeoPt geoPt,
95 				GeoLnArr lnArr));
96 EXTERN char		*GeoLnArrGetDescr _ANSI_ARGS_((GeoLnArr lnArr));
97 EXTERN GeoLn 		GeoLnArrGetLine _ANSI_ARGS_((GeoLnArr lnArr,
98 				unsigned n));
99 EXTERN void		GeoLnArrFree _ANSI_ARGS_((GeoLnArr lnArr));
100 EXTERN void		GeoLnArrDestroy _ANSI_ARGS_((GeoLnArr lnArr));
101 
102 /*
103  * end block for C++
104  */
105 
106 #ifdef __cplusplus
107 }
108 #endif
109 
110 #endif
111