xeval.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <grass/gis.h>
  2. #include <grass/raster.h>
  3. #include <grass/calc.h>
  4. /**********************************************************************
  5. eval(..,..,..,x) = x
  6. return last argument
  7. **********************************************************************/
  8. int f_eval(int argc, const int *argt, void **args)
  9. {
  10. int i;
  11. if (argc < 1)
  12. return E_ARG_LO;
  13. if (argt[0] != argt[argc])
  14. return E_RES_TYPE;
  15. switch (argt[argc]) {
  16. case CELL_TYPE:
  17. {
  18. CELL *res = args[0];
  19. CELL *arg1 = args[argc];
  20. for (i = 0; i < columns; i++)
  21. if (IS_NULL_C(&arg1[i]))
  22. SET_NULL_C(&res[i]);
  23. else
  24. res[i] = arg1[i];
  25. return 0;
  26. }
  27. case FCELL_TYPE:
  28. {
  29. FCELL *res = args[0];
  30. FCELL *arg1 = args[argc];
  31. for (i = 0; i < columns; i++)
  32. if (IS_NULL_F(&arg1[i]))
  33. SET_NULL_F(&res[i]);
  34. else
  35. res[i] = arg1[i];
  36. return 0;
  37. }
  38. case DCELL_TYPE:
  39. {
  40. DCELL *res = args[0];
  41. DCELL *arg1 = args[argc];
  42. for (i = 0; i < columns; i++)
  43. if (IS_NULL_D(&arg1[i]))
  44. SET_NULL_D(&res[i]);
  45. else
  46. res[i] = arg1[i];
  47. return 0;
  48. }
  49. default:
  50. return E_INV_TYPE;
  51. }
  52. }
  53. int c_eval(int argc, int *argt)
  54. {
  55. if (argc < 1)
  56. return E_ARG_LO;
  57. argt[0] = argt[argc];
  58. return 0;
  59. }