GRASS Programmer's Manual  6.4.1(2011)
raster.c
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     /* 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 }
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines