00001 #include <grass/gis.h>
00002
00003
00032 void *G_incr_void_ptr(
00033
00034 void *ptr,
00035 int size)
00036 {
00037
00038 return (void *) ((unsigned char *) ptr + size);
00039 }
00040
00041
00056 int G_raster_cmp( void *v1,void *v2, RASTER_MAP_TYPE data_type)
00057 {
00058 if(G_is_null_value(v1, data_type ) )
00059 {
00060 if (G_is_null_value(v2, data_type ))
00061 return 0;
00062 else return -1;
00063 }
00064 else if(G_is_null_value(v2, data_type ) )
00065 return 1;
00066
00067 switch (data_type)
00068 {
00069 case CELL_TYPE: if(*((CELL *) v1) > *((CELL *) v2))
00070 return 1;
00071 else if(*((CELL *) v1) == *((CELL *) v2))
00072 return 0;
00073 else return -1;
00074 case FCELL_TYPE: if(*((FCELL *) v1) > *((FCELL *) v2))
00075 return 1;
00076 else if(*((FCELL *) v1) == *((FCELL *) v2))
00077 return 0;
00078 else return -1;
00079 case DCELL_TYPE: if(*((DCELL *) v1) > *((DCELL *) v2))
00080 return 1;
00081 else if(*((DCELL *) v1) == *((DCELL *) v2))
00082 return 0;
00083 else return -1;
00084 }
00085
00086 return 0;
00087 }
00088
00089
00102 int G_raster_cpy(
00103 void *v1,void *v2,
00104 int n,
00105 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(
00126 void *rast,
00127 CELL cval,
00128 RASTER_MAP_TYPE data_type)
00129 {
00130 CELL c;
00131 c = cval;
00132 if(G_is_c_null_value(&c))
00133 {
00134 G_set_null_value(rast, 1, data_type);
00135 return 0;
00136 }
00137 switch (data_type)
00138 {
00139 case CELL_TYPE: *((CELL *)rast) = cval; break;
00140 case FCELL_TYPE: *((FCELL *)rast) = (FCELL ) cval; break;
00141 case DCELL_TYPE: *((DCELL *)rast) = (DCELL ) cval; break;
00142 }
00143
00144 return 0;
00145 }
00146
00147
00161 int G_set_raster_value_f(
00162 void *rast,
00163 FCELL fval,
00164 RASTER_MAP_TYPE data_type)
00165 {
00166 FCELL f;
00167 f = fval;
00168 if(G_is_f_null_value(&f))
00169 {
00170 G_set_null_value(rast, 1, data_type);
00171 return 0;
00172 }
00173 switch (data_type)
00174 {
00175 case CELL_TYPE: *((CELL *)rast) = (CELL ) fval; break;
00176 case FCELL_TYPE: *((FCELL *)rast) = fval; break;
00177 case DCELL_TYPE: *((DCELL *)rast) = (DCELL ) fval; break;
00178 }
00179
00180 return 0;
00181 }
00182
00183
00197 int G_set_raster_value_d(
00198 void *rast,
00199 DCELL dval,
00200 RASTER_MAP_TYPE data_type)
00201 {
00202 DCELL d;
00203 d = dval;
00204 if(G_is_d_null_value(&d))
00205 {
00206 G_set_null_value(rast, 1, data_type);
00207 return -1;
00208 }
00209 switch (data_type)
00210 {
00211 case CELL_TYPE: *((CELL *)rast) = (CELL ) dval; break;
00212 case FCELL_TYPE: *((FCELL *)rast) = (FCELL ) dval; break;
00213 case DCELL_TYPE: *((DCELL *)rast) = dval; break;
00214 }
00215
00216 return 0;
00217 }
00218
00219
00237 CELL G_get_raster_value_c(
00238 void *rast,
00239 RASTER_MAP_TYPE data_type)
00240 {
00241 CELL c;
00242 if(G_is_null_value(rast, data_type))
00243 {
00244 G_set_c_null_value(&c, 1);
00245 return c;
00246 }
00247 switch (data_type)
00248 {
00249 case CELL_TYPE: return *((CELL *)rast);
00250 case FCELL_TYPE: return (CELL) *((FCELL *)rast);
00251 case DCELL_TYPE: return (CELL) *((DCELL *)rast);
00252 }
00253
00254 return 0;
00255 }
00256
00257
00272 FCELL G_get_raster_value_f(
00273 void *rast,
00274 RASTER_MAP_TYPE data_type)
00275 {
00276 FCELL f;
00277 if(G_is_null_value(rast, data_type))
00278 {
00279 G_set_f_null_value(&f, 1);
00280 return f;
00281 }
00282 switch (data_type)
00283 {
00284 case CELL_TYPE: return (FCELL) *((CELL *)rast);
00285 case FCELL_TYPE: return *((FCELL *)rast);
00286 case DCELL_TYPE: return (FCELL) *((DCELL *)rast);
00287 }
00288
00289 return 0;
00290 }
00291
00292
00307 DCELL G_get_raster_value_d(
00308 void *rast,
00309 RASTER_MAP_TYPE data_type)
00310 {
00311 DCELL d;
00312 if(G_is_null_value(rast, data_type))
00313 {
00314 G_set_d_null_value(&d, 1);
00315 return d;
00316 }
00317 switch (data_type)
00318 {
00319 case CELL_TYPE: return (DCELL) *((CELL *)rast);
00320 case FCELL_TYPE: return (DCELL) *((FCELL *)rast);
00321 case DCELL_TYPE: return *((DCELL *)rast);
00322 }
00323
00324 return 0;
00325 }