/*! \file db/dbmi_base/token.c \brief DBMI Library (base) - tokens management (C) 1999-2009 by the GRASS Development Team This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details. \author Joel Jones (CERL/UIUC), Radim Blazek */ #include /* these routines manage a mapping between tokens (ints) and memory addresses */ #define NONE ( (dbAddress) NULL ) static dbAddress *list = NONE; static dbToken count = 0; /*! \brief Find token \param token pointer to dbToken \return dbAddress \return NULL if no token found */ dbAddress db_find_token(dbToken token) { if (token >= 0 && token < count) return list[token]; return (NONE); } /*! \brief Drop token \param token pointer to dbToken */ void db_drop_token(dbToken token) { if (token >= 0 && token < count) list[token] = NONE; } /*! \brief Add new token \param address dbAddress of token to be added \return dbToken */ dbToken db_new_token(dbAddress address) { dbToken token; dbAddress *p; for (token = 0; token < count; token++) if (list[token] == NONE) { list[token] = address; return token; } p = (dbAddress *) db_realloc((void *)list, sizeof(*list) * (count + 1)); if (p == NULL) return -1; list = p; token = count++; list[token] = address; return (token); }