1104399Smike/*- 262321Salfred * Written by J.T. Conklin <jtc@netbsd.org> 362321Salfred * Public domain. 4104399Smike * 5104399Smike * $NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $ 6104399Smike * $FreeBSD: stable/10/include/search.h 308091 2016-10-29 15:04:24Z ed $ 762321Salfred */ 862321Salfred 962321Salfred#ifndef _SEARCH_H_ 1062321Salfred#define _SEARCH_H_ 1162321Salfred 1262321Salfred#include <sys/cdefs.h> 13102227Smike#include <sys/_types.h> 1462321Salfred 15102227Smike#ifndef _SIZE_T_DECLARED 16102227Smiketypedef __size_t size_t; 17102227Smike#define _SIZE_T_DECLARED 1862321Salfred#endif 1962321Salfred 20104399Smiketypedef struct entry { 21104399Smike char *key; 22104399Smike void *data; 2362321Salfred} ENTRY; 2462321Salfred 25104399Smiketypedef enum { 2662321Salfred FIND, ENTER 2762321Salfred} ACTION; 2862321Salfred 29104399Smiketypedef enum { 3062321Salfred preorder, 3162321Salfred postorder, 3262321Salfred endorder, 3362321Salfred leaf 3462321Salfred} VISIT; 3562321Salfred 3662321Salfred#ifdef _SEARCH_PRIVATE 37104399Smiketypedef struct node { 3862321Salfred char *key; 3962321Salfred struct node *llink, *rlink; 4062321Salfred} node_t; 41105245Srobert 42105245Srobertstruct que_elem { 43105245Srobert struct que_elem *next; 44105245Srobert struct que_elem *prev; 45105245Srobert}; 46308091Sed#else 47308091Sedtypedef void posix_tnode; 4862321Salfred#endif 4962321Salfred 5062321Salfred__BEGIN_DECLS 5193032Simpint hcreate(size_t); 5293032Simpvoid hdestroy(void); 5393032SimpENTRY *hsearch(ENTRY, ACTION); 54105245Srobertvoid insque(void *, void *); 55105250Srobertvoid *lfind(const void *, const void *, size_t *, size_t, 56105250Srobert int (*)(const void *, const void *)); 57105250Srobertvoid *lsearch(const void *, void *, size_t *, size_t, 58105250Srobert int (*)(const void *, const void *)); 59105245Srobertvoid remque(void *); 60103012Stjrvoid *tdelete(const void * __restrict, void ** __restrict, 61101882Srobert int (*)(const void *, const void *)); 62104399Smikevoid *tfind(const void *, void * const *, 63104399Smike int (*)(const void *, const void *)); 6493032Simpvoid *tsearch(const void *, void **, int (*)(const void *, const void *)); 65104399Smikevoid twalk(const void *, void (*)(const void *, VISIT, int)); 6662321Salfred__END_DECLS 6762321Salfred 6862321Salfred#endif /* !_SEARCH_H_ */ 69