Index: fusl/include/search.h |
diff --git a/fusl/include/search.h b/fusl/include/search.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..02e407e3c2aba21b6fe4d015c6430c3155c3db69 |
--- /dev/null |
+++ b/fusl/include/search.h |
@@ -0,0 +1,63 @@ |
+#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 |