GRASS GIS 8 Programmer's Manual 8.2.1(2023)-exported
xeq.c
Go to the documentation of this file.
1
2#include <grass/gis.h>
3#include <grass/raster.h>
4#include <grass/calc.h>
5
6/****************************************************************
7eq(a,b) = a == b
8****************************************************************/
9
10int f_eq(int argc, const int *argt, void **args)
11{
12 CELL *res = args[0];
13 int i;
14
15 if (argc < 2)
16 return E_ARG_LO;
17 if (argc > 2)
18 return E_ARG_HI;
19
20 if (argt[0] != CELL_TYPE)
21 return E_RES_TYPE;
22
23 for (i = 2; i <= argc; i++)
24 if (argt[i] != argt[1])
25 return E_ARG_TYPE;
26
27 switch (argt[1]) {
28 case CELL_TYPE:
29 {
30 CELL *arg1 = args[1];
31 CELL *arg2 = args[2];
32
33 for (i = 0; i < columns; i++) {
34 if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
35 SET_NULL_C(&res[i]);
36 else
37 res[i] = arg1[i] == arg2[i];
38 }
39 return 0;
40 }
41 case FCELL_TYPE:
42 {
43 FCELL *arg1 = args[1];
44 FCELL *arg2 = args[2];
45
46 for (i = 0; i < columns; i++) {
47 if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
48 SET_NULL_C(&res[i]);
49 else
50 res[i] = arg1[i] == arg2[i];
51 }
52 return 0;
53 }
54 case DCELL_TYPE:
55 {
56 DCELL *arg1 = args[1];
57 DCELL *arg2 = args[2];
58
59 for (i = 0; i < columns; i++) {
60 if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
61 SET_NULL_C(&res[i]);
62 else
63 res[i] = arg1[i] == arg2[i];
64 }
65 return 0;
66 }
67 default:
68 return E_INV_TYPE;
69 }
70}
int columns
Definition: calc.c:12
int f_eq(int argc, const int *argt, void **args)
Definition: xeq.c:10