/*
    AUTOMATICALLY GENERATED BY tspec 2.10
    API SUBSET: xpg3:search.h:srch_proto
*/

#ifndef __TDF_XPG3_SEARCH_H_SRCH_PROTO
#define __TDF_XPG3_SEARCH_H_SRCH_PROTO

#ifdef __cplusplus
extern "C" {
#endif

#pragma TenDRA declaration block subset__xpg3__search begin

#ifndef __TDF_ANSI_STDDEF_H_SIZE_T
#pragma extend interface "../../shared/ansi.api/size_t.h"
#endif /* __TDF_ANSI_STDDEF_H_SIZE_T */
#pragma token STRUCT TAG entry # xpg3.search.entry
#pragma token MEMBER char * : struct entry : key # xpg3.search.entry.key
typedef struct entry ENTRY;
#ifndef __BUILDING_LIBS
typedef enum {
    FIND,
    ENTER
} ACTION;
#else /* __BUILDING_LIBS */
#pragma token VARIETY ACTION # xpg3.search.ACTION
#pragma promote ACTION : ACTION
#pragma interface ACTION
#endif /* __BUILDING_LIBS */
#ifndef __BUILDING_LIBS
typedef enum {
    preorder,
    postorder,
    endorder,
    leaf
} VISIT;
#else /* __BUILDING_LIBS */
#pragma token VARIETY VISIT # xpg3.search.VISIT
#pragma promote VISIT : VISIT
#pragma interface VISIT
#endif /* __BUILDING_LIBS */
#pragma token FUNC void (void) : hdestroy # xpg3.search.hdestroy
#pragma token FUNC ENTRY * (ENTRY, ACTION) : hsearch # xpg3.search.hsearch
#pragma token FUNC void * (const void *, void **, int (*) (const void *, const void *)) : tsearch # xpg3.search.tsearch
#pragma token FUNC void * (const void *, void **, int (*) (const void *, const void *)) : tdelete # xpg3.search.tdelete
#pragma token FUNC void * (const void *, void * const *, int (*) (const void *, const void *)) : tfind # xpg3.search.tfind
#pragma token FUNC void * (const void *, const void *, size_t *, size_t, int (*) (const void *, const void *)) : lfind # xpg3.search.lfind
#pragma token FUNC void * (const void *, void *, size_t *, size_t, int (*) (const void *, const void *)) : lsearch # xpg3.search.lsearch

#pragma interface TAG entry TAG entry.key hdestroy hsearch tsearch tdelete
#pragma interface tfind lfind lsearch

#pragma TenDRA declaration block end

#ifdef __cplusplus
}
#endif

#endif /* __TDF_XPG3_SEARCH_H_SRCH_PROTO */
