diff options
Diffstat (limited to 'misc/search.h')
-rw-r--r-- | misc/search.h | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/misc/search.h b/misc/search.h deleted file mode 100644 index ae122eec69..0000000000 --- a/misc/search.h +++ /dev/null @@ -1,174 +0,0 @@ -/* Declarations for System V style searching functions. - Copyright (C) 1995-2017 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SEARCH_H -#define _SEARCH_H 1 - -#include <features.h> - -#define __need_size_t -#include <stddef.h> - -__BEGIN_DECLS - -#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED -/* Prototype structure for a linked-list data structure. - This is the type used by the `insque' and `remque' functions. */ - -# ifdef __USE_GNU -struct qelem - { - struct qelem *q_forw; - struct qelem *q_back; - char q_data[1]; - }; -# endif - - -/* Insert ELEM into a doubly-linked list, after PREV. */ -extern void insque (void *__elem, void *__prev) __THROW; - -/* Unlink ELEM from the doubly-linked list that it is in. */ -extern void remque (void *__elem) __THROW; -#endif - - -/* For use with hsearch(3). */ -#ifndef __COMPAR_FN_T -# define __COMPAR_FN_T -typedef int (*__compar_fn_t) (const void *, const void *); - -# ifdef __USE_GNU -typedef __compar_fn_t comparison_fn_t; -# endif -#endif - -/* Action which shall be performed in the call the hsearch. */ -typedef enum - { - FIND, - ENTER - } -ACTION; - -typedef struct entry - { - char *key; - void *data; - } -ENTRY; - -/* Opaque type for internal use. */ -struct _ENTRY; - -/* Family of hash table handling functions. The functions also - have reentrant counterparts ending with _r. The non-reentrant - functions all work on a signle internal hashing table. */ - -/* Search for entry matching ITEM.key in internal hash table. If - ACTION is `FIND' return found entry or signal error by returning - NULL. If ACTION is `ENTER' replace existing data (if any) with - ITEM.data. */ -extern ENTRY *hsearch (ENTRY __item, ACTION __action) __THROW; - -/* Create a new hashing table which will at most contain NEL elements. */ -extern int hcreate (size_t __nel) __THROW; - -/* Destroy current internal hashing table. */ -extern void hdestroy (void) __THROW; - -#ifdef __USE_GNU -/* Data type for reentrant functions. */ -struct hsearch_data - { - struct _ENTRY *table; - unsigned int size; - unsigned int filled; - }; - -/* Reentrant versions which can handle multiple hashing tables at the - same time. */ -extern int hsearch_r (ENTRY __item, ACTION __action, ENTRY **__retval, - struct hsearch_data *__htab) __THROW; -extern int hcreate_r (size_t __nel, struct hsearch_data *__htab) __THROW; -extern void hdestroy_r (struct hsearch_data *__htab) __THROW; -#endif - - -/* The tsearch routines are very interesting. They make many - assumptions about the compiler. It assumes that the first field - in node must be the "key" field, which points to the datum. - Everything depends on that. */ -/* For tsearch */ -typedef enum -{ - preorder, - postorder, - endorder, - leaf -} -VISIT; - -/* Search for an entry matching the given KEY in the tree pointed to - by *ROOTP and insert a new element if not found. */ -extern void *tsearch (const void *__key, void **__rootp, - __compar_fn_t __compar); - -/* Search for an entry matching the given KEY in the tree pointed to - by *ROOTP. If no matching entry is available return NULL. */ -extern void *tfind (const void *__key, void *const *__rootp, - __compar_fn_t __compar); - -/* Remove the element matching KEY from the tree pointed to by *ROOTP. */ -extern void *tdelete (const void *__restrict __key, - void **__restrict __rootp, - __compar_fn_t __compar); - -#ifndef __ACTION_FN_T -# define __ACTION_FN_T -typedef void (*__action_fn_t) (const void *__nodep, VISIT __value, - int __level); -#endif - -/* Walk through the whole tree and call the ACTION callback for every node - or leaf. */ -extern void twalk (const void *__root, __action_fn_t __action); - -#ifdef __USE_GNU -/* Callback type for function to free a tree node. If the keys are atomic - data this function should do nothing. */ -typedef void (*__free_fn_t) (void *__nodep); - -/* Destroy the whole tree, call FREEFCT for each node or leaf. */ -extern void tdestroy (void *__root, __free_fn_t __freefct); -#endif - - -/* Perform linear search for KEY by comparing by COMPAR in an array - [BASE,BASE+NMEMB*SIZE). */ -extern void *lfind (const void *__key, const void *__base, - size_t *__nmemb, size_t __size, __compar_fn_t __compar); - -/* Perform linear search for KEY by comparing by COMPAR function in - array [BASE,BASE+NMEMB*SIZE) and insert entry if not found. */ -extern void *lsearch (const void *__key, void *__base, - size_t *__nmemb, size_t __size, __compar_fn_t __compar); - -__END_DECLS - -#endif /* search.h */ |