svn-gvsig-desktop / tags / org.gvsig.desktop-2.0.235 / org.gvsig.desktop.installer / org.gvsig.desktop.selfextract.darwin / libtar_listhash.h @ 44220
History | View | Annotate | Download (5.03 KB)
1 |
/* listhash/libtar_listhash.h. Generated from listhash.h.in by configure. */
|
---|---|
2 |
|
3 |
/*
|
4 |
** Copyright 1998-2002 University of Illinois Board of Trustees
|
5 |
** Copyright 1998-2002 Mark D. Roth
|
6 |
** All rights reserved.
|
7 |
**
|
8 |
** libtar_listhash.h - header file for listhash module
|
9 |
**
|
10 |
** Mark D. Roth <roth@uiuc.edu>
|
11 |
** Campus Information Technologies and Educational Services
|
12 |
** University of Illinois at Urbana-Champaign
|
13 |
*/
|
14 |
|
15 |
#ifndef libtar_LISTHASH_H
|
16 |
#define libtar_LISTHASH_H
|
17 |
|
18 |
|
19 |
/***** list.c **********************************************************/
|
20 |
|
21 |
/*
|
22 |
** Comparison function (used to determine order of elements in a list)
|
23 |
** returns less than, equal to, or greater than 0
|
24 |
** if data1 is less than, equal to, or greater than data2
|
25 |
*/
|
26 |
typedef int (*libtar_cmpfunc_t)(void *, void *); |
27 |
|
28 |
/*
|
29 |
** Free function (for freeing allocated memory in each element)
|
30 |
*/
|
31 |
typedef void (*libtar_freefunc_t)(void *); |
32 |
|
33 |
/*
|
34 |
** Plugin function for libtar_list_iterate()
|
35 |
*/
|
36 |
typedef int (*libtar_iterate_func_t)(void *, void *); |
37 |
|
38 |
/*
|
39 |
** Matching function (used to find elements in a list)
|
40 |
** first argument is the data to search for
|
41 |
** second argument is the list element it's being compared to
|
42 |
** returns 0 if no match is found, non-zero otherwise
|
43 |
*/
|
44 |
typedef int (*libtar_matchfunc_t)(void *, void *); |
45 |
|
46 |
|
47 |
struct libtar_node
|
48 |
{ |
49 |
void *data;
|
50 |
struct libtar_node *next;
|
51 |
struct libtar_node *prev;
|
52 |
}; |
53 |
typedef struct libtar_node *libtar_listptr_t; |
54 |
|
55 |
struct libtar_list
|
56 |
{ |
57 |
libtar_listptr_t first; |
58 |
libtar_listptr_t last; |
59 |
libtar_cmpfunc_t cmpfunc; |
60 |
int flags;
|
61 |
unsigned int nents; |
62 |
}; |
63 |
typedef struct libtar_list libtar_list_t; |
64 |
|
65 |
|
66 |
/* values for flags */
|
67 |
#define LIST_USERFUNC 0 /* use cmpfunc() to order */ |
68 |
#define LIST_STACK 1 /* new elements go in front */ |
69 |
#define LIST_QUEUE 2 /* new elements go at the end */ |
70 |
|
71 |
|
72 |
/* reset a list pointer */
|
73 |
void libtar_listptr_reset(libtar_listptr_t *);
|
74 |
|
75 |
/* retrieve the data being pointed to */
|
76 |
void *libtar_listptr_data(libtar_listptr_t *);
|
77 |
|
78 |
/* creates a new, empty list */
|
79 |
libtar_list_t *libtar_list_new(int, libtar_cmpfunc_t);
|
80 |
|
81 |
/* call a function for every element in a list */
|
82 |
int libtar_list_iterate(libtar_list_t *,
|
83 |
libtar_iterate_func_t, void *);
|
84 |
|
85 |
/* empty the list */
|
86 |
void libtar_list_empty(libtar_list_t *,
|
87 |
libtar_freefunc_t); |
88 |
|
89 |
/* remove and free() the entire list */
|
90 |
void libtar_list_free(libtar_list_t *,
|
91 |
libtar_freefunc_t); |
92 |
|
93 |
/* add elements */
|
94 |
int libtar_list_add(libtar_list_t *, void *); |
95 |
|
96 |
/* removes an element from the list - returns -1 on error */
|
97 |
void libtar_list_del(libtar_list_t *,
|
98 |
libtar_listptr_t *); |
99 |
|
100 |
/* returns 1 when valid data is returned, or 0 at end of list */
|
101 |
int libtar_list_next(libtar_list_t *,
|
102 |
libtar_listptr_t *); |
103 |
|
104 |
/* returns 1 when valid data is returned, or 0 at end of list */
|
105 |
int libtar_list_prev(libtar_list_t *,
|
106 |
libtar_listptr_t *); |
107 |
|
108 |
/* return 1 if the data matches a list entry, 0 otherwise */
|
109 |
int libtar_list_search(libtar_list_t *,
|
110 |
libtar_listptr_t *, void *,
|
111 |
libtar_matchfunc_t); |
112 |
|
113 |
/* return number of elements from list */
|
114 |
unsigned int libtar_list_nents(libtar_list_t *); |
115 |
|
116 |
/* adds elements from a string delimited by delim */
|
117 |
int libtar_list_add_str(libtar_list_t *, char *, char *); |
118 |
|
119 |
/* string matching function */
|
120 |
int libtar_str_match(char *, char *); |
121 |
|
122 |
|
123 |
/***** hash.c **********************************************************/
|
124 |
|
125 |
/*
|
126 |
** Hashing function (determines which bucket the given key hashes into)
|
127 |
** first argument is the key to hash
|
128 |
** second argument is the total number of buckets
|
129 |
** returns the bucket number
|
130 |
*/
|
131 |
typedef unsigned int (*libtar_hashfunc_t)(void *, unsigned int); |
132 |
|
133 |
|
134 |
struct libtar_hashptr
|
135 |
{ |
136 |
int bucket;
|
137 |
libtar_listptr_t node; |
138 |
}; |
139 |
typedef struct libtar_hashptr libtar_hashptr_t; |
140 |
|
141 |
struct libtar_hash
|
142 |
{ |
143 |
int numbuckets;
|
144 |
libtar_list_t **table; |
145 |
libtar_hashfunc_t hashfunc; |
146 |
unsigned int nents; |
147 |
}; |
148 |
typedef struct libtar_hash libtar_hash_t; |
149 |
|
150 |
|
151 |
/* reset a hash pointer */
|
152 |
void libtar_hashptr_reset(libtar_hashptr_t *);
|
153 |
|
154 |
/* retrieve the data being pointed to */
|
155 |
void *libtar_hashptr_data(libtar_hashptr_t *);
|
156 |
|
157 |
/* default hash function, optimized for 7-bit strings */
|
158 |
unsigned int libtar_str_hashfunc(char *, unsigned int); |
159 |
|
160 |
/* return number of elements from hash */
|
161 |
unsigned int libtar_hash_nents(libtar_hash_t *); |
162 |
|
163 |
/* create a new hash */
|
164 |
libtar_hash_t *libtar_hash_new(int, libtar_hashfunc_t);
|
165 |
|
166 |
/* empty the hash */
|
167 |
void libtar_hash_empty(libtar_hash_t *,
|
168 |
libtar_freefunc_t); |
169 |
|
170 |
/* delete all the libtar_nodes of the hash and clean up */
|
171 |
void libtar_hash_free(libtar_hash_t *,
|
172 |
libtar_freefunc_t); |
173 |
|
174 |
/* returns 1 when valid data is returned, or 0 at end of list */
|
175 |
int libtar_hash_next(libtar_hash_t *,
|
176 |
libtar_hashptr_t *); |
177 |
|
178 |
/* return 1 if the data matches a list entry, 0 otherwise */
|
179 |
int libtar_hash_search(libtar_hash_t *,
|
180 |
libtar_hashptr_t *, void *,
|
181 |
libtar_matchfunc_t); |
182 |
|
183 |
/* return 1 if the key matches a list entry, 0 otherwise */
|
184 |
int libtar_hash_getkey(libtar_hash_t *,
|
185 |
libtar_hashptr_t *, void *,
|
186 |
libtar_matchfunc_t); |
187 |
|
188 |
/* inserting data */
|
189 |
int libtar_hash_add(libtar_hash_t *, void *); |
190 |
|
191 |
/* delete an entry */
|
192 |
int libtar_hash_del(libtar_hash_t *,
|
193 |
libtar_hashptr_t *); |
194 |
|
195 |
#endif /* ! libtar_LISTHASH_H */ |
196 |
|