17777dab0Sopenharmony_ci#ifndef _SEARCH_H 27777dab0Sopenharmony_ci#define _SEARCH_H 37777dab0Sopenharmony_ci 47777dab0Sopenharmony_ci#ifdef __cplusplus 57777dab0Sopenharmony_ciextern "C" { 67777dab0Sopenharmony_ci#endif 77777dab0Sopenharmony_ci 87777dab0Sopenharmony_ci#include <features.h> 97777dab0Sopenharmony_ci 107777dab0Sopenharmony_ci#define __NEED_size_t 117777dab0Sopenharmony_ci#include <bits/alltypes.h> 127777dab0Sopenharmony_ci 137777dab0Sopenharmony_citypedef enum { FIND, ENTER } ACTION; 147777dab0Sopenharmony_citypedef enum { preorder, postorder, endorder, leaf } VISIT; 157777dab0Sopenharmony_ci 167777dab0Sopenharmony_citypedef struct entry { 177777dab0Sopenharmony_ci char *key; 187777dab0Sopenharmony_ci void *data; 197777dab0Sopenharmony_ci} ENTRY; 207777dab0Sopenharmony_ci 217777dab0Sopenharmony_ciint hcreate(size_t); 227777dab0Sopenharmony_civoid hdestroy(void); 237777dab0Sopenharmony_ciENTRY *hsearch(ENTRY, ACTION); 247777dab0Sopenharmony_ci 257777dab0Sopenharmony_ci#ifdef _GNU_SOURCE 267777dab0Sopenharmony_cistruct hsearch_data { 277777dab0Sopenharmony_ci struct __tab *__tab; 287777dab0Sopenharmony_ci unsigned int __unused1; 297777dab0Sopenharmony_ci unsigned int __unused2; 307777dab0Sopenharmony_ci}; 317777dab0Sopenharmony_ci 327777dab0Sopenharmony_ciint hcreate_r(size_t, struct hsearch_data *); 337777dab0Sopenharmony_civoid hdestroy_r(struct hsearch_data *); 347777dab0Sopenharmony_ciint hsearch_r(ENTRY, ACTION, ENTRY **, struct hsearch_data *); 357777dab0Sopenharmony_ci#endif 367777dab0Sopenharmony_ci 377777dab0Sopenharmony_civoid insque(void *, void *); 387777dab0Sopenharmony_civoid remque(void *); 397777dab0Sopenharmony_ci 407777dab0Sopenharmony_civoid *lsearch(const void *, void *, size_t *, size_t, 417777dab0Sopenharmony_ci int (*)(const void *, const void *)); 427777dab0Sopenharmony_civoid *lfind(const void *, const void *, size_t *, size_t, 437777dab0Sopenharmony_ci int (*)(const void *, const void *)); 447777dab0Sopenharmony_ci 457777dab0Sopenharmony_civoid *tdelete(const void *__restrict, void **__restrict, int(*)(const void *, const void *)); 467777dab0Sopenharmony_civoid *tfind(const void *, void *const *, int(*)(const void *, const void *)); 477777dab0Sopenharmony_civoid *tsearch(const void *, void **, int (*)(const void *, const void *)); 487777dab0Sopenharmony_civoid twalk(const void *, void (*)(const void *, VISIT, int)); 497777dab0Sopenharmony_ci 507777dab0Sopenharmony_ci#ifdef _GNU_SOURCE 517777dab0Sopenharmony_cistruct qelem { 527777dab0Sopenharmony_ci struct qelem *q_forw, *q_back; 537777dab0Sopenharmony_ci char q_data[1]; 547777dab0Sopenharmony_ci}; 557777dab0Sopenharmony_ci 567777dab0Sopenharmony_civoid tdestroy(void *, void (*)(void *)); 577777dab0Sopenharmony_ci#endif 587777dab0Sopenharmony_ci 597777dab0Sopenharmony_ci#ifdef __cplusplus 607777dab0Sopenharmony_ci} 617777dab0Sopenharmony_ci#endif 627777dab0Sopenharmony_ci 637777dab0Sopenharmony_ci#endif 64