xisnull.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <grass/gis.h>
  2. #include <grass/raster.h>
  3. #include "globals.h"
  4. #include "expression.h"
  5. #include "func_proto.h"
  6. /**********************************************************************
  7. isnull(x)
  8. return 1 if x is null, 0 otherwise
  9. **********************************************************************/
  10. int f_isnull(int argc, const int *argt, void **args)
  11. {
  12. int *res = args[0];
  13. int i;
  14. if (argc < 1)
  15. return E_ARG_LO;
  16. if (argc > 1)
  17. return E_ARG_HI;
  18. if (argt[0] != CELL_TYPE)
  19. return E_RES_TYPE;
  20. switch (argt[1]) {
  21. case CELL_TYPE:
  22. {
  23. CELL *arg1 = args[1];
  24. for (i = 0; i < columns; i++)
  25. res[i] = IS_NULL_C(&arg1[i]) ? 1 : 0;
  26. return 0;
  27. }
  28. case FCELL_TYPE:
  29. {
  30. FCELL *arg1 = args[1];
  31. for (i = 0; i < columns; i++)
  32. res[i] = IS_NULL_F(&arg1[i]) ? 1 : 0;
  33. return 0;
  34. }
  35. case DCELL_TYPE:
  36. {
  37. DCELL *arg1 = args[1];
  38. for (i = 0; i < columns; i++)
  39. res[i] = IS_NULL_D(&arg1[i]) ? 1 : 0;
  40. return 0;
  41. }
  42. default:
  43. return E_INV_TYPE;
  44. }
  45. }
  46. int c_isnull(int argc, int *argt)
  47. {
  48. if (argc < 1)
  49. return E_ARG_LO;
  50. if (argc > 1)
  51. return E_ARG_HI;
  52. argt[0] = CELL_TYPE;
  53. return 0;
  54. }