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