raster.c

Go to the documentation of this file.
00001 #include "gis.h"
00002 
00003 
00027 void *G_incr_void_ptr(
00028 /* advances ptr by size bytes returns new position */
00029    void *ptr,
00030    int size)
00031 {
00032    /* assuming that the size of unsigned char is 1 */
00033    return (void *) ((unsigned char *) ptr + size);
00034 }
00035 
00036 
00050 int G_raster_cmp( void *v1,void *v2, RASTER_MAP_TYPE data_type)
00051 {
00052     if(G_is_null_value(v1, data_type ) )
00053     {
00054        if (G_is_null_value(v2, data_type ))
00055           return 0;
00056        else return -1;
00057     }
00058     else if(G_is_null_value(v2, data_type ) )
00059        return 1;
00060 
00061     switch (data_type)
00062     {
00063        case CELL_TYPE:  if(*((CELL *) v1) > *((CELL *) v2))
00064                              return 1;
00065                         else if(*((CELL *) v1) == *((CELL *) v2))
00066                              return 0;
00067                         else return -1;
00068        case FCELL_TYPE: if(*((FCELL *) v1) > *((FCELL *) v2))
00069                              return 1;
00070                         else if(*((FCELL *) v1) == *((FCELL *) v2))
00071                              return 0;
00072                         else return -1;
00073        case DCELL_TYPE: if(*((DCELL *) v1) > *((DCELL *) v2))
00074                              return 1;
00075                         else if(*((DCELL *) v1) == *((DCELL *) v2))
00076                              return 0;
00077                         else return -1;
00078      }
00079 
00080      return 0;
00081 }
00082 
00083 
00097 int G_raster_cpy(
00098     void *v1,void *v2,
00099     int n,
00100     RASTER_MAP_TYPE data_type)
00101 {
00102     G_copy((char *) v1, (char *) v2, n * G_raster_size(data_type));
00103     return 0;
00104 }
00105 
00106 
00120 int G_set_raster_value_c(
00121     void *rast,
00122     CELL cval,
00123     RASTER_MAP_TYPE data_type)
00124 {
00125     CELL c;
00126     c = cval;
00127     if(G_is_c_null_value(&c))
00128     {
00129        G_set_null_value(rast, 1, data_type);
00130        return 0;
00131     }
00132     switch (data_type)
00133     {
00134        case CELL_TYPE: *((CELL *)rast) = cval; break;
00135        case FCELL_TYPE: *((FCELL *)rast) = (FCELL ) cval; break;
00136        case DCELL_TYPE: *((DCELL *)rast) = (DCELL ) cval; break;
00137     }
00138 
00139     return 0;
00140 }
00141 
00142 
00156 int G_set_raster_value_f(
00157     void *rast,
00158     FCELL fval,
00159     RASTER_MAP_TYPE data_type)
00160 {
00161     FCELL f;
00162     f = fval;
00163     if(G_is_f_null_value(&f))
00164     {
00165        G_set_null_value(rast, 1, data_type);
00166        return 0;
00167     }
00168     switch (data_type)
00169     {
00170        case CELL_TYPE: *((CELL *)rast) = (CELL ) fval; break;
00171        case FCELL_TYPE: *((FCELL *)rast) = fval; break;
00172        case DCELL_TYPE: *((DCELL *)rast) = (DCELL ) fval; break;
00173     }
00174 
00175     return 0;
00176 }
00177 
00178 
00192 int G_set_raster_value_d(
00193     void *rast,
00194     DCELL dval,
00195     RASTER_MAP_TYPE data_type)
00196 {
00197     DCELL d;
00198     d = dval;
00199     if(G_is_d_null_value(&d))
00200     {
00201        G_set_null_value(rast, 1, data_type);
00202        return -1;
00203     }
00204     switch (data_type)
00205     {
00206        case CELL_TYPE: *((CELL *)rast) = (CELL ) dval; break;
00207        case FCELL_TYPE: *((FCELL *)rast) = (FCELL ) dval; break;
00208        case DCELL_TYPE: *((DCELL *)rast) = dval; break;
00209     }
00210 
00211     return 0;
00212 }
00213 
00214 
00229 CELL G_get_raster_value_c(
00230     void *rast,
00231     RASTER_MAP_TYPE data_type)
00232 {
00233     CELL c;
00234     if(G_is_null_value(rast, data_type))
00235     {
00236        G_set_c_null_value(&c, 1);
00237        return c;
00238     }
00239     switch (data_type)
00240     {
00241        case CELL_TYPE: return *((CELL *)rast);
00242        case FCELL_TYPE: return (CELL) *((FCELL *)rast);
00243        case DCELL_TYPE: return (CELL) *((DCELL *)rast);
00244     }
00245 
00246     return 0;
00247 }
00248 
00249 
00263 FCELL G_get_raster_value_f(
00264     void *rast,
00265     RASTER_MAP_TYPE data_type)
00266 {
00267     FCELL f;
00268     if(G_is_null_value(rast, data_type))
00269     {
00270        G_set_f_null_value(&f, 1);
00271        return f;
00272     }
00273     switch (data_type)
00274     {
00275        case CELL_TYPE: return (FCELL) *((CELL *)rast);
00276        case FCELL_TYPE: return *((FCELL *)rast);
00277        case DCELL_TYPE: return (FCELL) *((DCELL *)rast);
00278     }
00279 
00280     return 0;
00281 }
00282 
00283 
00297 DCELL G_get_raster_value_d(
00298     void *rast,
00299     RASTER_MAP_TYPE data_type)
00300 {
00301     DCELL d;
00302     if(G_is_null_value(rast, data_type))
00303     {
00304        G_set_d_null_value(&d, 1);
00305        return d;
00306     }
00307     switch (data_type)
00308     {
00309        case CELL_TYPE: return (DCELL) *((CELL *)rast);
00310        case FCELL_TYPE: return (DCELL) *((FCELL *)rast);
00311        case DCELL_TYPE: return *((DCELL *)rast);
00312     }
00313 
00314     return 0;
00315 }

Generated on Sat Jul 22 22:06:15 2006 for GRASS by  doxygen 1.4.7