File: alloc_cell.c

package info (click to toggle)
grass 6.0.2-6
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 40,044 kB
  • ctags: 31,303
  • sloc: ansic: 321,125; tcl: 25,676; sh: 11,176; cpp: 10,098; makefile: 5,025; fortran: 1,846; yacc: 493; lex: 462; perl: 133; sed: 1
file content (143 lines) | stat: -rw-r--r-- 3,025 bytes parent folder | download | duplicates (2)
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));
}