xref: /openbsd/include/search.h (revision 177a7427)
1*177a7427Smatthew /*	$OpenBSD: search.h,v 1.10 2014/07/18 04:16:09 matthew Exp $	*/
2df930be7Sderaadt /*	$NetBSD: search.h,v 1.9 1995/08/08 21:14:45 jtc Exp $	*/
3df930be7Sderaadt 
4df930be7Sderaadt /*
5df930be7Sderaadt  * Written by J.T. Conklin <jtc@netbsd.org>
6df930be7Sderaadt  * Public domain.
7df930be7Sderaadt  */
8df930be7Sderaadt 
9df930be7Sderaadt #ifndef _SEARCH_H_
10df930be7Sderaadt #define _SEARCH_H_
1117648193Smillert 
12df930be7Sderaadt #include <sys/cdefs.h>
13c916d948Smillert #include <machine/_types.h>
14df930be7Sderaadt 
15c916d948Smillert #ifndef	_SIZE_T_DEFINED_
16c916d948Smillert #define	_SIZE_T_DEFINED_
17c916d948Smillert typedef	__size_t	size_t;
18df930be7Sderaadt #endif
19df930be7Sderaadt 
20df930be7Sderaadt typedef struct entry {
21df930be7Sderaadt 	char *key;
2217648193Smillert 	void *data;
23df930be7Sderaadt } ENTRY;
24df930be7Sderaadt 
25df930be7Sderaadt typedef enum {
26df930be7Sderaadt 	FIND, ENTER
27df930be7Sderaadt } ACTION;
28df930be7Sderaadt 
29df930be7Sderaadt typedef enum {
30df930be7Sderaadt 	preorder,
31df930be7Sderaadt 	postorder,
32df930be7Sderaadt 	endorder,
33df930be7Sderaadt 	leaf
34df930be7Sderaadt } VISIT;
35df930be7Sderaadt 
36df930be7Sderaadt __BEGIN_DECLS
3717648193Smillert int	 hcreate(size_t);
3817648193Smillert void	 hdestroy(void);
3917648193Smillert ENTRY	*hsearch(ENTRY, ACTION);
40df930be7Sderaadt 
4117648193Smillert void	*lfind(const void *, const void *, size_t *, size_t,
42f3c3a9c6Smillert 	    int (*)(const void *, const void *));
43*177a7427Smatthew void	*lsearch(const void *, void *, size_t *, size_t,
44f3c3a9c6Smillert 	    int (*)(const void *, const void *));
4517648193Smillert void	 insque(void *, void *);
4617648193Smillert void	 remque(void *);
47df930be7Sderaadt 
48caad5576Sguenther void	*tdelete(const void * __restrict, void ** __restrict,
49f3c3a9c6Smillert 	    int (*)(const void *, const void *));
5017648193Smillert void	*tfind(const void *, void * const *,
51f3c3a9c6Smillert 	    int (*)(const void *, const void *));
5217648193Smillert void	*tsearch(const void *, void **,
53f3c3a9c6Smillert 	    int (*)(const void *, const void *));
5417648193Smillert void      twalk(const void *, void (*)(const void *, VISIT, int));
55df930be7Sderaadt __END_DECLS
56df930be7Sderaadt 
5717648193Smillert #endif /* !_SEARCH_H_ */
58