search.h revision 103012
162321Salfred/*	$NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $	*/
262321Salfred/* $FreeBSD: head/include/search.h 103012 2002-09-06 11:24:06Z tjr $ */
362321Salfred
462321Salfred/*
562321Salfred * Written by J.T. Conklin <jtc@netbsd.org>
662321Salfred * Public domain.
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
2062321Salfredtypedef struct entry {
2162321Salfred	char *key;
2262321Salfred	void *data;
2362321Salfred} ENTRY;
2462321Salfred
2562321Salfredtypedef enum {
2662321Salfred	FIND, ENTER
2762321Salfred} ACTION;
2862321Salfred
2962321Salfredtypedef enum {
3062321Salfred	preorder,
3162321Salfred	postorder,
3262321Salfred	endorder,
3362321Salfred	leaf
3462321Salfred} VISIT;
3562321Salfred
3662321Salfred#ifdef _SEARCH_PRIVATE
3762321Salfredtypedef struct node {
3862321Salfred	char         *key;
3962321Salfred	struct node  *llink, *rlink;
4062321Salfred} node_t;
4162321Salfred#endif
4262321Salfred
4362321Salfred__BEGIN_DECLS
4493032Simpint	 hcreate(size_t);
4593032Simpvoid	 hdestroy(void);
4693032SimpENTRY	*hsearch(ENTRY, ACTION);
47103012Stjrvoid	*tdelete(const void * __restrict, void ** __restrict,
48101882Srobert	    int (*)(const void *, const void *));
4993032Simpvoid	*tfind(const void *, void **, int (*)(const void *, const void *));
5093032Simpvoid	*tsearch(const void *, void **, int (*)(const void *, const void *));
5193032Simpvoid      twalk(const void *, void (*)(const void *, VISIT, int));
5262321Salfred__END_DECLS
5362321Salfred
5462321Salfred#endif /* !_SEARCH_H_ */
55