GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
xsub.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/****************************************************************
6sub(a,b) = a - b
7****************************************************************/
8
9int f_sub(int argc, const int *argt, void **args)
10{
11 int i;
12
13 if (argc < 2)
14 return E_ARG_LO;
15 if (argc > 2)
16 return E_ARG_HI;
17
18 if (argt[1] != argt[0] || argt[2] != argt[0])
19 return E_ARG_TYPE;
20
21 switch (argt[0]) {
22 case CELL_TYPE: {
23 CELL *res = args[0];
24 CELL *arg1 = args[1];
25 CELL *arg2 = args[2];
26
27 for (i = 0; i < columns; i++) {
28 if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
29 SET_NULL_C(&res[i]);
30 else
31 res[i] = arg1[i] - arg2[i];
32 }
33 return 0;
34 }
35 case FCELL_TYPE: {
36 FCELL *res = args[0];
37 FCELL *arg1 = args[1];
38 FCELL *arg2 = args[2];
39
40 for (i = 0; i < columns; i++) {
41 if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
42 SET_NULL_F(&res[i]);
43 else
44 res[i] = arg1[i] - arg2[i];
45 }
46 return 0;
47 }
48 case DCELL_TYPE: {
49 DCELL *res = args[0];
50 DCELL *arg1 = args[1];
51 DCELL *arg2 = args[2];
52
53 for (i = 0; i < columns; i++) {
54 if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
55 SET_NULL_D(&res[i]);
56 else
57 res[i] = arg1[i] - arg2[i];
58 }
59 return 0;
60 }
61 default:
62 return E_INV_TYPE;
63 }
64}
int columns
Definition calc.c:11
int f_sub(int argc, const int *argt, void **args)
Definition xsub.c:9