GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
xmin.c
Go to the documentation of this file.
1#include <stdlib.h>
2
3#include <grass/gis.h>
4#include <grass/raster.h>
5#include <grass/calc.h>
6
7/****************************************************************
8min(x0,x1,...,xn) returns minimum value
9****************************************************************/
10
11int f_min(int argc, const int *argt, void **args)
12{
13 int i, j;
14
15 if (argc < 1)
16 return E_ARG_LO;
17
18 for (i = 1; i <= argc; i++)
19 if (argt[i] != argt[0])
20 return E_ARG_TYPE;
21
22 switch (argt[0]) {
23 case CELL_TYPE: {
24 CELL *res = args[0];
25 CELL **argz = (CELL **)args;
26
27 for (i = 0; i < columns; i++) {
28 int nul = 0;
29 CELL min;
30
31 for (j = 1; j <= argc; j++)
32 if (IS_NULL_C(&argz[j][i]))
33 nul = 1;
34 else if (j == 1)
35 min = argz[j][i];
36 else if (min > argz[j][i])
37 min = argz[j][i];
38 if (nul)
39 SET_NULL_C(&res[i]);
40 else
41 res[i] = min;
42 }
43 return 0;
44 }
45 case FCELL_TYPE: {
46 FCELL *res = args[0];
47 FCELL **argz = (FCELL **)args;
48
49 for (i = 0; i < columns; i++) {
50 int nul = 0;
51 FCELL min;
52
53 for (j = 1; j <= argc; j++)
54 if (IS_NULL_F(&argz[j][i]))
55 nul = 1;
56 else if (j == 1)
57 min = argz[j][i];
58 else if (min > argz[j][i])
59 min = argz[j][i];
60 if (nul)
61 SET_NULL_F(&res[i]);
62 else
63 res[i] = min;
64 }
65
66 return 0;
67 }
68 case DCELL_TYPE: {
69 DCELL *res = args[0];
70 DCELL **argz = (DCELL **)args;
71
72 for (i = 0; i < columns; i++) {
73 int nul = 0;
74 DCELL min;
75
76 for (j = 1; j <= argc; j++)
77 if (IS_NULL_D(&argz[j][i]))
78 nul = 1;
79 else if (j == 1)
80 min = argz[j][i];
81 else if (min > argz[j][i])
82 min = argz[j][i];
83 if (nul)
84 SET_NULL_D(&res[i]);
85 else
86 res[i] = min;
87 }
88
89 return 0;
90 }
91 default:
92 return E_INV_TYPE;
93 }
94}
int columns
Definition calc.c:11
#define min(a, b)
int f_min(int argc, const int *argt, void **args)
Definition xmin.c:11