segment.h 2.5 KB

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