Changeset b7f364e in mainline


Ignore:
Timestamp:
2006-04-12T12:36:58Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9a8d91b
Parents:
ec55358
Message:

Modify B+tree node key width to be 64-bit wide on all platforms.

Location:
generic
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • generic/include/adt/btree.h

    rec55358 rb7f364e  
    3737#define BTREE_MAX_KEYS  (BTREE_M - 1)
    3838
     39typedef __u64 btree_key_t;
     40
    3941/** B-tree node structure. */
    4042struct btree_node {
     
    4345
    4446        /** Keys. We currently support only single keys. Additional room for one extra key is provided. */
    45         __native key[BTREE_MAX_KEYS + 1];
     47        btree_key_t key[BTREE_MAX_KEYS + 1];
    4648
    4749        /**
     
    8284extern void btree_destroy(btree_t *t);
    8385
    84 extern void btree_insert(btree_t *t, __native key, void *value, btree_node_t *leaf_node);
    85 extern void btree_remove(btree_t *t, __native key, btree_node_t *leaf_node);
    86 extern void *btree_search(btree_t *t, __native key, btree_node_t **leaf_node);
     86extern void btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *leaf_node);
     87extern void btree_remove(btree_t *t, btree_key_t key, btree_node_t *leaf_node);
     88extern void *btree_search(btree_t *t, btree_key_t key, btree_node_t **leaf_node);
    8789
    8890extern btree_node_t *btree_leaf_node_left_neighbour(btree_t *t, btree_node_t *node);
  • generic/src/adt/btree.c

    rec55358 rb7f364e  
    4747#include <print.h>
    4848
    49 static void _btree_insert(btree_t *t, __native key, void *value, btree_node_t *rsubtree, btree_node_t *node);
    50 static void _btree_remove(btree_t *t, __native key, btree_node_t *node);
     49static void _btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *rsubtree, btree_node_t *node);
     50static void _btree_remove(btree_t *t, btree_key_t key, btree_node_t *node);
    5151static void node_initialize(btree_node_t *node);
    52 static void node_insert_key_and_lsubtree(btree_node_t *node, __native key, void *value, btree_node_t *lsubtree);
    53 static void node_insert_key_and_rsubtree(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree);
    54 static void node_remove_key_and_lsubtree(btree_node_t *node, __native key);
    55 static void node_remove_key_and_rsubtree(btree_node_t *node, __native key);
    56 static btree_node_t *node_split(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree, __native *median);
     52static void node_insert_key_and_lsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *lsubtree);
     53static void node_insert_key_and_rsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree);
     54static void node_remove_key_and_lsubtree(btree_node_t *node, btree_key_t key);
     55static void node_remove_key_and_rsubtree(btree_node_t *node, btree_key_t key);
     56static btree_node_t *node_split(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree, btree_key_t *median);
    5757static btree_node_t *node_combine(btree_node_t *node);
    5858static index_t find_key_by_subtree(btree_node_t *node, btree_node_t *subtree, bool right);
    5959static void rotate_from_right(btree_node_t *lnode, btree_node_t *rnode, index_t idx);
    6060static void rotate_from_left(btree_node_t *lnode, btree_node_t *rnode, index_t idx);
    61 static bool try_insert_by_rotation_to_left(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree);
    62 static bool try_insert_by_rotation_to_right(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree);
     61static bool try_insert_by_rotation_to_left(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree);
     62static bool try_insert_by_rotation_to_right(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree);
    6363static bool try_rotation_from_left(btree_node_t *rnode);
    6464static bool try_rotation_from_right(btree_node_t *lnode);
     
    109109 * @param leaf_node Leaf node where the insertion should begin.
    110110 */
    111 void btree_insert(btree_t *t, __native key, void *value, btree_node_t *leaf_node)
     111void btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *leaf_node)
    112112{
    113113        btree_node_t *lnode;
     
    133133 * @param node Start inserting into this node.
    134134 */
    135 void _btree_insert(btree_t *t, __native key, void *value, btree_node_t *rsubtree, btree_node_t *node)
     135void _btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *rsubtree, btree_node_t *node)
    136136{
    137137        if (node->keys < BTREE_MAX_KEYS) {
     
    152152        } else {
    153153                btree_node_t *rnode;
    154                 __native median;
     154                btree_key_t median;
    155155               
    156156                /*
     
    194194 * @param leaf_node If not NULL, pointer to the leaf node where the key is found.
    195195 */
    196 void btree_remove(btree_t *t, __native key, btree_node_t *leaf_node)
     196void btree_remove(btree_t *t, btree_key_t key, btree_node_t *leaf_node)
    197197{
    198198        btree_node_t *lnode;
     
    214214 * @param node Node where the key being removed resides.
    215215 */
    216 void _btree_remove(btree_t *t, __native key, btree_node_t *node)
     216void _btree_remove(btree_t *t, btree_key_t key, btree_node_t *node)
    217217{
    218218        if (ROOT_NODE(node)) {
     
    291291 * @return Pointer to value or NULL if there is no such key.
    292292 */
    293 void *btree_search(btree_t *t, __native key, btree_node_t **leaf_node)
     293void *btree_search(btree_t *t, btree_key_t key, btree_node_t **leaf_node)
    294294{
    295295        btree_node_t *cur, *next;
     
    417417 * @param lsubtree Pointer to the left subtree.
    418418 */
    419 void node_insert_key_and_lsubtree(btree_node_t *node, __native key, void *value, btree_node_t *lsubtree)
     419void node_insert_key_and_lsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *lsubtree)
    420420{
    421421        int i;
     
    453453 * @param rsubtree Pointer to the right subtree.
    454454 */
    455 void node_insert_key_and_rsubtree(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree)
     455void node_insert_key_and_rsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree)
    456456{
    457457        int i;
     
    485485 * @param key Key to be removed.
    486486 */
    487 void node_remove_key_and_lsubtree(btree_node_t *node, __native key)
     487void node_remove_key_and_lsubtree(btree_node_t *node, btree_key_t key)
    488488{
    489489        int i, j;
     
    513513 * @param key Key to be removed.
    514514 */
    515 void node_remove_key_and_rsubtree(btree_node_t *node, __native key)
     515void node_remove_key_and_rsubtree(btree_node_t *node, btree_key_t key)
    516516{
    517517        int i, j;
     
    550550 * @return Newly created right sibling of node.
    551551 */
    552 btree_node_t *node_split(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree, __native *median)
     552btree_node_t *node_split(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree, btree_key_t *median)
    553553{
    554554        btree_node_t *rnode;
     
    685685void rotate_from_left(btree_node_t *lnode, btree_node_t *rnode, index_t idx)
    686686{
    687         __native key;
     687        btree_key_t key;
    688688
    689689        key = lnode->key[lnode->keys - 1];
     
    722722void rotate_from_right(btree_node_t *lnode, btree_node_t *rnode, index_t idx)
    723723{
    724         __native key;
     724        btree_key_t key;
    725725
    726726        key = rnode->key[0];
     
    761761 * @return True if the rotation was performed, false otherwise.
    762762 */
    763 bool try_insert_by_rotation_to_left(btree_node_t *node, __native inskey, void *insvalue, btree_node_t *rsubtree)
     763bool try_insert_by_rotation_to_left(btree_node_t *node, btree_key_t inskey, void *insvalue, btree_node_t *rsubtree)
    764764{
    765765        index_t idx;
     
    808808 * @return True if the rotation was performed, false otherwise.
    809809 */
    810 bool try_insert_by_rotation_to_right(btree_node_t *node, __native inskey, void *insvalue, btree_node_t *rsubtree)
     810bool try_insert_by_rotation_to_right(btree_node_t *node, btree_key_t inskey, void *insvalue, btree_node_t *rsubtree)
    811811{
    812812        index_t idx;
  • generic/src/proc/task.c

    rec55358 rb7f364e  
    101101
    102102        ta->taskid = ++task_counter;
    103         btree_insert(&tasks_btree, (__native) ta, (void *) ta, NULL);
     103        btree_insert(&tasks_btree, (btree_key_t) ta->taskid, (void *) ta, NULL);
    104104
    105105        spinlock_unlock(&tasks_lock);
  • generic/src/proc/thread.c

    rec55358 rb7f364e  
    237237       
    238238        spinlock_lock(&threads_lock);
    239         btree_remove(&threads_btree, (__native) t, NULL);
     239        btree_remove(&threads_btree, (btree_key_t) ((__address ) t), NULL);
    240240        spinlock_unlock(&threads_lock);
    241241       
     
    313313        ipl = interrupts_disable();
    314314        spinlock_lock(&threads_lock);
    315         btree_insert(&threads_btree, (__native) t, (void *) t, NULL);
     315        btree_insert(&threads_btree, (btree_key_t) ((__address) t), (void *) t, NULL);
    316316        spinlock_unlock(&threads_lock);
    317317       
     
    447447        btree_node_t *leaf;
    448448       
    449         return btree_search(&threads_btree, (__native) t, &leaf) != NULL;
     449        return btree_search(&threads_btree, (btree_key_t) ((__address) t), &leaf) != NULL;
    450450}
    451451
Note: See TracChangeset for help on using the changeset viewer.