1 #ifndef GRASS_SEGMENT_H
2 #define GRASS_SEGMENT_H
3 
4 #include <grass/gis.h>
5 
6 #ifdef HAVE_UNISTD_H
7 #include <unistd.h>
8 #endif
9 
10 #ifdef HAVE_SYS_TYPES_H
11 #include <sys/types.h>
12 #endif
13 
14 struct aq {			/* age queue */
15     int cur;			/* segment number */
16     struct aq *younger, *older;	/* pointer to next younger and next older */
17 } ;
18 
19 typedef struct
20 {
21     int open;			/* open flag */
22     off_t nrows;		/* rows in original data */
23     off_t ncols;		/* cols in original data */
24     int len;			/* bytes per data value */
25     int srows;			/* rows in segments */
26     int scols;			/* cols in segments */
27     int srowscols;   		/* rows x cols in segments */
28     int size;			/* size in bytes of a segment */
29     int spr;			/* segments per row */
30     int spill;			/* cols in last segment in row */
31 
32     /* fast mode */
33     int fast_adrs;      	/* toggles fast address mode */
34     off_t scolbits;       	/* column bitshift */
35     off_t srowbits;       	/* row bitshift */
36     off_t segbits;        	/* segment bitshift */
37     int fast_seek;      	/* toggles fast seek mode */
38     int lenbits;        	/* data size bitshift */
39     int sizebits;       	/* segment size bitshift */
40     int (*address)();
41     int (*seek)();
42 
43     char *fname;		/* segment file name */
44     int fd;			/* file descriptor to read/write segment */
45     struct scb			/* control blocks */
46     {
47 	char *buf;		/* data buffer */
48 	char dirty;		/* dirty flag */
49 	struct aq *age;		/* pointer to position in age queue */
50 	int n;			/* segment number */
51     } *scb;
52     int *load_idx;		/* index of loaded segments */
53     int nfreeslots;		/* number of free slots */
54     int *freeslot;		/* array of free slots */
55     struct aq *agequeue,	/* queue of age for order of access */
56               *youngest, 	/* youngest in age queue */
57 	      *oldest;	        /* oldest in age queue */
58     int nseg;			/* number of segments in memory */
59     int cur;			/* last accessed segment */
60     int offset;			/* offset of data past header */
61 
62     char *cache;		/* all in memory cache */
63 } SEGMENT;
64 
65 #include <grass/defs/segment.h>
66 
67 #endif /* GRASS_SEGMENT_H */
68