flag.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <stdlib.h>
  2. #include <grass/gis.h>
  3. #include "flag.h"
  4. void FlagClearAll(FLAG * flags)
  5. {
  6. register int r, c;
  7. for (r = 0; r < flags->nrows; r++) {
  8. for (c = 0; c < flags->leng; c++) {
  9. flags->array[r][c] = 0;
  10. }
  11. }
  12. }
  13. FLAG *FlagCreate(int nrows, int ncols)
  14. {
  15. unsigned char *temp;
  16. FLAG *new_flag;
  17. register int i;
  18. new_flag = (FLAG *) G_malloc(sizeof(FLAG));
  19. new_flag->nrows = nrows;
  20. new_flag->ncols = ncols;
  21. new_flag->leng = (ncols + 7) / 8;
  22. new_flag->array =
  23. (unsigned char **)G_malloc(nrows * sizeof(unsigned char *));
  24. temp =
  25. (unsigned char *)G_calloc(nrows * new_flag->leng,
  26. sizeof(unsigned char));
  27. for (i = 0; i < nrows; i++) {
  28. new_flag->array[i] = temp;
  29. temp += new_flag->leng;
  30. }
  31. return (new_flag);
  32. }
  33. void FlagDestroy(FLAG * flags)
  34. {
  35. G_free(flags->array[0]);
  36. G_free(flags->array);
  37. G_free(flags);
  38. }
  39. int FlagGet(FLAG * flags, int row, int col)
  40. {
  41. return (flags->array[row][col >> 3] & (1 << (col & 7)));
  42. }
  43. void FlagSet(FLAG * flags, int row, int col)
  44. {
  45. flags->array[row][col >> 3] |= (1 << (col & 7));
  46. }
  47. void FlagUnset(FLAG * flags, int row, int col)
  48. {
  49. flags->array[row][col >> 3] &= ~(1 << (col & 7));
  50. }