* The abstract type of a set.
*
* This sets stores copies of its elements, so there is no need
- * to store the elements after there were added to a set.
+ * to store the elements after they were added to a set.
*
* @see pset
*/
typedef struct set_entry {
unsigned hash; /**< the hash value of the element */
size_t size; /**< the size of the element */
- int dptr[1]; /**< the element itself, data copied in must not need more
- alignment than this */
+ int dptr[1]; /**< the element itself, data copied in must not need more
+ alignment than this */
} set_entry;
/**
* 0 if the elements are identically, non-zero else
*
* @note
- * Although it is possible to define different meanings for equality of two
- * elements of a sets, they can be only equal if there sizes are
- * equal. This is checked before the compare function is called.
+ * Although it is possible to define different meanings of equality
+ * of two elements of a set, they can be only equal if their sizes are
+ * are equal. This is checked before the compare function is called.
*/
typedef int (*set_cmp_fun) (const void *elt, const void *key, size_t size);
/**
* Creates a new set.
*
- * @param func the compare function of this set
- * @param slots number of slots
+ * @param func The compare function of this set.
+ * @param slots Initial number of collision chains. I.e., #slots
+ * different keys can be hashed without collisions.
*
* @returns
* created set
*/
set *new_set (set_cmp_fun func, int slots);
-/** Deletes a set and all elements of it. */
+/**
+ * Deletes a set and all elements of it.
+ */
void del_set (set *set);
+/**
+ * Returns the number of elements in a set.
+ *
+ * @param set the set
+ */
+int set_count (set *set);
+
/**
* Searches an element in a set.
*
* @return a pointer to the inserted element
*
* @note
- * It is not possible to insert on element more than once. If an element
+ * It is not possible to insert one element more than once. If an element
* that should be inserted is already in the set, this functions does
* nothing but returning its pointer.
*/
*/
set_entry *set_hinsert0 (set *set, const void *key, size_t size, unsigned hash);
-/** Returns the first element of a set. */
+/**
+ * Returns the first element of a set.
+ *
+ * @param set the set to iterate
+ *
+ * @return a pointer to the element or NULL if the set is empty
+ */
void *set_first (set *set);
-/** Returns the next element of a set. */
+/**
+ * Returns the next element of a set.
+ *
+ * @param set the set to iterate
+ *
+ * @return a pointer to the next element or NULL if the
+ * iteration is finished
+ */
void *set_next (set *set);
-/** Breaks the iteration of a set. Must be called before the next set_first() call */
+/**
+ * Breaks the iteration of a set. Must be called before
+ * the next set_first() call if the iteration was NOT
+ * finished.
+ *
+ * @param set the set
+ */
void set_break (set *set);
/* implementation specific */
#define SET_VRFY(set) (void)0
#ifdef STATS
-void set_stats (set *);
+/**
+ * Prints statistics on a set to stdout.
+ *
+ * @param set the set
+ */
+void set_stats (set *set);
#else
# define set_stats(s) ((void)0)
#endif
#ifdef DEBUG
-void set_describe (set *);
+/**
+ * Describe a set.
+ *
+ * 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 set the set
+ */
+void set_describe (set *set);
#endif