Changeset d1e9321 in mainline
- Timestamp:
- 2007-07-29T13:46:34Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5dcee525
- Parents:
- 0d65d76
- Location:
- kernel/generic
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/adt/avl.h
r0d65d76 rd1e9321 33 33 */ 34 34 35 36 35 #ifndef KERN_AVLTREE_H_ 37 36 #define KERN_AVLTREE_H_ … … 47 46 * @param member Name of avltree attribute in the outer structure. 48 47 */ 49 #define avltree_get_instance(link, type, member) \ 50 ((type *)(((uint8_t *)(link)) - ((uint8_t *) &(((type *) NULL)->member)))) 51 48 #define avltree_get_instance(node, type, member) \ 49 ((type *)(((uint8_t *)(node)) - ((uint8_t *) &(((type *) NULL)->member)))) 52 50 53 51 typedef struct avltree_node avltree_node_t; 54 52 typedef struct avltree avltree_t; 55 53 54 typedef uint64_t avltree_key_t; 55 56 typedef void (* avltree_walker_t)(avltree_node_t *); 56 57 57 58 /** AVL tree node structure. */ … … 78 79 79 80 /** Node's key. */ 80 uint64_t key;81 avltree_key_t key; 81 82 82 83 /** … … 101 102 * with avltree_delete_min(). 102 103 */ 103 uint64_t base;104 avltree_key_t base; 104 105 }; 105 106 … … 109 110 * @param t AVL tree. 110 111 */ 111 static inline void avltree_create 112 static inline void avltree_create(avltree_t *t) 112 113 { 113 114 t->root = NULL; … … 129 130 130 131 extern avltree_node_t *avltree_find_min(avltree_t *t); 131 extern avltree_node_t *avltree_search(avltree_t *t, uint64_t key);132 extern avltree_node_t *avltree_search(avltree_t *t, avltree_key_t key); 132 133 extern void avltree_insert(avltree_t *t, avltree_node_t *newnode); 133 134 extern void avltree_delete(avltree_t *t, avltree_node_t *node); 134 135 extern bool avltree_delete_min(avltree_t *t); 136 extern void avltree_walk(avltree_t *t, avltree_walker_t walker); 135 137 136 138 #endif -
kernel/generic/src/adt/avl.c
r0d65d76 rd1e9321 53 53 #include <debug.h> 54 54 55 56 55 #define LEFT 0 57 56 #define RIGHT 1 58 57 59 60 58 /** Search for the first occurence of the given key in an AVL tree. 61 59 * … … 65 63 * @return Pointer to a node or NULL if there is no such key. 66 64 */ 67 avltree_node_t *avltree_search(avltree_t *t, uint64_t key)65 avltree_node_t *avltree_search(avltree_t *t, avltree_key_t key) 68 66 { 69 67 avltree_node_t *p; … … 121 119 avltree_node_t *top; 122 120 avltree_node_t **dpc; 123 uint64_t key;121 avltree_key_t key; 124 122 125 123 ASSERT(t); … … 708 706 } 709 707 708 static void _avltree_walk(avltree_node_t *node, avltree_walker_t walker) 709 { 710 if (node->lft) 711 _avltree_walk(node->lft, walker); 712 walker(node); 713 if (node->rgt) 714 _avltree_walk(node->rgt, walker); 715 } 716 717 /** Walk the AVL tree and apply the walker function on each visited node. 718 * 719 * @param t AVL tree to be walked. 720 * @param walker Walker function that will be called on each visited 721 * node. 722 */ 723 void avltree_walk(avltree_t *t, avltree_walker_t walker) 724 { 725 _avltree_walk(t->root, walker); 726 } 727 710 728 /** @} 711 729 */
Note:
See TracChangeset
for help on using the changeset viewer.