X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=include%2Flibfirm%2Fadt%2Fpset.h;h=11d740ca1393cf039deb9930166812942c7b09f0;hb=485c69395f430b4ccc7118d69f52d914ad2124d8;hp=851daa4e036e79f9a2579ef3a1d650f3411575da;hpb=1a3b7d363474ab544c13093a2f0b578718d37c7a;p=libfirm diff --git a/include/libfirm/adt/pset.h b/include/libfirm/adt/pset.h index 851daa4e0..11d740ca1 100644 --- a/include/libfirm/adt/pset.h +++ b/include/libfirm/adt/pset.h @@ -22,9 +22,6 @@ * @brief optimized version of set for sets containing only pointers * (deprecated) * @author Markus Armbruster - * @version $Id$ - * @note This code has been deprecated. Use pset_new or cpset for new - * code. */ #ifndef FIRM_ADT_PSET_H #define FIRM_ADT_PSET_H @@ -32,10 +29,17 @@ #include #include "hashptr.h" -#include "iterator.h" #include "../begin.h" +/** + * @ingroup adt + * @defgroup pset Pointer Set + * (Hash)sets containing pointers. + * @note This code has been deprecated. Use pset_new or cpset for new code. + * @{ + */ + /** * The default comparison function for pointers. * @param x A pointer. @@ -54,20 +58,23 @@ FIRM_API int pset_default_ptr_cmp(const void *x, const void *y); */ typedef struct pset pset; -/* - * Define some convenience macros using the predefined hash function. - */ -#define pset_insert_ptr(set,key) pset_insert(set, key, HASH_PTR(key)) -#define pset_hinsert_ptr(set,key) pset_hinsert(set, key, HASH_PTR(key)) -#define pset_remove_ptr(set,key) pset_remove(set, key, HASH_PTR(key)) -#define pset_find_ptr(set,key) pset_find(set, key, HASH_PTR(key)) +/** Inserts into pointer set with default hash function. */ +#define pset_insert_ptr(set,key) pset_insert(set, key, hash_ptr(key)) +/** Inserts into pointer set with default hash function and return entry */ +#define pset_hinsert_ptr(set,key) pset_hinsert(set, key, hash_ptr(key)) +/** Removes pointer from pointer set with default hash function */ +#define pset_remove_ptr(set,key) pset_remove(set, key, hash_ptr(key)) +/** Finds pointer in pointer set with default hash function */ +#define pset_find_ptr(set,key) pset_find(set, key, hash_ptr(key)) +/** Creates new pointer set with default compare function */ #define pset_new_ptr(slots) new_pset(pset_default_ptr_cmp, slots) +/** Creates new pointer set with default compare function and default size */ #define pset_new_ptr_default() pset_new_ptr(64) /** The entry of a pset, representing an element pointer in the set and its meta-information */ typedef struct { - unsigned hash; - void *dptr; + unsigned hash; /**< hash value of element */ + void *dptr; /**< pointer to element data */ } pset_entry; /** @@ -182,6 +189,18 @@ FIRM_API void *pset_remove(pset *pset, const void *key, unsigned hash); */ FIRM_API void *pset_first(pset *pset); +/** + * Returns the first element of a pset. + * This is a wrapper for pset_first(pmap *map); It allows to express the + * intended type of the set elements (instead of weakly typed void*). + * + * @param type destination type of the pointers in the set + * @param pset the pset to iterate + * + * @return a pointer to the element or NULL if the set is empty + */ +#define pset_first(type, pset) ((type*)pset_first((pset))) + /** * Returns the next element of a pset. * @@ -192,6 +211,19 @@ FIRM_API void *pset_first(pset *pset); */ FIRM_API void *pset_next(pset *pset); +/** + * Returns the next element of a pset. + * This is a wrapper for pset_next(pmap *map); It allows to express the + * intended type of the set elements (instead of weakly typed void*). + * + * @param type destination type of the pointers in the set + * @param pset the pset to iterate + * + * @return a pointer to the next element or NULL if the + * iteration is finished + */ +#define pset_next(type, pset) ((type*)pset_next((pset))) + /** * Breaks the iteration of a set. Must be called before * the next pset_first() call if the iteration was NOT @@ -205,9 +237,10 @@ FIRM_API void pset_break(pset *pset); * Iterates oven an pset. * * @param pset the pset + * @param type type of iterator variable * @param entry the iterator */ -#define foreach_pset(pset, type, entry) for (entry = (type)pset_first(pset); entry; entry = (type)pset_next(pset)) +#define foreach_pset(pset, type, entry) for (type *entry = pset_first(type, pset); entry; entry = pset_next(type, pset)) /** * Inserts all elements of the pointer set src into @@ -218,6 +251,8 @@ FIRM_API void pset_break(pset *pset); */ FIRM_API void pset_insert_pset_ptr(pset *target, pset *src); +/** @cond PRIVATE */ + #define new_pset(cmp, slots) ((new_pset) ((cmp), (slots))) #define pset_find(pset, key, hash) \ _pset_search ((pset), (key), (hash), _pset_find) @@ -226,40 +261,14 @@ FIRM_API void pset_insert_pset_ptr(pset *target, pset *src); #define pset_hinsert(pset, key, hash) \ ((pset_entry *)_pset_search ((pset), (key), (hash), _pset_hinsert)) -#ifdef STATS -/** - * Prints statistics on a set to stdout. - * - * @param pset the pset - */ -void pset_stats (pset *pset); -#else -# define pset_stats(s) ((void)0) -#endif - -#ifdef DEBUG -/** - * Describe a pset. - * - * Writes a description of a set to stdout. The description includes: - * - a header telling how many elements (nkey) and segments (nseg) are in use - * - for every collision chain the number of element with its hash values - * - * @param pset the pset - */ -void pset_describe (pset *pset); -#endif - -/* @@@ NYI */ -#define PSET_VRFY(pset) (void)0 - - -/* Private */ - typedef enum { _pset_find, _pset_insert, _pset_hinsert } _pset_action; FIRM_API void *_pset_search(pset *, const void *, unsigned, _pset_action); +/** @endcond */ + +/** @} */ + #include "../end.h" #endif