GRASS GIS 8 Programmer's Manual  8.5.0dev(2024)-36359e2344
xne.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 ne(a,b) = a != b
7 ****************************************************************/
8 
9 int f_ne(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  switch (argt[1]) {
20  case CELL_TYPE: {
21  CELL *arg1 = args[1];
22  CELL *arg2 = args[2];
23 
24  for (i = 0; i < columns; i++) {
25  if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
26  SET_NULL_C(&res[i]);
27  else
28  res[i] = arg1[i] != arg2[i];
29  }
30  return 0;
31  }
32  case FCELL_TYPE: {
33  FCELL *arg1 = args[1];
34  FCELL *arg2 = args[2];
35 
36  for (i = 0; i < columns; i++) {
37  if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
38  SET_NULL_C(&res[i]);
39  else
40  res[i] = arg1[i] != arg2[i];
41  }
42  return 0;
43  }
44  case DCELL_TYPE: {
45  DCELL *arg1 = args[1];
46  DCELL *arg2 = args[2];
47 
48  for (i = 0; i < columns; i++) {
49  if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
50  SET_NULL_C(&res[i]);
51  else
52  res[i] = arg1[i] != arg2[i];
53  }
54  return 0;
55  }
56  default:
57  return E_INV_TYPE;
58  }
59 }
@ E_INV_TYPE
Definition: calc.h:15
@ 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:630
double DCELL
Definition: gis.h:629
int CELL
Definition: gis.h:628
#define FCELL_TYPE
Definition: raster.h:12
#define DCELL_TYPE
Definition: raster.h:13
#define CELL_TYPE
Definition: raster.h:11
int f_ne(int argc, const int *argt, void **args)
Definition: xne.c:9