#ifndef _SEARCH_H
#define _SEARCH_H

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#define __NEED_size_t
#include <bits/alltypes.h>

typedef enum { FIND, ENTER } ACTION;
typedef enum { preorder, postorder, endorder, leaf } VISIT;

typedef struct entry {
  char* key;
  void* data;
} ENTRY;

int hcreate(size_t);
void hdestroy(void);
ENTRY* hsearch(ENTRY, ACTION);

#ifdef _GNU_SOURCE
struct hsearch_data {
  struct __tab* __tab;
  unsigned int __unused1;
  unsigned int __unused2;
};

int hcreate_r(size_t, struct hsearch_data*);
void hdestroy_r(struct hsearch_data*);
int hsearch_r(ENTRY, ACTION, ENTRY**, struct hsearch_data*);
#endif

void insque(void*, void*);
void remque(void*);

void* lsearch(const void*,
              void*,
              size_t*,
              size_t,
              int (*)(const void*, const void*));
void* lfind(const void*,
            const void*,
            size_t*,
            size_t,
            int (*)(const void*, const void*));

void* tdelete(const void* __restrict,
              void** __restrict,
              int (*)(const void*, const void*));
void* tfind(const void*, void* const*, int (*)(const void*, const void*));
void* tsearch(const void*, void**, int (*)(const void*, const void*));
void twalk(const void*, void (*)(const void*, VISIT, int));

#ifdef _GNU_SOURCE
struct qelem {
  struct qelem *q_forw, *q_back;
  char q_data[1];
};

void tdestroy(void*, void (*)(void*));
#endif

#ifdef __cplusplus
}
#endif

#endif
