1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
/*!
\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 <grass/dbmi.h>
/* 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);
}
|