xisnull.c 1.1 KB

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