12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- /************************** MEMORY MANAGEMENT ***************************/
- #include <grass/gis.h>
- #define KB 1024
- #define MB (KB * KB)
- #define SEGSINMEM 9
- #define SEGCOLS ((int) (region.cols/3) + 1)
- #define SEGROWS ((int)(MB/region.cols/3) <= 1 ? 1 : (int)(MB/region.cols/3))
- extern CELL v;
- /*
- * allocate_heap: allocate and initialize matrices, cell buffers, headers
- * globals r: parm, region
- * globals w: fl, density, ew_dist, el, as, ds
- */
- void allocate_heap();
- /*
- * deallocate_heap: frees space for other processes, closes cts output files
- * globals r: parm, bitbar, lgfd, el, as, ew_dist
- */
- void deallocate_heap();
- void put_row_seg( /* l, row */ );
- #define get_row(l, row) \
- ((parm.seg && (segment_flush(l.seg) < 1 || \
- segment_get_row(l.seg, l.buf[row] - l.col_offset, \
- row + l.row_offset) < 1)) ? \
- (sprintf(string, "r.flow: cannot write segment file for %s", l.name),\
- G_fatal_error(string), (DCELL *) NULL) : \
- l.buf[row])
- /* This was is Astley's version 12...
- > #define get_cell_row(l, row) \
- > ((parm.seg && (segment_flush(l.seg) < 1 || \
- > segment_get_row(l.seg, l.buf[row] - l.col_offset, \
- > row + l.row_offset) < 1)) ? \
- > (sprintf(string, "r.flow: cannot write segment file for %s", l.name),\
- > G_fatal_error(string), (CELL *) NULL) : \
- > (CELL *)l.buf[row])
- >
- */
- #define aspect(row, col) \
- (parm.seg ? \
- (segment_get(as.seg, &v, \
- row + as.row_offset, col + as.col_offset) < 1 ? \
- (sprintf(string,"r.flow: cannot read segment file for %s",as.name), \
- G_fatal_error(string), 0) : \
- v) : \
- (parm.mem ? \
- aspect_fly(el.buf[row - 1] + col, \
- el.buf[row] + col, \
- el.buf[row + 1] + col, \
- ew_dist[row]) : as.buf[row][col]))
- #define get(l, row, col) \
- (parm.seg ? \
- (segment_get(l.seg, &v, row + l.row_offset, col + l.col_offset) < 1 ? \
- (sprintf(string,"r.flow: cannot read segment file for %s",l.name),\
- G_fatal_error(string), 0) : \
- v) : \
- l.buf[row][col])
- #define put(l, row, col, w) \
- (parm.seg ? \
- (v = w, \
- segment_put(l.seg, &v, row + l.row_offset, col + l.col_offset) < 1 ? \
- (sprintf(string,"r.flow: cannot write segment file for %s",l.name), \
- G_fatal_error(string), 0) : \
- 0) : \
- (l.buf[row][col] = w))
|