1/*
2 * Copyright 2008-2012 Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _SEARCH_H_
6#define _SEARCH_H_
7
8
9#include <sys/types.h>
10
11
12typedef enum {
13	FIND,
14	ENTER
15} ACTION;
16
17typedef struct entry {
18	char *key;
19	void *data;
20} ENTRY;
21
22typedef enum {
23	preorder,
24	postorder,
25	endorder,
26	leaf
27} VISIT;
28
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34extern int hcreate(size_t elementCount);
35extern void hdestroy(void);
36extern ENTRY *hsearch(ENTRY iteam, ACTION action);
37extern void insque(void *element, void *insertAfter);
38extern void *lfind(const void *key, const void *base, size_t *_elementCount,
39	size_t width, int (*compareFunction)(const void *, const void *));
40extern void  *lsearch(const void *key, void *base, size_t *_elementCount,
41	size_t width, int (*compareFunction)(const void *, const void *));
42extern void remque(void *element);
43extern void *tdelete(const void *key, void **_root,
44	int (*compare)(const void *, const void *));
45extern void *tfind(const void *key, void *const *root,
46	int (*compare)(const void *, const void *));
47extern void *tsearch(const void *key, void **_root,
48	int (*compare)(const void *, const void *));
49extern void twalk(const void *root,
50	void (*action)(const void *, VISIT, int ));
51
52#ifdef _GNU_SOURCE
53extern void tdestroy(void *root, void (*free_key)(void *));
54#endif
55
56#ifdef __cplusplus
57}
58#endif
59
60#endif	/* _SEARCH_H_ */
61