svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.installer / org.gvsig.desktop.selfextract.darwin / libtar_listhash.h @ 44797
History | View | Annotate | Download (5.03 KB)
1 | 42893 | jjdelcerro | /* 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 */ |