X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgl_oset.h;h=5134065e5e2061267026389c711e988984501cf2;hb=4779b635ef35c7b0bc4044fcb5bc746d06f158c4;hp=42f46ecbc1a4014eb78a69560b6fe10c9f75347e;hpb=441aa3044f43e5572f58c354f01e6bc070acd5c7;p=gnulib.git diff --git a/lib/gl_oset.h b/lib/gl_oset.h index 42f46ecbc..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 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,13 +93,20 @@ 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. */ +/* 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); +/* 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, + gl_setelement_dispose_fn dispose_fn); /* Return the current number of elements in an ordered set. */ extern size_t gl_oset_size (gl_oset_t set); @@ -111,8 +126,15 @@ extern bool gl_oset_search_atleast (gl_oset_t set, const void **eltp); /* Add an element to an ordered set. - Return true if it was not already in the set and added. */ + Return true if it was not already in the set and added, false otherwise. */ +/* declared in gl_xoset.h */ extern bool gl_oset_add (gl_oset_t set, const void *elt); +/* 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) + __attribute__ ((__warn_unused_result__)) +#endif + ; /* Remove an element from an ordered set. Return true if it was found and removed. */ @@ -122,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. */ @@ -141,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. */ @@ -154,20 +180,22 @@ 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 { /* gl_oset_t functions. */ - gl_oset_t (*create_empty) (gl_oset_implementation_t implementation, - gl_setelement_compar_fn compar_fn, - gl_setelement_dispose_fn dispose_fn); + gl_oset_t (*nx_create_empty) (gl_oset_implementation_t implementation, + gl_setelement_compar_fn compar_fn, + gl_setelement_dispose_fn dispose_fn); size_t (*size) (gl_oset_t set); bool (*search) (gl_oset_t set, const void *elt); bool (*search_atleast) (gl_oset_t set, gl_setelement_threshold_fn threshold_fn, const void *threshold, const void **eltp); - bool (*add) (gl_oset_t set, const void *elt); + int (*nx_add) (gl_oset_t set, const void *elt); bool (*remove_elt) (gl_oset_t set, const void *elt); void (*oset_free) (gl_oset_t set); /* gl_oset_iterator_t functions. */ @@ -183,37 +211,31 @@ 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_create_empty gl_oset_create_empty_inline -static inline gl_oset_t -gl_oset_create_empty (gl_oset_implementation_t implementation, - gl_setelement_compar_fn compar_fn, - gl_setelement_dispose_fn dispose_fn) +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) { - return implementation->create_empty (implementation, compar_fn, dispose_fn); + return implementation->nx_create_empty (implementation, compar_fn, + 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) @@ -222,53 +244,50 @@ gl_oset_search_atleast (gl_oset_t set, ->search_atleast (set, threshold_fn, threshold, eltp); } -# define gl_oset_add gl_oset_add_inline -static inline bool -gl_oset_add (gl_oset_t set, const void *elt) +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->add (set, 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 */