Changeset d1e9321 in mainline


Ignore:
Timestamp:
2007-07-29T13:46:34Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5dcee525
Parents:
0d65d76
Message:

Add explicit type for an AVL tree key.
Add function to walk an AVL tree using a supplied walker.

Location:
kernel/generic
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/adt/avl.h

    r0d65d76 rd1e9321  
    3333 */
    3434
    35 
    3635#ifndef KERN_AVLTREE_H_
    3736#define KERN_AVLTREE_H_
     
    4746 * @param member Name of avltree attribute in the outer structure.
    4847 */
    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))))
    5250
    5351typedef struct avltree_node avltree_node_t;
    5452typedef struct avltree avltree_t;
    5553
     54typedef uint64_t avltree_key_t;
     55
     56typedef void (* avltree_walker_t)(avltree_node_t *);
    5657
    5758/** AVL tree node structure. */
     
    7879       
    7980        /** Node's key. */
    80         uint64_t key;
     81        avltree_key_t key;
    8182       
    8283        /**
     
    101102         * with avltree_delete_min().
    102103         */
    103         uint64_t base;
     104        avltree_key_t base;
    104105};
    105106
     
    109110 * @param t AVL tree.
    110111 */
    111 static inline void avltree_create (avltree_t *t)
     112static inline void avltree_create(avltree_t *t)
    112113{
    113114        t->root = NULL;
     
    129130
    130131extern avltree_node_t *avltree_find_min(avltree_t *t);
    131 extern avltree_node_t *avltree_search(avltree_t *t, uint64_t key);
     132extern avltree_node_t *avltree_search(avltree_t *t, avltree_key_t key);
    132133extern void avltree_insert(avltree_t *t, avltree_node_t *newnode);
    133134extern void avltree_delete(avltree_t *t, avltree_node_t *node);
    134135extern bool avltree_delete_min(avltree_t *t);
     136extern void avltree_walk(avltree_t *t, avltree_walker_t walker);
    135137
    136138#endif
  • kernel/generic/src/adt/avl.c

    r0d65d76 rd1e9321  
    5353#include <debug.h>
    5454
    55 
    5655#define LEFT    0
    5756#define RIGHT   1
    5857
    59 
    6058/** Search for the first occurence of the given key in an AVL tree.
    6159 *
     
    6563 * @return Pointer to a node or NULL if there is no such key.
    6664 */
    67 avltree_node_t *avltree_search(avltree_t *t, uint64_t key)
     65avltree_node_t *avltree_search(avltree_t *t, avltree_key_t key)
    6866{
    6967        avltree_node_t *p;
     
    121119        avltree_node_t *top;
    122120        avltree_node_t **dpc;
    123         uint64_t key;
     121        avltree_key_t key;
    124122
    125123        ASSERT(t);
     
    708706}
    709707
     708static 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 */
     723void avltree_walk(avltree_t *t, avltree_walker_t walker)
     724{
     725        _avltree_walk(t->root, walker);
     726}
     727
    710728/** @}
    711729 */
Note: See TracChangeset for help on using the changeset viewer.