cleanup comments in public headers
[libfirm] / include / libfirm / adt / cpset.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @date    16.03.2007
23  * @brief   a set of pointers with a custom compare function
24  * @author  Matthias Braun
25  * @version $Id$
26  */
27 #ifndef FIRM_ADT_CPSET_H
28 #define FIRM_ADT_CPSET_H
29
30 #include "../begin.h"
31
32 /**
33  * The type of a cpset compare function.
34  *
35  * @param p1   pointer to an element
36  * @param p2   pointer to another element
37  *
38  * @return  1 if the elements are identically, zero else
39  */
40 typedef int (*cpset_cmp_function) (const void *p1, const void *p2);
41
42 /**
43  * The type of a cpset hash function.
44  */
45 typedef unsigned (*cpset_hash_function) (const void *obj);
46
47 #define HashSet          cpset_t
48 #define HashSetIterator  cpset_iterator_t
49 #define HashSetEntry     cpset_hashset_entry_t
50 #define ValueType        void*
51 #define ADDITIONAL_DATA  cpset_cmp_function cmp_function; cpset_hash_function hash_function;
52 #include "hashset.h"
53 #undef ADDITIONAL_DATA
54 #undef ValueType
55 #undef HashSetEntry
56 #undef HashSetIterator
57 #undef HashSet
58
59 typedef struct cpset_t          cpset_t;
60 typedef struct cpset_iterator_t cpset_iterator_t;
61
62 /**
63  * Initializes a cpset
64  *
65  * @param cpset           Pointer to allocated space for the cpset
66  * @param hash_function   The hash function to use
67  * @param cmp_function    The compare function to use
68  */
69 FIRM_API void cpset_init(cpset_t *cpset, cpset_hash_function hash_function,
70                 cpset_cmp_function cmp_function);
71
72 /**
73  * Initializes a cpset
74  *
75  * @param cpset              Pointer to allocated space for the cpset
76  * @param hash_function      The hash function to use
77  * @param cmp_function       The compare function to use
78  * @param expected_elements  Number of elements expected in the cpset (roughly)
79  */
80 FIRM_API void cpset_init_size(cpset_t *cpset, cpset_hash_function hash_function,
81                      cpset_cmp_function cmp_function,
82                      size_t expected_elements);
83
84 /**
85  * Destroys a cpset and frees the memory allocated for hashtable. The memory of
86  * the cpset itself is not freed.
87  *
88  * @param cpset   Pointer to the cpset
89  */
90 FIRM_API void cpset_destroy(cpset_t *cpset);
91
92 /**
93  * Inserts an element into a cpset.
94  *
95  * @param cpset   Pointer to the cpset
96  * @param obj     Element to insert into the cpset
97  * @returns       The element itself or a pointer to an existing element
98  */
99 FIRM_API void* cpset_insert(cpset_t *cpset, void *obj);
100
101 /**
102  * Removes an element from a cpset. Does nothing if the cpset doesn't contain the
103  * element.
104  *
105  * @param cpset   Pointer to the cpset
106  * @param obj     Pointer to remove from the cpset
107  */
108 FIRM_API void cpset_remove(cpset_t *cpset, const void *obj);
109
110 /**
111  * Tests whether a cpset contains a pointer
112  *
113  * @param cpset   Pointer to the cpset
114  * @param obj     The pointer to find
115  * @returns       An equivalent object to @p obj or NULL
116  */
117 FIRM_API void *cpset_find(const cpset_t *cpset, const void *obj);
118
119 /**
120  * Returns the number of pointers contained in the cpset
121  *
122  * @param cpset   Pointer to the cpset
123  * @returns       Number of pointers contained in the cpset
124  */
125 FIRM_API size_t cpset_size(const cpset_t *cpset);
126
127 /**
128  * Initializes a cpset iterator. Sets the iterator before the first element in
129  * the cpset.
130  *
131  * @param iterator   Pointer to already allocated iterator memory
132  * @param cpset       Pointer to the cpset
133  */
134 FIRM_API void cpset_iterator_init(cpset_iterator_t *iterator, const cpset_t *cpset);
135
136 /**
137  * Advances the iterator and returns the current element or NULL if all elements
138  * in the cpset have been processed.
139  * @attention It is not allowed to use cpset_insert or cpset_remove while
140  *            iterating over a cpset.
141  *
142  * @param iterator  Pointer to the cpset iterator.
143  * @returns         Next element in the cpset or NULL
144  */
145 FIRM_API void *cpset_iterator_next(cpset_iterator_t *iterator);
146
147 /**
148  * Removed the element the iterator currently points to
149  *
150  * @param cpset     Pointer to the cpset
151  * @param iterator  Pointer to the cpset iterator.
152  */
153 FIRM_API void cpset_remove_iterator(cpset_t *cpset, const cpset_iterator_t *iterator);
154
155 #include "../end.h"
156
157 #endif