X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsearch.in.h;h=c53ba0168ab31aa4f15155aa4a46094e1e8375bd;hb=cd56634a4a8179fd5a4419fbb3e27211b042ab1c;hp=aa9e994b4776ba73e3f466d2cf8f82ad0eec371b;hpb=441aa3044f43e5572f58c354f01e6bc070acd5c7;p=gnulib.git diff --git a/lib/search.in.h b/lib/search.in.h index aa9e994b4..c53ba0168 100644 --- a/lib/search.in.h +++ b/lib/search.in.h @@ -1,6 +1,6 @@ /* A GNU-like . - Copyright (C) 2007-2008 Free Software Foundation, Inc. + Copyright (C) 2007-2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,42 +15,45 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef _GL_SEARCH_H +#ifndef _@GUARD_PREFIX@_SEARCH_H + +#if __GNUC__ >= 3 +@PRAGMA_SYSTEM_HEADER@ +#endif +@PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SEARCH_H@ -# if __GNUC__ >= 3 -@PRAGMA_SYSTEM_HEADER@ -# endif # @INCLUDE_NEXT@ @NEXT_SEARCH_H@ #endif -#ifndef _GL_SEARCH_H -#define _GL_SEARCH_H +#ifndef _@GUARD_PREFIX@_SEARCH_H +#define _@GUARD_PREFIX@_SEARCH_H -/* The definition of GL_LINK_WARNING is copied here. */ +/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ +/* The definition of _GL_ARG_NONNULL is copied here. */ -#ifdef __cplusplus -extern "C" { -#endif +/* The definition of _GL_WARN_ON_USE is copied here. */ #if @GNULIB_TSEARCH@ # if @REPLACE_TSEARCH@ -# define tsearch rpl_tsearch -# define tfind rpl_tfind -# define tdelete rpl_tdelete -# define twalk rpl_twalk +# if !(defined __cplusplus && defined GNULIB_NAMESPACE) +# define tsearch rpl_tsearch +# define tfind rpl_tfind +# define tdelete rpl_tdelete +# define twalk rpl_twalk +# endif # endif -# if !@HAVE_TSEARCH@ || @REPLACE_TSEARCH@ /* See , for details. */ -# if !@HAVE_TSEARCH@ +# if !@HAVE_TSEARCH@ +# if !GNULIB_defined_search_types typedef enum { preorder, @@ -59,24 +62,94 @@ typedef enum leaf } VISIT; +# define GNULIB_defined_search_types 1 # endif +# endif + +# ifdef __cplusplus +extern "C" { +# endif +# if !GNULIB_defined_search_fn_types +typedef int (*_gl_search_compar_fn) (const void *, const void *); +typedef void (*_gl_search_action_fn) (const void *, VISIT, int); +# define GNULIB_defined_search_fn_types 1 +# endif +# ifdef __cplusplus +} +# endif /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, a new element equal to KEY is inserted in the tree and is returned. */ -extern void * tsearch (const void *key, void **vrootp, - int (*compar) (const void *, const void *)); +# if @REPLACE_TSEARCH@ +_GL_FUNCDECL_RPL (tsearch, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (tsearch, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar)); +# else +# if !@HAVE_TSEARCH@ +_GL_FUNCDECL_SYS (tsearch, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (tsearch, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar)); +# endif +_GL_CXXALIASWARN (tsearch); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, NULL is returned. */ -extern void * tfind (const void *key, void *const *vrootp, - int (*compar) (const void *, const void *)); +# if @REPLACE_TSEARCH@ +_GL_FUNCDECL_RPL (tfind, void *, + (const void *key, void *const *vrootp, + _gl_search_compar_fn compar) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (tfind, void *, + (const void *key, void *const *vrootp, + _gl_search_compar_fn compar)); +# else +# if !@HAVE_TSEARCH@ +_GL_FUNCDECL_SYS (tfind, void *, + (const void *key, void *const *vrootp, + _gl_search_compar_fn compar) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +/* Need to cast, because on Cygwin 1.5.x systems, the second parameter is + void **vrootp. */ +_GL_CXXALIAS_SYS_CAST (tfind, void *, + (const void *key, void *const *vrootp, + _gl_search_compar_fn compar)); +# endif +_GL_CXXALIASWARN (tfind); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is removed from the tree, and its parent node is returned. Otherwise, NULL is returned. */ -extern void * tdelete (const void *key, void **vrootp, - int (*compar) (const void *, const void *)); +# if @REPLACE_TSEARCH@ +_GL_FUNCDECL_RPL (tdelete, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar) + _GL_ARG_NONNULL ((1, 2, 3))); +_GL_CXXALIAS_RPL (tdelete, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar)); +# else +# if !@HAVE_TSEARCH@ +_GL_FUNCDECL_SYS (tdelete, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar) + _GL_ARG_NONNULL ((1, 2, 3))); +# endif +_GL_CXXALIAS_SYS (tdelete, void *, + (const void *key, void **vrootp, + _gl_search_compar_fn compar)); +# endif +_GL_CXXALIASWARN (tdelete); /* Perform a depth-first, left-to-right traversal of the tree VROOT. The ACTION function is called: @@ -85,41 +158,50 @@ extern void * tdelete (const void *key, void **vrootp, and after the right subtree traversal, - for leaf nodes: once. The arguments passed to ACTION are: - 1. the node; it can be casted to a 'const void * const *', i.e. into a + 1. the node; it can be cast to a 'const void * const *', i.e. into a pointer to the key, 2. an indicator which visit of the node this is, 3. the level of the node in the tree (0 for the root). */ -extern void twalk (const void *vroot, - void (*action) (const void *, VISIT, int)); - +# if @REPLACE_TSEARCH@ +_GL_FUNCDECL_RPL (twalk, void, + (const void *vroot, _gl_search_action_fn action) + _GL_ARG_NONNULL ((2))); +_GL_CXXALIAS_RPL (twalk, void, + (const void *vroot, _gl_search_action_fn action)); +# else +# if !@HAVE_TSEARCH@ +_GL_FUNCDECL_SYS (twalk, void, + (const void *vroot, _gl_search_action_fn action) + _GL_ARG_NONNULL ((2))); +# endif +_GL_CXXALIAS_SYS (twalk, void, + (const void *vroot, _gl_search_action_fn action)); # endif +_GL_CXXALIASWARN (twalk); + #elif defined GNULIB_POSIXCHECK # undef tsearch -# define tsearch(k,v,c) \ - (GL_LINK_WARNING ("tsearch is unportable - " \ - "use gnulib module tsearch for portability"), \ - tsearch (k, v, c)) +# if HAVE_RAW_DECL_TSEARCH +_GL_WARN_ON_USE (tsearch, "tsearch is unportable - " + "use gnulib module tsearch for portability"); +# endif # undef tfind -# define tfind(k,v,c) \ - (GL_LINK_WARNING ("tfind is unportable - " \ - "use gnulib module tsearch for portability"), \ - tfind (k, v, c)) +# if HAVE_RAW_DECL_TFIND +_GL_WARN_ON_USE (tfind, "tfind is unportable - " + "use gnulib module tsearch for portability"); +# endif # undef tdelete -# define tdelete(k,v,c) \ - (GL_LINK_WARNING ("tdelete is unportable - " \ - "use gnulib module tsearch for portability"), \ - tdelete (k, v, c)) +# if HAVE_RAW_DECL_TDELETE +_GL_WARN_ON_USE (tdelete, "tdelete is unportable - " + "use gnulib module tsearch for portability"); +# endif # undef twalk -# define twalk(v,a) \ - (GL_LINK_WARNING ("twalk is unportable - " \ - "use gnulib module tsearch for portability"), \ - twalk (v, a)) +# if HAVE_RAW_DECL_TWALK +_GL_WARN_ON_USE (twalk, "twalk is unportable - " + "use gnulib module tsearch for portability"); +# endif #endif -#ifdef __cplusplus -} -#endif - -#endif /* _GL_SEARCH_H */ -#endif /* _GL_SEARCH_H */ +#endif /* _@GUARD_PREFIX@_SEARCH_H */ +#endif /* _@GUARD_PREFIX@_SEARCH_H */