mem.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /************************** MEMORY MANAGEMENT ***************************/
  2. #include <grass/gis.h>
  3. #define KB 1024
  4. #define MB (KB * KB)
  5. #define SEGSINMEM 9
  6. #define SEGCOLS ((int) (region.cols/3) + 1)
  7. #define SEGROWS ((int)(MB/region.cols/3) <= 1 ? 1 : (int)(MB/region.cols/3))
  8. extern CELL v;
  9. /*
  10. * allocate_heap: allocate and initialize matrices, cell buffers, headers
  11. * globals r: parm, region
  12. * globals w: fl, density, ew_dist, el, as, ds
  13. */
  14. void allocate_heap();
  15. /*
  16. * deallocate_heap: frees space for other processes, closes cts output files
  17. * globals r: parm, bitbar, lgfd, el, as, ew_dist
  18. */
  19. void deallocate_heap();
  20. void put_row_seg( /* l, row */ );
  21. #define get_row(l, row) \
  22. ((parm.seg && (segment_flush(l.seg) < 1 || \
  23. segment_get_row(l.seg, l.buf[row] - l.col_offset, \
  24. row + l.row_offset) < 1)) ? \
  25. (sprintf(string, "r.flow: cannot write segment file for %s", l.name),\
  26. G_fatal_error(string), (DCELL *) NULL) : \
  27. l.buf[row])
  28. /* This was is Astley's version 12...
  29. > #define get_cell_row(l, row) \
  30. > ((parm.seg && (segment_flush(l.seg) < 1 || \
  31. > segment_get_row(l.seg, l.buf[row] - l.col_offset, \
  32. > row + l.row_offset) < 1)) ? \
  33. > (sprintf(string, "r.flow: cannot write segment file for %s", l.name),\
  34. > G_fatal_error(string), (CELL *) NULL) : \
  35. > (CELL *)l.buf[row])
  36. >
  37. */
  38. #define aspect(row, col) \
  39. (parm.seg ? \
  40. (segment_get(as.seg, &v, \
  41. row + as.row_offset, col + as.col_offset) < 1 ? \
  42. (sprintf(string,"r.flow: cannot read segment file for %s",as.name), \
  43. G_fatal_error(string), 0) : \
  44. v) : \
  45. (parm.mem ? \
  46. aspect_fly(el.buf[row - 1] + col, \
  47. el.buf[row] + col, \
  48. el.buf[row + 1] + col, \
  49. ew_dist[row]) : as.buf[row][col]))
  50. #define get(l, row, col) \
  51. (parm.seg ? \
  52. (segment_get(l.seg, &v, row + l.row_offset, col + l.col_offset) < 1 ? \
  53. (sprintf(string,"r.flow: cannot read segment file for %s",l.name),\
  54. G_fatal_error(string), 0) : \
  55. v) : \
  56. l.buf[row][col])
  57. #define put(l, row, col, w) \
  58. (parm.seg ? \
  59. (v = w, \
  60. segment_put(l.seg, &v, row + l.row_offset, col + l.col_offset) < 1 ? \
  61. (sprintf(string,"r.flow: cannot write segment file for %s",l.name), \
  62. G_fatal_error(string), 0) : \
  63. 0) : \
  64. (l.buf[row][col] = w))