Changeset b7f364e in mainline
- Timestamp:
- 2006-04-12T12:36:58Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9a8d91b
- Parents:
- ec55358
- Location:
- generic
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
generic/include/adt/btree.h
rec55358 rb7f364e 37 37 #define BTREE_MAX_KEYS (BTREE_M - 1) 38 38 39 typedef __u64 btree_key_t; 40 39 41 /** B-tree node structure. */ 40 42 struct btree_node { … … 43 45 44 46 /** Keys. We currently support only single keys. Additional room for one extra key is provided. */ 45 __nativekey[BTREE_MAX_KEYS + 1];47 btree_key_t key[BTREE_MAX_KEYS + 1]; 46 48 47 49 /** … … 82 84 extern void btree_destroy(btree_t *t); 83 85 84 extern void btree_insert(btree_t *t, __nativekey, void *value, btree_node_t *leaf_node);85 extern void btree_remove(btree_t *t, __nativekey, btree_node_t *leaf_node);86 extern void *btree_search(btree_t *t, __nativekey, btree_node_t **leaf_node);86 extern void btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *leaf_node); 87 extern void btree_remove(btree_t *t, btree_key_t key, btree_node_t *leaf_node); 88 extern void *btree_search(btree_t *t, btree_key_t key, btree_node_t **leaf_node); 87 89 88 90 extern btree_node_t *btree_leaf_node_left_neighbour(btree_t *t, btree_node_t *node); -
generic/src/adt/btree.c
rec55358 rb7f364e 47 47 #include <print.h> 48 48 49 static void _btree_insert(btree_t *t, __nativekey, void *value, btree_node_t *rsubtree, btree_node_t *node);50 static void _btree_remove(btree_t *t, __nativekey, btree_node_t *node);49 static void _btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *rsubtree, btree_node_t *node); 50 static void _btree_remove(btree_t *t, btree_key_t key, btree_node_t *node); 51 51 static void node_initialize(btree_node_t *node); 52 static void node_insert_key_and_lsubtree(btree_node_t *node, __nativekey, void *value, btree_node_t *lsubtree);53 static void node_insert_key_and_rsubtree(btree_node_t *node, __nativekey, void *value, btree_node_t *rsubtree);54 static void node_remove_key_and_lsubtree(btree_node_t *node, __nativekey);55 static void node_remove_key_and_rsubtree(btree_node_t *node, __nativekey);56 static btree_node_t *node_split(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree, __native*median);52 static void node_insert_key_and_lsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *lsubtree); 53 static void node_insert_key_and_rsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree); 54 static void node_remove_key_and_lsubtree(btree_node_t *node, btree_key_t key); 55 static void node_remove_key_and_rsubtree(btree_node_t *node, btree_key_t key); 56 static btree_node_t *node_split(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree, btree_key_t *median); 57 57 static btree_node_t *node_combine(btree_node_t *node); 58 58 static index_t find_key_by_subtree(btree_node_t *node, btree_node_t *subtree, bool right); 59 59 static void rotate_from_right(btree_node_t *lnode, btree_node_t *rnode, index_t idx); 60 60 static 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, __nativekey, void *value, btree_node_t *rsubtree);62 static bool try_insert_by_rotation_to_right(btree_node_t *node, __nativekey, void *value, btree_node_t *rsubtree);61 static bool try_insert_by_rotation_to_left(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree); 62 static bool try_insert_by_rotation_to_right(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree); 63 63 static bool try_rotation_from_left(btree_node_t *rnode); 64 64 static bool try_rotation_from_right(btree_node_t *lnode); … … 109 109 * @param leaf_node Leaf node where the insertion should begin. 110 110 */ 111 void btree_insert(btree_t *t, __nativekey, void *value, btree_node_t *leaf_node)111 void btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *leaf_node) 112 112 { 113 113 btree_node_t *lnode; … … 133 133 * @param node Start inserting into this node. 134 134 */ 135 void _btree_insert(btree_t *t, __nativekey, void *value, btree_node_t *rsubtree, btree_node_t *node)135 void _btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *rsubtree, btree_node_t *node) 136 136 { 137 137 if (node->keys < BTREE_MAX_KEYS) { … … 152 152 } else { 153 153 btree_node_t *rnode; 154 __nativemedian;154 btree_key_t median; 155 155 156 156 /* … … 194 194 * @param leaf_node If not NULL, pointer to the leaf node where the key is found. 195 195 */ 196 void btree_remove(btree_t *t, __nativekey, btree_node_t *leaf_node)196 void btree_remove(btree_t *t, btree_key_t key, btree_node_t *leaf_node) 197 197 { 198 198 btree_node_t *lnode; … … 214 214 * @param node Node where the key being removed resides. 215 215 */ 216 void _btree_remove(btree_t *t, __nativekey, btree_node_t *node)216 void _btree_remove(btree_t *t, btree_key_t key, btree_node_t *node) 217 217 { 218 218 if (ROOT_NODE(node)) { … … 291 291 * @return Pointer to value or NULL if there is no such key. 292 292 */ 293 void *btree_search(btree_t *t, __nativekey, btree_node_t **leaf_node)293 void *btree_search(btree_t *t, btree_key_t key, btree_node_t **leaf_node) 294 294 { 295 295 btree_node_t *cur, *next; … … 417 417 * @param lsubtree Pointer to the left subtree. 418 418 */ 419 void node_insert_key_and_lsubtree(btree_node_t *node, __nativekey, void *value, btree_node_t *lsubtree)419 void node_insert_key_and_lsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *lsubtree) 420 420 { 421 421 int i; … … 453 453 * @param rsubtree Pointer to the right subtree. 454 454 */ 455 void node_insert_key_and_rsubtree(btree_node_t *node, __nativekey, void *value, btree_node_t *rsubtree)455 void node_insert_key_and_rsubtree(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree) 456 456 { 457 457 int i; … … 485 485 * @param key Key to be removed. 486 486 */ 487 void node_remove_key_and_lsubtree(btree_node_t *node, __nativekey)487 void node_remove_key_and_lsubtree(btree_node_t *node, btree_key_t key) 488 488 { 489 489 int i, j; … … 513 513 * @param key Key to be removed. 514 514 */ 515 void node_remove_key_and_rsubtree(btree_node_t *node, __nativekey)515 void node_remove_key_and_rsubtree(btree_node_t *node, btree_key_t key) 516 516 { 517 517 int i, j; … … 550 550 * @return Newly created right sibling of node. 551 551 */ 552 btree_node_t *node_split(btree_node_t *node, __native key, void *value, btree_node_t *rsubtree, __native*median)552 btree_node_t *node_split(btree_node_t *node, btree_key_t key, void *value, btree_node_t *rsubtree, btree_key_t *median) 553 553 { 554 554 btree_node_t *rnode; … … 685 685 void rotate_from_left(btree_node_t *lnode, btree_node_t *rnode, index_t idx) 686 686 { 687 __nativekey;687 btree_key_t key; 688 688 689 689 key = lnode->key[lnode->keys - 1]; … … 722 722 void rotate_from_right(btree_node_t *lnode, btree_node_t *rnode, index_t idx) 723 723 { 724 __nativekey;724 btree_key_t key; 725 725 726 726 key = rnode->key[0]; … … 761 761 * @return True if the rotation was performed, false otherwise. 762 762 */ 763 bool try_insert_by_rotation_to_left(btree_node_t *node, __nativeinskey, void *insvalue, btree_node_t *rsubtree)763 bool try_insert_by_rotation_to_left(btree_node_t *node, btree_key_t inskey, void *insvalue, btree_node_t *rsubtree) 764 764 { 765 765 index_t idx; … … 808 808 * @return True if the rotation was performed, false otherwise. 809 809 */ 810 bool try_insert_by_rotation_to_right(btree_node_t *node, __nativeinskey, void *insvalue, btree_node_t *rsubtree)810 bool try_insert_by_rotation_to_right(btree_node_t *node, btree_key_t inskey, void *insvalue, btree_node_t *rsubtree) 811 811 { 812 812 index_t idx; -
generic/src/proc/task.c
rec55358 rb7f364e 101 101 102 102 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); 104 104 105 105 spinlock_unlock(&tasks_lock); -
generic/src/proc/thread.c
rec55358 rb7f364e 237 237 238 238 spinlock_lock(&threads_lock); 239 btree_remove(&threads_btree, ( __native) t, NULL);239 btree_remove(&threads_btree, (btree_key_t) ((__address ) t), NULL); 240 240 spinlock_unlock(&threads_lock); 241 241 … … 313 313 ipl = interrupts_disable(); 314 314 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); 316 316 spinlock_unlock(&threads_lock); 317 317 … … 447 447 btree_node_t *leaf; 448 448 449 return btree_search(&threads_btree, ( __native) t, &leaf) != NULL;449 return btree_search(&threads_btree, (btree_key_t) ((__address) t), &leaf) != NULL; 450 450 } 451 451
Note:
See TracChangeset
for help on using the changeset viewer.