1 /**	$MirOS: src/include/search.h,v 1.2 2005/11/21 19:31:53 tg Exp $ */
2 /*	$OpenBSD: search.h,v 1.7 2004/07/08 21:15:11 millert Exp $	*/
3 /*	$NetBSD: search.h,v 1.9 1995/08/08 21:14:45 jtc Exp $	*/
4 
5 /*
6  * Written by J.T. Conklin <jtc@netbsd.org>
7  * Public domain.
8  */
9 
10 #ifndef _SEARCH_H_
11 #define _SEARCH_H_
12 
13 #include <sys/cdefs.h>
14 #include <machine/ansi.h>
15 
16 #if !defined(_GCC_SIZE_T)
17 #define	_GCC_SIZE_T
18 typedef	__SIZE_TYPE__	size_t;
19 #endif
20 
21 typedef struct entry {
22 	char *key;
23 	void *data;
24 } ENTRY;
25 
26 typedef enum {
27 	FIND, ENTER
28 } ACTION;
29 
30 typedef enum {
31 	preorder,
32 	postorder,
33 	endorder,
34 	leaf
35 } VISIT;
36 
37 __BEGIN_DECLS
38 void	*bsearch(const void *, const void *, size_t, size_t,
39 	    int (*)(const void *, const void *));
40 int	 hcreate(size_t);
41 void	 hdestroy(void);
42 ENTRY	*hsearch(ENTRY, ACTION);
43 
44 void	*lfind(const void *, const void *, size_t *, size_t,
45 	    int (*)(const void *, const void *));
46 void	*lsearch(const void *, const void *, size_t *, size_t,
47 	    int (*)(const void *, const void *));
48 void	 insque(void *, void *);
49 void	 remque(void *);
50 
51 void	*tdelete(const void *, void **,
52 	    int (*)(const void *, const void *));
53 void	*tfind(const void *, void * const *,
54 	    int (*)(const void *, const void *));
55 void	*tsearch(const void *, void **,
56 	    int (*)(const void *, const void *));
57 void      twalk(const void *, void (*)(const void *, VISIT, int));
58 __END_DECLS
59 
60 #endif /* !_SEARCH_H_ */
61