1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
#include <math.h>
#include "gis.h"
/* convert type "RASTER_MAP_TYPE" into index */
#define F2I(map_type) \
(map_type == CELL_TYPE ? 0 : (map_type == FCELL_TYPE ? 1 : 2))
static int type_size[3] = {sizeof(CELL), sizeof(FCELL), sizeof(DCELL)};
/*!
* \brief return size of raster
*
* If <em>data_type</em> is CELL_TYPE, returns sizeof(CELL)
* If <em>data_type</em> is FCELL_TYPE, returns sizeof(FCELL)
* If <em>data_type</em> is DCELL_TYPE, returns sizeof(DCELL)
*
* \param data_type
* \return int
*/
int G_raster_size (data_type)
RASTER_MAP_TYPE data_type;
{
return (type_size[F2I(data_type)]);
}
/*!
* \brief allocate a raster buffer
*
* This
* routine allocates a buffer of type CELL just large enough to hold one row of
* raster data (based on the number of columns in the active region).
* \code
CELL *cell;
* cell = G_allocate_cell_buf(void);
\endcode
* If larger buffers are required, the routine <i>G_malloc</i> can be used.
* If sufficient memory is not available, an error message is printed and exit() is called.
* Returns pointer to a buffer. The routine is generally used with each open cell file.
*
* \param void
* \return CELL *
*/
CELL *
G_allocate_cell_buf ()
{
return (CELL *) G_calloc (G_window_cols() + 1, sizeof(CELL));
}
/*!
* \brief Allocate raster array
*
* Allocate an array of CELL, FCELL, or DCELL (depending on <em>data_type</em>) based on the number of columns in the current region.
*
* \param data_type
* \return void *
*/
void *
G_allocate_raster_buf (data_type)
RASTER_MAP_TYPE data_type;
{
return (void *) G_calloc (G_window_cols() + 1, G_raster_size(data_type));
}
/*!
* \brief Allocate an array of CELL
*
* Allocate an array of CELL
* based on the number of columns in the current region.
*
* \return CELL *
*/
CELL *
G_allocate_c_raster_buf ()
{
return (CELL *) G_calloc (G_window_cols() + 1, sizeof(CELL));
}
/*!
* \brief Allocate an array of FCELL
*
* Allocate an array of FCELL
* based on the number of columns in the current region.
*
* \return FCELL *
*/
FCELL *
G_allocate_f_raster_buf ()
{
return (FCELL *) G_calloc (G_window_cols() + 1, sizeof(FCELL));
}
/*!
* \brief Allocate an array of DCELL
*
* Allocate an array of DCELL
* based on the number of columns in the current region.
*
* \return DCELL *
*/
DCELL *
G_allocate_d_raster_buf ()
{
return (DCELL *) G_calloc (G_window_cols() + 1, sizeof(DCELL));
}
/*!
* \brief Allocate an array of char
*
* Allocate an array of char based on
* the number of columns in the current region.
*
* \return char *
*/
char *
G_allocate_null_buf ()
{
return (char *) G_calloc (G_window_cols() + 1, sizeof(char));
}
unsigned char *
G__allocate_null_bits (cols)
int cols;
{
return (unsigned char *) G_calloc (G__null_bitstream_size(cols)+1,
sizeof(unsigned char));
}
int
G__null_bitstream_size(cols)
int cols;
{
if (cols <= 0 ) return -1;
return (cols/8 + (cols % 8 != 0));
}
|