77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*-
 | 
						|
 * Written by J.T. Conklin <jtc@netbsd.org>
 | 
						|
 * Public domain.
 | 
						|
 *
 | 
						|
 *	$NetBSD: search.h,v 1.12 1999/02/22 10:34:28 christos Exp $
 | 
						|
 * $FreeBSD: src/include/search.h,v 1.10 2002/10/16 14:29:23 robert Exp $
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef _SEARCH_H_
 | 
						|
#define _SEARCH_H_
 | 
						|
 | 
						|
#include <sys/cdefs.h>
 | 
						|
#include <sys/types.h>
 | 
						|
 | 
						|
typedef	struct entry
 | 
						|
{
 | 
						|
  char *key;
 | 
						|
  void *data;
 | 
						|
} ENTRY;
 | 
						|
 | 
						|
typedef	enum
 | 
						|
{
 | 
						|
  FIND, ENTER
 | 
						|
} ACTION;
 | 
						|
 | 
						|
typedef	enum
 | 
						|
{
 | 
						|
  preorder,
 | 
						|
  postorder,
 | 
						|
  endorder,
 | 
						|
  leaf
 | 
						|
} VISIT;
 | 
						|
 | 
						|
#ifdef _SEARCH_PRIVATE
 | 
						|
typedef	struct node
 | 
						|
{
 | 
						|
  char *key;
 | 
						|
  struct node *llink, *rlink;
 | 
						|
} node_t;
 | 
						|
#endif
 | 
						|
 | 
						|
struct hsearch_data
 | 
						|
{
 | 
						|
  struct internal_head *htable;
 | 
						|
  size_t htablesize;
 | 
						|
};
 | 
						|
 | 
						|
struct qelem
 | 
						|
{
 | 
						|
  struct qelem *q_forw;
 | 
						|
  struct qelem *q_back;
 | 
						|
};
 | 
						|
 | 
						|
__BEGIN_DECLS
 | 
						|
int  hcreate (size_t);
 | 
						|
void  hdestroy (void);
 | 
						|
ENTRY *hsearch (ENTRY, ACTION);
 | 
						|
int hcreate_r (size_t, struct hsearch_data *);
 | 
						|
void hdestroy_r (struct hsearch_data *);
 | 
						|
int hsearch_r (ENTRY, ACTION, ENTRY **, struct hsearch_data *);
 | 
						|
void *tdelete (const void * __restrict, void ** __restrict,
 | 
						|
	       int (*) (const void *, const void *));
 | 
						|
void tdestroy (void *, void (*)(void *));
 | 
						|
void *tfind (const void *, void **,
 | 
						|
	     int (*) (const void *, const void *));
 | 
						|
void *tsearch (const void *, void **, int (*) (const void *, const void *));
 | 
						|
void  twalk (const void *, void (*) (const void *, VISIT, int));
 | 
						|
void *lfind (const void *, const void *, size_t *, size_t,
 | 
						|
	     int (*) (const void *, const void *));
 | 
						|
void *lsearch (const void *, void *, size_t *, size_t,
 | 
						|
	       int (*) (const void *, const void *));
 | 
						|
void insque (void *, void *);
 | 
						|
void remque (void *);
 | 
						|
__END_DECLS
 | 
						|
 | 
						|
#endif /* !_SEARCH_H_ */
 |