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: stable/10/include/search.h 308091 2016-10-29 15:04:24Z ed $
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};
46308091Sed#else
47308091Sedtypedef void posix_tnode;
4862321Salfred#endif
4962321Salfred
5062321Salfred__BEGIN_DECLS
5193032Simpint	 hcreate(size_t);
5293032Simpvoid	 hdestroy(void);
5393032SimpENTRY	*hsearch(ENTRY, ACTION);
54105245Srobertvoid	 insque(void *, void *);
55105250Srobertvoid	*lfind(const void *, const void *, size_t *, size_t,
56105250Srobert	    int (*)(const void *, const void *));
57105250Srobertvoid	*lsearch(const void *, void *, size_t *, size_t,
58105250Srobert	    int (*)(const void *, const void *));
59105245Srobertvoid	 remque(void *);
60103012Stjrvoid	*tdelete(const void * __restrict, void ** __restrict,
61101882Srobert	    int (*)(const void *, const void *));
62104399Smikevoid	*tfind(const void *, void * const *,
63104399Smike	    int (*)(const void *, const void *));
6493032Simpvoid	*tsearch(const void *, void **, int (*)(const void *, const void *));
65104399Smikevoid	 twalk(const void *, void (*)(const void *, VISIT, int));
6662321Salfred__END_DECLS
6762321Salfred
6862321Salfred#endif /* !_SEARCH_H_ */
69