/************************** MEMORY MANAGEMENT ***************************/ #include #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))