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