1 /*- 2 * Written by J.T. Conklin <jtc@netbsd.org> 3 * Public domain. 4 * 5 * $NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $ 6 * $FreeBSD: release/9.0.0/include/search.h 105250 2002-10-16 14:29:23Z robert $ 7 */ 8 9 #ifndef _SEARCH_H_ 10 #define _SEARCH_H_ 11 12 #include <sys/cdefs.h> 13 #include <sys/types.h> 14 15 typedef enum { 16 FIND, 17 ENTER 18 } ACTION; 19 20 typedef struct entry { 21 char* key; 22 void* data; 23 } ENTRY; 24 25 typedef enum { 26 preorder, 27 postorder, 28 endorder, 29 leaf 30 } VISIT; 31 32 #if defined(__USE_BSD) || defined(__USE_GNU) 33 struct hsearch_data { 34 struct __hsearch* __hsearch; 35 }; 36 #endif 37 38 __BEGIN_DECLS 39 40 void insque(void* __element, void* __previous) __INTRODUCED_IN(21); 41 void remque(void* __element) __INTRODUCED_IN(21); 42 43 int hcreate(size_t) __INTRODUCED_IN(28); 44 void hdestroy(void) __INTRODUCED_IN(28); 45 ENTRY* hsearch(ENTRY, ACTION) __INTRODUCED_IN(28); 46 47 #if defined(__USE_BSD) || defined(__USE_GNU) 48 int hcreate_r(size_t, struct hsearch_data*) __INTRODUCED_IN(28); 49 void hdestroy_r(struct hsearch_data*) __INTRODUCED_IN(28); 50 int hsearch_r(ENTRY, ACTION, ENTRY**, struct hsearch_data*) __INTRODUCED_IN(28); 51 #endif 52 53 void* lfind(const void* __key, const void* __base, size_t* __count, size_t __size, int (*__comparator)(const void*, const void*)) 54 __INTRODUCED_IN(21); 55 void* lsearch(const void* __key, void* __base, size_t* __count, size_t __size, int (*__comparator)(const void*, const void*)) 56 __INTRODUCED_IN(21); 57 58 void* tdelete(const void* __key, void** __root_ptr, int (*__comparator)(const void*, const void*)) __INTRODUCED_IN(16); 59 void tdestroy(void* __root, void (*__free_fn)(void*)) __INTRODUCED_IN(16); 60 void* tfind(const void* __key, void* const* __root_ptr, int (*__comparator)(const void*, const void*)) __INTRODUCED_IN(16); 61 void* tsearch(const void* __key, void** __root_ptr, int (*__comparator)(const void*, const void*)) __INTRODUCED_IN(16); 62 void twalk(const void* __root, void (*__visitor)(const void*, VISIT, int)) __INTRODUCED_IN(21); 63 64 __END_DECLS 65 66 #endif 67