sort_cell.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #include <stdlib.h>
  2. #include <grass/gis.h>
  3. #include <grass/raster.h>
  4. #include <grass/stats.h>
  5. static int ascending(const void *aa, const void *bb)
  6. {
  7. const DCELL *a = aa, *b = bb;
  8. if (*a < *b)
  9. return -1;
  10. return (*a > *b);
  11. if (Rast_is_d_null_value((DCELL *) a) && Rast_is_d_null_value((DCELL *) b))
  12. return 0;
  13. if (Rast_is_d_null_value((DCELL *) a))
  14. return 1;
  15. if (Rast_is_d_null_value((DCELL *) b))
  16. return -1;
  17. return (*a < *b) ? -1 : (*a > *b) ? 1 : 0;
  18. }
  19. int sort_cell(DCELL * array, int n)
  20. {
  21. int i, j;
  22. j = 0;
  23. for (i = 0; i < n; i++) {
  24. if (!Rast_is_d_null_value(&array[i])) {
  25. array[j] = array[i];
  26. j++;
  27. }
  28. }
  29. n = j;
  30. if (n > 0)
  31. qsort(array, n, sizeof(DCELL), ascending);
  32. return n;
  33. }
  34. int sort_cell_w(DCELL(*array)[2], int n)
  35. {
  36. int i, j;
  37. j = 0;
  38. for (i = 0; i < n; i++) {
  39. if (!Rast_is_d_null_value(&array[i][0]) &&
  40. !Rast_is_d_null_value(&array[i][1])) {
  41. array[j][0] = array[i][0];
  42. array[j][1] = array[i][1];
  43. j++;
  44. }
  45. }
  46. n = j;
  47. if (n > 0)
  48. qsort(array, n, 2 * sizeof(DCELL), ascending);
  49. return n;
  50. }