GRASS GIS 8 Programmer's Manual  8.4.0dev(2024)-112dd97adf
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 /****************************************************************
6 eq(a,b) = a == b
7 ****************************************************************/
8 
9 int 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 }
@ E_INV_TYPE
Definition: calc.h:15
@ E_RES_TYPE
Definition: calc.h:14
@ E_ARG_TYPE
Definition: calc.h:13
@ E_ARG_HI
Definition: calc.h:12
@ E_ARG_LO
Definition: calc.h:11
#define IS_NULL_C(x)
Definition: calc.h:26
int columns
Definition: calc.c:11
#define SET_NULL_C(x)
Definition: calc.h:30
#define IS_NULL_F(x)
Definition: calc.h:27
#define IS_NULL_D(x)
Definition: calc.h:28
float FCELL
Definition: gis.h:627
double DCELL
Definition: gis.h:626
int CELL
Definition: gis.h:625
#define FCELL_TYPE
Definition: raster.h:12
#define DCELL_TYPE
Definition: raster.h:13
#define CELL_TYPE
Definition: raster.h:11
int f_eq(int argc, const int *argt, void **args)
Definition: xeq.c:9