Go to the documentation of this file.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
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 }