00001 #include "gis.h"
00002
00003
00027 void *G_incr_void_ptr(
00028
00029 void *ptr,
00030 int size)
00031 {
00032
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 }