1/*- 2 * Written by J.T. Conklin <jtc@NetBSD.org> 3 * Public domain. 4 * 5 * $NetBSD: search.h,v 1.16 2005/02/03 04:39:32 perry Exp $ 6 */ 7 8#ifndef _SEARCH_H_ 9#define _SEARCH_H_ 10 11#include <sys/cdefs.h> 12#include <sys/_types.h> 13 14#ifndef _SIZE_T_DECLARED 15typedef __size_t size_t; 16#define _SIZE_T_DECLARED 17#endif 18 19typedef struct entry { 20 char *key; 21 void *data; 22} ENTRY; 23 24typedef enum { 25 FIND, ENTER 26} ACTION; 27 28typedef enum { 29 preorder, 30 postorder, 31 endorder, 32 leaf 33} VISIT; 34 35#ifdef _SEARCH_PRIVATE 36typedef struct __posix_tnode { 37 void *key; 38 struct __posix_tnode *llink, *rlink; 39 signed char balance; 40} posix_tnode; 41 42struct que_elem { 43 struct que_elem *next; 44 struct que_elem *prev; 45}; 46#else 47typedef void posix_tnode; 48#endif 49 50#if __BSD_VISIBLE 51struct hsearch_data { 52 struct __hsearch *__hsearch; 53}; 54#endif 55 56__BEGIN_DECLS 57int hcreate(size_t); 58void hdestroy(void); 59ENTRY *hsearch(ENTRY, ACTION); 60void insque(void *, void *); 61void *lfind(const void *, const void *, size_t *, size_t, 62 int (*)(const void *, const void *)); 63void *lsearch(const void *, void *, size_t *, size_t, 64 int (*)(const void *, const void *)); 65void remque(void *); 66void *tdelete(const void * __restrict, posix_tnode ** __restrict, 67 int (*)(const void *, const void *)); 68posix_tnode * 69 tfind(const void *, posix_tnode * const *, 70 int (*)(const void *, const void *)); 71posix_tnode * 72 tsearch(const void *, posix_tnode **, 73 int (*)(const void *, const void *)); 74void twalk(const posix_tnode *, void (*)(const posix_tnode *, VISIT, int)); 75 76#if __BSD_VISIBLE 77int hcreate_r(size_t, struct hsearch_data *); 78void hdestroy_r(struct hsearch_data *); 79int hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *); 80#endif 81 82__END_DECLS 83 84#endif /* !_SEARCH_H_ */ 85