2#include <grass/raster.h>
12static int f_if_i(
int argc,
const int *argt UNUSED,
void **args)
15 DCELL *arg1 = args[1];
16 CELL *arg2 = (argc >= 2) ? args[2] :
NULL;
17 CELL *arg3 = (argc >= 3) ? args[3] :
NULL;
18 CELL *arg4 = (argc >= 4) ? args[4] :
NULL;
26 if (IS_NULL_D(&arg1[i]))
29 res[i] = arg1[i] != 0.0 ? 1 : 0;
33 if (IS_NULL_D(&arg1[i]))
35 else if (arg1[i] == 0.0)
38 if (IS_NULL_C(&arg2[i]))
46 if (IS_NULL_D(&arg1[i]))
48 else if (arg1[i] == 0.0) {
49 if (IS_NULL_C(&arg3[i]))
55 if (IS_NULL_C(&arg2[i]))
63 if (IS_NULL_D(&arg1[i]))
65 else if (arg1[i] == 0.0) {
66 if (IS_NULL_C(&arg3[i]))
71 else if (arg1[i] > 0.0) {
72 if (IS_NULL_C(&arg2[i]))
79 if (IS_NULL_C(&arg4[i]))
92static int f_if_f(
int argc,
const int *argt UNUSED,
void **args)
95 DCELL *arg1 = args[1];
96 FCELL *arg2 = (argc >= 2) ? args[2] :
NULL;
97 FCELL *arg3 = (argc >= 3) ? args[3] :
NULL;
98 FCELL *arg4 = (argc >= 4) ? args[4] :
NULL;
108 if (IS_NULL_D(&arg1[i]))
110 else if (arg1[i] == 0.0)
113 if (IS_NULL_F(&arg2[i]))
121 if (IS_NULL_D(&arg1[i]))
123 else if (arg1[i] == 0.0) {
124 if (IS_NULL_F(&arg3[i]))
130 if (IS_NULL_F(&arg2[i]))
138 if (IS_NULL_D(&arg1[i]))
140 else if (arg1[i] == 0.0) {
141 if (IS_NULL_F(&arg3[i]))
146 else if (arg1[i] > 0.0) {
147 if (IS_NULL_F(&arg2[i]))
154 if (IS_NULL_F(&arg4[i]))
167static int f_if_d(
int argc,
const int *argt UNUSED,
void **args)
169 DCELL *res = args[0];
170 DCELL *arg1 = args[1];
171 DCELL *arg2 = (argc >= 2) ? args[2] :
NULL;
172 DCELL *arg3 = (argc >= 3) ? args[3] :
NULL;
173 DCELL *arg4 = (argc >= 4) ? args[4] :
NULL;
183 if (IS_NULL_D(&arg1[i]))
185 else if (arg1[i] == 0.0)
188 if (IS_NULL_D(&arg2[i]))
196 if (IS_NULL_D(&arg1[i]))
198 else if (arg1[i] == 0.0) {
199 if (IS_NULL_D(&arg3[i]))
205 if (IS_NULL_D(&arg2[i]))
213 if (IS_NULL_D(&arg1[i]))
215 else if (arg1[i] == 0.0) {
216 if (IS_NULL_D(&arg3[i]))
221 else if (arg1[i] > 0.0) {
222 if (IS_NULL_D(&arg2[i]))
229 if (IS_NULL_D(&arg4[i]))
242int f_if(
int argc,
const int *argt,
void **args)
249 if (argt[1] != DCELL_TYPE)
251 if (argc >= 2 && argt[2] != argt[0])
253 if (argc >= 3 && argt[3] != argt[0])
255 if (argc >= 4 && argt[4] != argt[0])
260 return f_if_i(argc, argt, args);
262 return f_if_f(argc, argt, args);
264 return f_if_d(argc, argt, args);
279 if (argc >= 2 && argt[2] == FCELL_TYPE)
280 argt[0] = FCELL_TYPE;
281 if (argc >= 3 && argt[3] == FCELL_TYPE)
282 argt[0] = FCELL_TYPE;
283 if (argc >= 4 && argt[4] == FCELL_TYPE)
284 argt[0] = FCELL_TYPE;
286 if (argc >= 2 && argt[2] == DCELL_TYPE)
287 argt[0] = DCELL_TYPE;
288 if (argc >= 3 && argt[3] == DCELL_TYPE)
289 argt[0] = DCELL_TYPE;
290 if (argc >= 4 && argt[4] == DCELL_TYPE)
291 argt[0] = DCELL_TYPE;
293 argt[1] = DCELL_TYPE;
int c_if(int argc, int *argt)
int f_if(int argc, const int *argt, void **args)