X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgl_oset.h;h=5134065e5e2061267026389c711e988984501cf2;hb=23eecb48e39afd0d267d64d40ba6bf97aa865e13;hp=b4bb8f38ede6aab25f189f553759bf4f150109ae;hpb=b2e2010c7c902235b5efb5bd3c6529f61b093aa4;p=gnulib.git diff --git a/lib/gl_oset.h b/lib/gl_oset.h index b4bb8f38e..5134065e5 100644 --- a/lib/gl_oset.h +++ b/lib/gl_oset.h @@ -1,5 +1,5 @@ /* Abstract ordered set data type. - Copyright (C) 2006-2007, 2009-2010 Free Software Foundation, Inc. + Copyright (C) 2006-2007, 2009-2013 Free Software Foundation, Inc. Written by Bruno Haible , 2006. This program is free software: you can redistribute it and/or modify @@ -21,6 +21,14 @@ #include #include +#ifndef _GL_INLINE_HEADER_BEGIN + #error "Please include config.h first." +#endif +_GL_INLINE_HEADER_BEGIN +#ifndef GL_OSET_INLINE +# define GL_OSET_INLINE _GL_INLINE +#endif + #ifdef __cplusplus extern "C" { #endif @@ -85,15 +93,16 @@ struct gl_oset_implementation; /* Type representing a ordered set datatype implementation. */ typedef const struct gl_oset_implementation * gl_oset_implementation_t; +#if 0 /* Unless otherwise specified, these are defined inline below. */ + /* Create an empty set. IMPLEMENTATION is one of GL_ARRAY_OSET, GL_AVLTREE_OSET, GL_RBTREE_OSET. COMPAR_FN is an element comparison function or NULL. DISPOSE_FN is an element disposal function or NULL. */ -#if 0 /* declared in gl_xoset.h */ +/* declared in gl_xoset.h */ extern gl_oset_t gl_oset_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn); -#endif /* Likewise. Return NULL upon out-of-memory. */ extern gl_oset_t gl_oset_nx_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, @@ -118,9 +127,8 @@ extern bool gl_oset_search_atleast (gl_oset_t set, /* Add an element to an ordered set. Return true if it was not already in the set and added, false otherwise. */ -#if 0 /* declared in gl_xoset.h */ +/* declared in gl_xoset.h */ extern bool gl_oset_add (gl_oset_t set, const void *elt); -#endif /* Likewise. Return -1 upon out-of-memory. */ extern int gl_oset_nx_add (gl_oset_t set, const void *elt) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) @@ -136,6 +144,8 @@ extern bool gl_oset_remove (gl_oset_t set, const void *elt); (But this call does not free the elements of the set.) */ extern void gl_oset_free (gl_oset_t set); +#endif /* End of inline and gl_xlist.h-defined functions. */ + /* --------------------- gl_oset_iterator_t Data Type --------------------- */ /* Functions for iterating through an ordered set. */ @@ -155,6 +165,8 @@ typedef struct size_t i; size_t j; } gl_oset_iterator_t; +#if 0 /* These are defined inline below. */ + /* Create an iterator traversing an ordered set. The set's contents must not be modified while the iterator is in use, except for removing the last returned element. */ @@ -168,6 +180,8 @@ extern bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, /* Free an iterator. */ extern void gl_oset_iterator_free (gl_oset_iterator_t *iterator); +#endif /* End of inline functions. */ + /* ------------------------ Implementation Details ------------------------ */ struct gl_oset_implementation @@ -197,14 +211,10 @@ struct gl_oset_impl_base gl_setelement_dispose_fn dispose_fn; }; -#if HAVE_INLINE - -/* Define all functions of this file as inline accesses to the - struct gl_oset_implementation. - Use #define to avoid a warning because of extern vs. static. */ +/* Define all functions of this file as accesses to the + struct gl_oset_implementation. */ -# define gl_oset_nx_create_empty gl_oset_nx_create_empty_inline -static inline gl_oset_t +GL_OSET_INLINE gl_oset_t gl_oset_nx_create_empty (gl_oset_implementation_t implementation, gl_setelement_compar_fn compar_fn, gl_setelement_dispose_fn dispose_fn) @@ -213,22 +223,19 @@ gl_oset_nx_create_empty (gl_oset_implementation_t implementation, dispose_fn); } -# define gl_oset_size gl_oset_size_inline -static inline size_t +GL_OSET_INLINE size_t gl_oset_size (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->size (set); } -# define gl_oset_search gl_oset_search_inline -static inline bool +GL_OSET_INLINE bool gl_oset_search (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable->search (set, elt); } -# define gl_oset_search_atleast gl_oset_search_atleast_inline -static inline bool +GL_OSET_INLINE bool gl_oset_search_atleast (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp) @@ -237,53 +244,50 @@ gl_oset_search_atleast (gl_oset_t set, ->search_atleast (set, threshold_fn, threshold, eltp); } -# define gl_oset_nx_add gl_oset_nx_add_inline -static inline int +GL_OSET_INLINE int +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + __attribute__ ((__warn_unused_result__)) +#endif gl_oset_nx_add (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable->nx_add (set, elt); } -# define gl_oset_remove gl_oset_remove_inline -static inline bool +GL_OSET_INLINE bool gl_oset_remove (gl_oset_t set, const void *elt) { return ((const struct gl_oset_impl_base *) set)->vtable ->remove_elt (set, elt); } -# define gl_oset_free gl_oset_free_inline -static inline void +GL_OSET_INLINE void gl_oset_free (gl_oset_t set) { ((const struct gl_oset_impl_base *) set)->vtable->oset_free (set); } -# define gl_oset_iterator gl_oset_iterator_inline -static inline gl_oset_iterator_t +GL_OSET_INLINE gl_oset_iterator_t gl_oset_iterator (gl_oset_t set) { return ((const struct gl_oset_impl_base *) set)->vtable->iterator (set); } -# define gl_oset_iterator_next gl_oset_iterator_next_inline -static inline bool +GL_OSET_INLINE bool gl_oset_iterator_next (gl_oset_iterator_t *iterator, const void **eltp) { return iterator->vtable->iterator_next (iterator, eltp); } -# define gl_oset_iterator_free gl_oset_iterator_free_inline -static inline void +GL_OSET_INLINE void gl_oset_iterator_free (gl_oset_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } -#endif - #ifdef __cplusplus } #endif +_GL_INLINE_HEADER_END + #endif /* _GL_OSET_H */