GRASS GIS 8 Programmer's Manual  8.4.0dev(2024)-a351e5eb69
xeval.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 eval(..,..,..,x) = x
7 
8  return last argument
9 **********************************************************************/
10 
11 int f_eval(int argc, const int *argt, void **args)
12 {
13  int i;
14 
15  if (argc < 1)
16  return E_ARG_LO;
17 
18  if (argt[0] != argt[argc])
19  return E_RES_TYPE;
20 
21  switch (argt[argc]) {
22  case CELL_TYPE: {
23  CELL *res = args[0];
24  CELL *arg1 = args[argc];
25 
26  for (i = 0; i < columns; i++)
27  if (IS_NULL_C(&arg1[i]))
28  SET_NULL_C(&res[i]);
29  else
30  res[i] = arg1[i];
31 
32  return 0;
33  }
34  case FCELL_TYPE: {
35  FCELL *res = args[0];
36  FCELL *arg1 = args[argc];
37 
38  for (i = 0; i < columns; i++)
39  if (IS_NULL_F(&arg1[i]))
40  SET_NULL_F(&res[i]);
41  else
42  res[i] = arg1[i];
43  return 0;
44  }
45  case DCELL_TYPE: {
46  DCELL *res = args[0];
47  DCELL *arg1 = args[argc];
48 
49  for (i = 0; i < columns; i++)
50  if (IS_NULL_D(&arg1[i]))
51  SET_NULL_D(&res[i]);
52  else
53  res[i] = arg1[i];
54  return 0;
55  }
56  default:
57  return E_INV_TYPE;
58  }
59 }
60 
61 int c_eval(int argc, int *argt)
62 {
63  if (argc < 1)
64  return E_ARG_LO;
65 
66  argt[0] = argt[argc];
67 
68  return 0;
69 }
@ E_INV_TYPE
Definition: calc.h:15
@ E_RES_TYPE
Definition: calc.h:14
@ E_ARG_LO
Definition: calc.h:11
#define IS_NULL_C(x)
Definition: calc.h:26
#define SET_NULL_D(x)
Definition: calc.h:32
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
#define SET_NULL_F(x)
Definition: calc.h:31
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_eval(int argc, const int *argt, void **args)
Definition: xeval.c:11
int c_eval(int argc, int *argt)
Definition: xeval.c:61