xeq.c 1.3 KB

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