search.h revision 101882
1285612Sdelphij/*	$NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $	*/
254359Sroberto/* $FreeBSD: head/include/search.h 101882 2002-08-14 21:16:41Z robert $ */
354359Sroberto
454359Sroberto/*
554359Sroberto * Written by J.T. Conklin <jtc@netbsd.org>
654359Sroberto * Public domain.
754359Sroberto */
8285612Sdelphij
9285612Sdelphij#ifndef _SEARCH_H_
10285612Sdelphij#define _SEARCH_H_
11285612Sdelphij
12285612Sdelphij#include <sys/cdefs.h>
13285612Sdelphij#include <machine/ansi.h>
14285612Sdelphij
15285612Sdelphij#ifdef	_BSD_SIZE_T_
1654359Srobertotypedef	_BSD_SIZE_T_	size_t;
1754359Sroberto#undef	_BSD_SIZE_T_
1854359Sroberto#endif
1954359Sroberto
2054359Srobertotypedef struct entry {
2154359Sroberto	char *key;
22285612Sdelphij	void *data;
23285612Sdelphij} ENTRY;
2454359Sroberto
2554359Srobertotypedef enum {
26285612Sdelphij	FIND, ENTER
27285612Sdelphij} ACTION;
2854359Sroberto
2954359Srobertotypedef enum {
30285612Sdelphij	preorder,
31285612Sdelphij	postorder,
32285612Sdelphij	endorder,
3354359Sroberto	leaf
34285612Sdelphij} VISIT;
35285612Sdelphij
3654359Sroberto#ifdef _SEARCH_PRIVATE
37285612Sdelphijtypedef struct node {
3854359Sroberto	char         *key;
3954359Sroberto	struct node  *llink, *rlink;
4054359Sroberto} node_t;
4154359Sroberto#endif
4254359Sroberto
43__BEGIN_DECLS
44int	 hcreate(size_t);
45void	 hdestroy(void);
46ENTRY	*hsearch(ENTRY, ACTION);
47void	*tdelete(const void *__restrict, void **__restrict,
48	    int (*)(const void *, const void *));
49void	*tfind(const void *, void **, int (*)(const void *, const void *));
50void	*tsearch(const void *, void **, int (*)(const void *, const void *));
51void      twalk(const void *, void (*)(const void *, VISIT, int));
52__END_DECLS
53
54#endif /* !_SEARCH_H_ */
55