token.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*!
  2. \file db/dbmi_base/token.c
  3. \brief DBMI Library (base) - tokens management
  4. (C) 1999-2009 by the GRASS Development Team
  5. This program is free software under the GNU General Public
  6. License (>=v2). Read the file COPYING that comes with GRASS
  7. for details.
  8. \author Joel Jones (CERL/UIUC), Radim Blazek
  9. */
  10. #include <grass/dbmi.h>
  11. /* these routines manage a mapping between tokens (ints) and memory addresses */
  12. #define NONE ( (dbAddress) NULL )
  13. static dbAddress *list = NONE;
  14. static dbToken count = 0;
  15. /*!
  16. \brief Find token
  17. \param token pointer to dbToken
  18. \return dbAddress
  19. \return NULL if no token found
  20. */
  21. dbAddress db_find_token(dbToken token)
  22. {
  23. if (token >= 0 && token < count)
  24. return list[token];
  25. return (NONE);
  26. }
  27. /*!
  28. \brief Drop token
  29. \param token pointer to dbToken
  30. */
  31. void db_drop_token(dbToken token)
  32. {
  33. if (token >= 0 && token < count)
  34. list[token] = NONE;
  35. }
  36. /*!
  37. \brief Add new token
  38. \param address dbAddress of token to be added
  39. \return dbToken
  40. */
  41. dbToken db_new_token(dbAddress address)
  42. {
  43. dbToken token;
  44. dbAddress *p;
  45. for (token = 0; token < count; token++)
  46. if (list[token] == NONE) {
  47. list[token] = address;
  48. return token;
  49. }
  50. p = (dbAddress *) db_realloc((void *)list, sizeof(*list) * (count + 1));
  51. if (p == NULL)
  52. return -1;
  53. list = p;
  54. token = count++;
  55. list[token] = address;
  56. return (token);
  57. }