GRASS Programmer's Manual
6.4.2(2012)
|
00001 #include <stdlib.h> 00002 #include <grass/gis.h> 00003 00004 00033 void *G_incr_void_ptr(const void *ptr, const size_t size) 00034 { 00035 /* assuming that the size of unsigned char is 1 */ 00036 return (void *)((const unsigned char *)ptr + size); 00037 } 00038 00039 00054 int G_raster_cmp(const void *v1, const void *v2, RASTER_MAP_TYPE data_type) 00055 { 00056 if (G_is_null_value(v1, data_type)) { 00057 if (G_is_null_value(v2, data_type)) 00058 return 0; 00059 else 00060 return -1; 00061 } 00062 else if (G_is_null_value(v2, data_type)) 00063 return 1; 00064 00065 switch (data_type) { 00066 case CELL_TYPE: 00067 if (*((const CELL *)v1) > *((const CELL *)v2)) 00068 return 1; 00069 else if (*((const CELL *)v1) == *((const CELL *)v2)) 00070 return 0; 00071 else 00072 return -1; 00073 case FCELL_TYPE: 00074 if (*((const FCELL *)v1) > *((const FCELL *)v2)) 00075 return 1; 00076 else if (*((const FCELL *)v1) == *((const FCELL *)v2)) 00077 return 0; 00078 else 00079 return -1; 00080 case DCELL_TYPE: 00081 if (*((const DCELL *)v1) > *((const DCELL *)v2)) 00082 return 1; 00083 else if (*((const DCELL *)v1) == *((const DCELL *)v2)) 00084 return 0; 00085 else 00086 return -1; 00087 } 00088 00089 return 0; 00090 } 00091 00092 00105 int G_raster_cpy(void *v1, const void *v2, int n, RASTER_MAP_TYPE data_type) 00106 { 00107 G_copy((char *)v1, (char *)v2, n * G_raster_size(data_type)); 00108 return 0; 00109 } 00110 00111 00125 int G_set_raster_value_c(void *rast, CELL cval, RASTER_MAP_TYPE data_type) 00126 { 00127 CELL c; 00128 00129 c = cval; 00130 if (G_is_c_null_value(&c)) { 00131 G_set_null_value(rast, 1, data_type); 00132 return 0; 00133 } 00134 switch (data_type) { 00135 case CELL_TYPE: 00136 *((CELL *) rast) = cval; 00137 break; 00138 case FCELL_TYPE: 00139 *((FCELL *) rast) = (FCELL) cval; 00140 break; 00141 case DCELL_TYPE: 00142 *((DCELL *) rast) = (DCELL) cval; 00143 break; 00144 } 00145 00146 return 0; 00147 } 00148 00149 00163 int G_set_raster_value_f(void *rast, FCELL fval, RASTER_MAP_TYPE data_type) 00164 { 00165 FCELL f; 00166 00167 f = fval; 00168 if (G_is_f_null_value(&f)) { 00169 G_set_null_value(rast, 1, data_type); 00170 return 0; 00171 } 00172 switch (data_type) { 00173 case CELL_TYPE: 00174 *((CELL *) rast) = (CELL) fval; 00175 break; 00176 case FCELL_TYPE: 00177 *((FCELL *) rast) = fval; 00178 break; 00179 case DCELL_TYPE: 00180 *((DCELL *) rast) = (DCELL) fval; 00181 break; 00182 } 00183 00184 return 0; 00185 } 00186 00187 00201 int G_set_raster_value_d(void *rast, DCELL dval, RASTER_MAP_TYPE data_type) 00202 { 00203 DCELL d; 00204 00205 d = dval; 00206 if (G_is_d_null_value(&d)) { 00207 G_set_null_value(rast, 1, data_type); 00208 return -1; 00209 } 00210 switch (data_type) { 00211 case CELL_TYPE: 00212 *((CELL *) rast) = (CELL) dval; 00213 break; 00214 case FCELL_TYPE: 00215 *((FCELL *) rast) = (FCELL) dval; 00216 break; 00217 case DCELL_TYPE: 00218 *((DCELL *) rast) = dval; 00219 break; 00220 } 00221 00222 return 0; 00223 } 00224 00225 00243 CELL G_get_raster_value_c(const void *rast, RASTER_MAP_TYPE data_type) 00244 { 00245 CELL c; 00246 00247 if (G_is_null_value(rast, data_type)) { 00248 G_set_c_null_value(&c, 1); 00249 return c; 00250 } 00251 switch (data_type) { 00252 case CELL_TYPE: 00253 return *((const CELL *)rast); 00254 case FCELL_TYPE: 00255 return (CELL) * ((const FCELL *)rast); 00256 case DCELL_TYPE: 00257 return (CELL) * ((const DCELL *)rast); 00258 } 00259 00260 return 0; 00261 } 00262 00263 00278 FCELL G_get_raster_value_f(const void *rast, RASTER_MAP_TYPE data_type) 00279 { 00280 FCELL f; 00281 00282 if (G_is_null_value(rast, data_type)) { 00283 G_set_f_null_value(&f, 1); 00284 return f; 00285 } 00286 switch (data_type) { 00287 case CELL_TYPE: 00288 return (FCELL) * ((const CELL *)rast); 00289 case FCELL_TYPE: 00290 return *((const FCELL *)rast); 00291 case DCELL_TYPE: 00292 return (FCELL) * ((const DCELL *)rast); 00293 } 00294 00295 return 0; 00296 } 00297 00298 00313 DCELL G_get_raster_value_d(const void *rast, RASTER_MAP_TYPE data_type) 00314 { 00315 DCELL d; 00316 00317 if (G_is_null_value(rast, data_type)) { 00318 G_set_d_null_value(&d, 1); 00319 return d; 00320 } 00321 switch (data_type) { 00322 case CELL_TYPE: 00323 return (DCELL) * ((const CELL *)rast); 00324 case FCELL_TYPE: 00325 return (DCELL) * ((const FCELL *)rast); 00326 case DCELL_TYPE: 00327 return *((const DCELL *)rast); 00328 } 00329 00330 return 0; 00331 }