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