1104399Smike/*-
262321Salfred * Written by J.T. Conklin <jtc@netbsd.org>
362321Salfred * Public domain.
4104399Smike *
5104399Smike *	$NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $
6104399Smike * $FreeBSD$
762321Salfred */
862321Salfred
962321Salfred#ifndef _SEARCH_H_
1062321Salfred#define _SEARCH_H_
1162321Salfred
1262321Salfred#include <sys/cdefs.h>
13102227Smike#include <sys/_types.h>
1462321Salfred
15102227Smike#ifndef _SIZE_T_DECLARED
16102227Smiketypedef	__size_t	size_t;
17102227Smike#define	_SIZE_T_DECLARED
1862321Salfred#endif
1962321Salfred
20104399Smiketypedef	struct entry {
21104399Smike	char	*key;
22104399Smike	void	*data;
2362321Salfred} ENTRY;
2462321Salfred
25104399Smiketypedef	enum {
2662321Salfred	FIND, ENTER
2762321Salfred} ACTION;
2862321Salfred
29104399Smiketypedef	enum {
3062321Salfred	preorder,
3162321Salfred	postorder,
3262321Salfred	endorder,
3362321Salfred	leaf
3462321Salfred} VISIT;
3562321Salfred
3662321Salfred#ifdef _SEARCH_PRIVATE
37104399Smiketypedef	struct node {
3862321Salfred	char         *key;
3962321Salfred	struct node  *llink, *rlink;
4062321Salfred} node_t;
41105245Srobert
42105245Srobertstruct que_elem {
43105245Srobert	struct que_elem *next;
44105245Srobert	struct que_elem *prev;
45105245Srobert};
4662321Salfred#endif
4762321Salfred
4862321Salfred__BEGIN_DECLS
4993032Simpint	 hcreate(size_t);
5093032Simpvoid	 hdestroy(void);
5193032SimpENTRY	*hsearch(ENTRY, ACTION);
52105245Srobertvoid	 insque(void *, void *);
53105250Srobertvoid	*lfind(const void *, const void *, size_t *, size_t,
54105250Srobert	    int (*)(const void *, const void *));
55105250Srobertvoid	*lsearch(const void *, void *, size_t *, size_t,
56105250Srobert	    int (*)(const void *, const void *));
57105245Srobertvoid	 remque(void *);
58103012Stjrvoid	*tdelete(const void * __restrict, void ** __restrict,
59101882Srobert	    int (*)(const void *, const void *));
60104399Smikevoid	*tfind(const void *, void * const *,
61104399Smike	    int (*)(const void *, const void *));
6293032Simpvoid	*tsearch(const void *, void **, int (*)(const void *, const void *));
63104399Smikevoid	 twalk(const void *, void (*)(const void *, VISIT, int));
6462321Salfred__END_DECLS
6562321Salfred
6662321Salfred#endif /* !_SEARCH_H_ */
67