1 /* $NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $ */ 2 /* $FreeBSD: src/include/search.h,v 1.4 2002/03/23 17:24:53 imp Exp $ */ 3 4 /* 5 * Written by J.T. Conklin <jtc@netbsd.org> 6 * Public domain. 7 */ 8 9 #ifndef _SEARCH_H_ 10 #define _SEARCH_H_ 11 12 #include <sys/cdefs.h> 13 #include <machine/ansi.h> 14 #include <sys/types.h> 15 16 typedef struct entry { 17 char *key; 18 void *data; 19 } ENTRY; 20 21 typedef enum { 22 FIND, ENTER 23 } ACTION; 24 25 typedef enum { 26 preorder, 27 postorder, 28 endorder, 29 leaf 30 } VISIT; 31 32 #ifdef _SEARCH_PRIVATE 33 typedef struct node { 34 char *key; 35 struct node *llink, *rlink; 36 } node_t; 37 #endif 38 39 struct hsearch_data 40 { 41 struct internal_head *htable; 42 size_t htablesize; 43 }; 44 45 #ifndef __compar_fn_t_defined 46 #define __compar_fn_t_defined 47 typedef int (*__compar_fn_t) (const void *, const void *); 48 #endif 49 50 __BEGIN_DECLS 51 int hcreate(size_t); 52 void hdestroy(void); 53 ENTRY *hsearch(ENTRY, ACTION); 54 int hcreate_r(size_t, struct hsearch_data *); 55 void hdestroy_r(struct hsearch_data *); 56 int hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *); 57 void *tdelete(const void *__restrict, void **__restrict, __compar_fn_t); 58 void tdestroy (void *, void (*)(void *)); 59 void *tfind(const void *, void **, __compar_fn_t); 60 void *tsearch(const void *, void **, __compar_fn_t); 61 void twalk(const void *, void (*)(const void *, VISIT, int)); 62 __END_DECLS 63 64 #endif /* !_SEARCH_H_ */ 65