ucx/avl.h

changeset 243
2e74828c5e94
parent 225
a1a068c2c4ef
child 245
db732f8c083a
equal deleted inserted replaced
242:a3597d704421 243:2e74828c5e94
162 * @return the value (or <code>NULL</code>, if the key is not present) 162 * @return the value (or <code>NULL</code>, if the key is not present)
163 */ 163 */
164 void *ucx_avl_get(UcxAVLTree *tree, intptr_t key); 164 void *ucx_avl_get(UcxAVLTree *tree, intptr_t key);
165 165
166 /** 166 /**
167 * A mode for #ucx_avl_find_node() with the same behavior as
168 * #ucx_avl_get_node().
169 */
170 #define UCX_AVL_FIND_EXACT 0
171 /**
172 * A mode for #ucx_avl_find_node() finding the node whose key is at least
173 * as large as the specified key.
174 */
175 #define UCX_AVL_FIND_LOWER_BOUNDED 1
176 /**
177 * A mode for #ucx_avl_find_node() finding the node whose key is at most
178 * as large as the specified key.
179 */
180 #define UCX_AVL_FIND_UPPER_BOUNDED 2
181 /**
182 * A mode for #ucx_avl_find_node() finding the node with a key that is as close
183 * to the specified key as possible. If the key is present, the behavior is
184 * like #ucx_avl_get_node(). This mode only returns <code>NULL</code> on
185 * empty trees.
186 */
187 #define UCX_AVL_FIND_CLOSEST 3
188
189 /**
190 * Finds a node within the tree. The following modes are supported:
191 * <ul>
192 * <li>#UCX_AVL_FIND_EXACT: the same behavior as #ucx_avl_get_node()</li>
193 * <li>#UCX_AVL_FIND_LOWER_BOUNDED: finds the node whose key is at least
194 * as large as the specified key</li>
195 * <li>#UCX_AVL_FIND_UPPER_BOUNDED: finds the node whose key is at most
196 * as large as the specified key</li>
197 * <li>#UCX_AVL_FIND_CLOSEST: finds the node with a key that is as close to
198 * the specified key as possible. If the key is present, the behavior is
199 * like #ucx_avl_get_node(). This mode only returns <code>NULL</code> on
200 * empty trees.</li>
201 * </ul>
202 *
203 * The distance function provided MUST agree with the compare function of
204 * the AVL tree.
205 *
206 * @param tree the UcxAVLTree
207 * @param key the key
208 * @param dfnc the distance function
209 * @param mode the find mode
210 * @return the node (or <code>NULL</code>, if no node can be found)
211 */
212 UcxAVLNode *ucx_avl_find_node(UcxAVLTree *tree, intptr_t key,
213 distance_func dfnc, int mode);
214
215 /**
216 * Finds a value within the tree.
217 * See #ucx_avl_find_node() for details.
218 *
219 * @param tree the UcxAVLTree
220 * @param key the key
221 * @param dfnc the distance function
222 * @param mode the find mode
223 * @return the value (or <code>NULL</code>, if no value can be found)
224 */
225 void *ucx_avl_find(UcxAVLTree *tree, intptr_t key,
226 distance_func dfnc, int mode);
227
228 /**
167 * Puts a key/value pair into the tree. 229 * Puts a key/value pair into the tree.
168 * 230 *
169 * Attention: use this function only, if a possible old value does not need 231 * Attention: use this function only, if a possible old value does not need
170 * to be preserved. 232 * to be preserved.
171 * 233 *
194 /** 256 /**
195 * Removes a node from the AVL tree. 257 * Removes a node from the AVL tree.
196 * 258 *
197 * Note: the specified node is logically removed. The tree implementation 259 * Note: the specified node is logically removed. The tree implementation
198 * decides which memory area is freed. In most cases the here provided node 260 * decides which memory area is freed. In most cases the here provided node
199 * is freed, so it's further use is generally undefined. 261 * is freed, so its further use is generally undefined.
200 * 262 *
201 * @param tree the UcxAVLTree 263 * @param tree the UcxAVLTree
202 * @param node the node to remove 264 * @param node the node to remove
203 * @return zero, if and only if an element has been removed 265 * @return zero, if and only if an element has been removed
204 */ 266 */

mercurial