xmin.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include <stdlib.h>
  2. #include <grass/gis.h>
  3. #include <grass/raster.h>
  4. #include <grass/calc.h>
  5. /****************************************************************
  6. min(x0,x1,...,xn) returns minimum value
  7. ****************************************************************/
  8. int f_min(int argc, const int *argt, void **args)
  9. {
  10. int i, j;
  11. if (argc < 1)
  12. return E_ARG_LO;
  13. for (i = 1; i <= argc; i++)
  14. if (argt[i] != argt[0])
  15. return E_ARG_TYPE;
  16. switch (argt[0]) {
  17. case CELL_TYPE:
  18. {
  19. CELL *res = args[0];
  20. CELL **argz = (CELL **) args;
  21. for (i = 0; i < columns; i++) {
  22. int nul = 0;
  23. CELL min;
  24. for (j = 1; j <= argc; j++)
  25. if (IS_NULL_C(&argz[j][i]))
  26. nul = 1;
  27. else if (j == 1)
  28. min = argz[j][i];
  29. else if (min > argz[j][i])
  30. min = argz[j][i];
  31. if (nul)
  32. SET_NULL_C(&res[i]);
  33. else
  34. res[i] = min;
  35. }
  36. return 0;
  37. }
  38. case FCELL_TYPE:
  39. {
  40. FCELL *res = args[0];
  41. FCELL **argz = (FCELL **) args;
  42. for (i = 0; i < columns; i++) {
  43. int nul = 0;
  44. FCELL min;
  45. for (j = 1; j <= argc; j++)
  46. if (IS_NULL_F(&argz[j][i]))
  47. nul = 1;
  48. else if (j == 1)
  49. min = argz[j][i];
  50. else if (min > argz[j][i])
  51. min = argz[j][i];
  52. if (nul)
  53. SET_NULL_F(&res[i]);
  54. else
  55. res[i] = min;
  56. }
  57. return 0;
  58. }
  59. case DCELL_TYPE:
  60. {
  61. DCELL *res = args[0];
  62. DCELL **argz = (DCELL **) args;
  63. for (i = 0; i < columns; i++) {
  64. int nul = 0;
  65. DCELL min;
  66. for (j = 1; j <= argc; j++)
  67. if (IS_NULL_D(&argz[j][i]))
  68. nul = 1;
  69. else if (j == 1)
  70. min = argz[j][i];
  71. else if (min > argz[j][i])
  72. min = argz[j][i];
  73. if (nul)
  74. SET_NULL_D(&res[i]);
  75. else
  76. res[i] = min;
  77. }
  78. return 0;
  79. }
  80. default:
  81. return E_INV_TYPE;
  82. }
  83. }