1#pragma once 2 3#ifdef __cplusplus 4extern "C" { 5#endif 6 7#include <features.h> 8 9#define __NEED_size_t 10#include <bits/alltypes.h> 11 12typedef enum { FIND, 13 ENTER } ACTION; 14typedef enum { preorder, 15 postorder, 16 endorder, 17 leaf } VISIT; 18 19typedef struct entry { 20 char* key; 21 void* data; 22} ENTRY; 23 24int hcreate(size_t); 25void hdestroy(void); 26ENTRY* hsearch(ENTRY, ACTION); 27 28#ifdef _GNU_SOURCE 29struct hsearch_data { 30 struct __tab* __tab; 31 unsigned int __unused1; 32 unsigned int __unused2; 33}; 34 35int hcreate_r(size_t, struct hsearch_data*); 36void hdestroy_r(struct hsearch_data*); 37int hsearch_r(ENTRY, ACTION, ENTRY**, struct hsearch_data*); 38#endif 39 40void insque(void*, void*); 41void remque(void*); 42 43void* lsearch(const void*, void*, size_t*, size_t, int (*)(const void*, const void*)); 44void* lfind(const void*, const void*, size_t*, size_t, int (*)(const void*, const void*)); 45 46void* tdelete(const void* __restrict, void** __restrict, int (*)(const void*, const void*)); 47void* tfind(const void*, void* const*, int (*)(const void*, const void*)); 48void* tsearch(const void*, void**, int (*)(const void*, const void*)); 49void twalk(const void*, void (*)(const void*, VISIT, int)); 50 51#ifdef _GNU_SOURCE 52struct qelem { 53 struct qelem *q_forw, *q_back; 54 char q_data[1]; 55}; 56 57void tdestroy(void*, void (*)(void*)); 58#endif 59 60#ifdef __cplusplus 61} 62#endif 63