• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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