/*-
* 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 : release / 9 . 0 . 0 / include / search . h 105250 2002 - 10 - 16 14 : 29 : 23 Z robert $
*/
#pragma once
/**
* @ file search . h
* @ brief Queues , hash tables , trees , and linear array searches .
*/
#include <sys/cdefs.h>
#include <sys/types.h>
__BEGIN_DECLS
/** See hsearch()/hsearch_r(). */
typedef enum {
FIND,
ENTER
} ACTION;
/** See hsearch()/hsearch_r(). */
typedef struct entry {
/** The string key. */
char * _Nullable key;
/** The associated data. */
void * _Nullable data;
} ENTRY;
/**
* Constants given to the twalk ( ) visitor .
* Note that the constant names are misleading .
*/
typedef enum {
/**
* If this is the first visit to a non - leaf node .
* Use this for * preorder * traversal .
*/
preorder,
/**
* If this is the second visit to a non - leaf node .
* Use this for * inorder * traversal .
*/
postorder,
/**
* If this is the third visit to a non - leaf node .
* Use this for * postorder * traversal .
*/
endorder,
/** If this is the first and only visit to a leaf node. */
leaf
} VISIT;
#if defined (__USE_BSD) || defined (__USE_GNU)
/** The hash table type for hcreate_r()/hdestroy_r()/hsearch_r(). */
struct hsearch_data {
void * _Nullable __opaque;
};
#endif
/**
* [ insque ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/insque.3.html) inserts
* an item in a queue ( an intrusive doubly - linked list ) .
*/
void insque(void * _Nonnull __element, void * _Nullable __previous);
/**
* [ remque ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/remque.3.html) removes
* an item from a queue ( an intrusive doubly - linked list ) .
*/
void remque(void * _Nonnull __element);
#if __BIONIC_AVAILABILITY_GUARD(28 )
/**
* [ hcreate ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/hcreate.3.html)
* initializes the global hash table , with space for at least ` _ _ n ` elements .
*
* See hcreate_r ( ) if you need more than one hash table .
*
* Returns * non - zero * on success and returns 0 and sets ` errno ` on failure .
*
* Available since API level 28 .
*/
int hcreate(size_t __n) __INTRODUCED_IN(28 );
#endif
#if __BIONIC_AVAILABILITY_GUARD(28 )
/**
* [ hdestroy ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/hdestroy.3.html) destroys
* the global hash table .
*
* See hdestroy_r ( ) if you need more than one hash table .
*
* Available since API level 28 .
*/
void hdestroy(void ) __INTRODUCED_IN(28 );
#endif
#if __BIONIC_AVAILABILITY_GUARD(28 )
/**
* [ hsearch ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/hsearch.3.html) finds or
* inserts ` _ _ entry ` in the global hash table , based on ` _ _ action ` .
*
* See hsearch_r ( ) if you need more than one hash table .
*
* Returns a pointer to the entry on success , and returns NULL and sets
* ` errno ` on failure .
*
* Available since API level 28 .
*/
ENTRY* _Nullable hsearch(ENTRY __entry, ACTION __action) __INTRODUCED_IN(28 );
#endif
#if (defined (__USE_BSD) || defined (__USE_GNU)) && __BIONIC_AVAILABILITY_GUARD(28 )
/**
* [ hcreate_r ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/hcreate_r.3.html)
* initializes a hash table ` _ _ table ` with space for at least ` _ _ n ` elements .
*
* Returns * non - zero * on success and returns 0 and sets ` errno ` on failure .
*
* Available since API level 28 when compiling with ` _ BSD_SOURCE ` or ` _ GNU_SOURCE ` .
*/
int hcreate_r(size_t __n, struct hsearch_data* _Nonnull __table) __INTRODUCED_IN(28 );
#endif
#if (defined (__USE_BSD) || defined (__USE_GNU)) && __BIONIC_AVAILABILITY_GUARD(28 )
/**
* [ hdestroy_r ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/hdestroy_r.3.html) destroys
* the hash table ` _ _ table ` .
*
* Available since API level 28 when compiling with ` _ BSD_SOURCE ` or ` _ GNU_SOURCE ` .
*/
void hdestroy_r(struct hsearch_data* _Nonnull __table) __INTRODUCED_IN(28 );
#endif
#if (defined (__USE_BSD) || defined (__USE_GNU)) && __BIONIC_AVAILABILITY_GUARD(28 )
/**
* [ hsearch_r ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/hsearch_r.3.html) finds or
* inserts ` _ _ entry ` in the hash table ` _ _ table ` , based on ` _ _ action ` .
*
* Returns * non - zero * on success and returns 0 and sets ` errno ` on failure .
* A pointer to the entry is returned in ` * _ _ result ` .
*
* Available since API level 28 when compiling with ` _ BSD_SOURCE ` or ` _ GNU_SOURCE ` .
*/
int hsearch_r(ENTRY __entry, ACTION __action, ENTRY* _Nullable * _Nonnull __result, struct hsearch_data* _Nonnull __table) __INTRODUCED_IN(28 );
#endif
/**
* [ lfind ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/lfind.3.html) brute-force
* searches the unsorted array ` _ _ array ` ( of ` _ _ count ` items each of size ` _ _ size ` )
* for ` _ _ key ` , using ` _ _ comparator ` .
*
* See bsearch ( ) if you have a sorted array .
*
* Returns a pointer to the matching element on success , or NULL on failure .
*/
void * _Nullable lfind(const void * _Nonnull __key, const void * _Nonnull __array, size_t* _Nonnull __count, size_t __size, int (* _Nonnull __comparator)(const void * _Nonnull, const void * _Nonnull));
/**
* [ lsearch ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/lsearch.3.html) brute-force
* searches the unsorted array ` _ _ array ` ( of ` _ _ count ` items each of size ` _ _ size ` )
* for ` _ _ key ` , using ` _ _ comparator ` .
*
* Unlike lfind ( ) , on failure lsearch ( ) will * insert * ` _ _ key ` at the end of
* ` _ _ array ` and increment ` * _ _ count ` .
*
* Returns a pointer to the matching element on success , or to the newly - added
* element on failure .
*/
void * _Nonnull lsearch(const void * _Nonnull __key, void * _Nonnull __array, size_t* _Nonnull __count, size_t __size, int (* _Nonnull __comparator)(const void * _Nonnull, const void * _Nonnull));
/**
* [ tdelete ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/tdelete.3.html) searches
* for and removes an element in the tree ` * _ _ root_ptr ` . The search is performed
* using ` _ _ comparator ` .
*
* Returns a pointer to the parent of the deleted node , or NULL on failure .
*/
void * _Nullable tdelete(const void * _Nonnull __key, void * _Nullable * _Nullable __root_ptr, int (* _Nonnull __comparator)(const void * _Nonnull, const void * _Nonnull));
/**
* [ tdestroy ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/tdestroy.3.html) destroys
* the hash table ` _ _ root ` using ` _ _ free_fn ` on each node .
*/
void tdestroy(void * _Nullable __root, void (* _Nullable __free_fn)(void * _Nullable));
/**
* [ tfind ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/tfind.3.html) searches
* for an element in the tree ` * _ _ root_ptr ` . The search is performed using
* ` _ _ comparator ` .
*
* Returns a pointer to the matching node , or NULL on failure .
*/
void * _Nullable tfind(const void * _Nonnull __key, void * _Nullable const * _Nullable __root_ptr, int (* _Nonnull __comparator)(const void * _Nonnull, const void * _Nonnull));
/**
* [ tsearch ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/tsearch.3.html) searches
* for an element in the tree ` * _ _ root_ptr ` . The search is performed using
* ` _ _ comparator ` .
*
* Unlike tfind ( ) , on failure tsearch ( ) will * insert * ` _ _ key ` into the tree .
*
* Returns a pointer to the matching node , or to the newly - added node .
*/
void * _Nullable tsearch(const void * _Nonnull __key, void * _Nullable * _Nullable __root_ptr, int (* _Nonnull __comparator)(const void * _Nonnull, const void * _Nonnull));
/**
* [ twalk ( 3 ) ] ( https : //man7.org/linux/man-pages/man3/twalk.3.html) calls
* ` _ _ visitor ` on every node in the tree .
*/
void twalk(const void * _Nullable __root, void (* _Nullable __visitor)(const void * _Nullable, VISIT, int ));
__END_DECLS
Messung V0.5 in Prozent C=88 H=93 G=90
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-28)
¤
*© Formatika GbR, Deutschland