Changeset 80bcaed in mainline for kernel/generic/include/adt
- Timestamp:
- 2007-02-03T13:22:24Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f619ec11
- Parents:
- fa8e7d2
- Location:
- kernel/generic/include/adt
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/adt/btree.h
rfa8e7d2 r80bcaed 49 49 count_t keys; 50 50 51 /** Keys. We currently support only single keys. Additional room for one extra key is provided. */ 51 /** 52 * Keys. We currently support only single keys. Additional room for one 53 * extra key is provided. 54 */ 52 55 btree_key_t key[BTREE_MAX_KEYS + 1]; 53 56 54 57 /** 55 * Pointers to values. Sorted according to the key array. Defined only in leaf-level.56 * There is room for storing value for the extra key.58 * Pointers to values. Sorted according to the key array. Defined only in 59 * leaf-level. There is room for storing value for the extra key. 57 60 */ 58 61 void *value[BTREE_MAX_KEYS + 1]; 59 62 60 63 /** 61 * Pointers to descendants of this node sorted according to the key array. 64 * Pointers to descendants of this node sorted according to the key 65 * array. 66 * 62 67 * subtree[0] points to subtree with keys lesser than to key[0]. 63 * subtree[1] points to subtree with keys greater than or equal to key[0] and lesser than key[1]. 68 * subtree[1] points to subtree with keys greater than or equal to 69 * key[0] and lesser than key[1]. 64 70 * ... 65 71 * There is room for storing a subtree pointer for the extra key. … … 70 76 struct btree_node *parent; 71 77 72 /** Link connecting leaf-level nodes. Defined only when this node is a leaf. */ 78 /** 79 * Link connecting leaf-level nodes. Defined only when this node is a 80 * leaf. */ 73 81 link_t leaf_link; 74 82 75 /* *Variables needed by btree_print(). */83 /* Variables needed by btree_print(). */ 76 84 link_t bfs_link; 77 85 int depth; … … 89 97 extern void btree_destroy(btree_t *t); 90 98 91 extern void btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *leaf_node); 99 extern void btree_insert(btree_t *t, btree_key_t key, void *value, 100 btree_node_t *leaf_node); 92 101 extern void btree_remove(btree_t *t, btree_key_t key, btree_node_t *leaf_node); 93 102 extern void *btree_search(btree_t *t, btree_key_t key, btree_node_t **leaf_node); 94 103 95 extern btree_node_t *btree_leaf_node_left_neighbour(btree_t *t, btree_node_t *node); 96 extern btree_node_t *btree_leaf_node_right_neighbour(btree_t *t, btree_node_t *node); 104 extern btree_node_t *btree_leaf_node_left_neighbour(btree_t *t, 105 btree_node_t *node); 106 extern btree_node_t *btree_leaf_node_right_neighbour(btree_t *t, 107 btree_node_t *node); 97 108 98 109 extern void btree_print(btree_t *t); -
kernel/generic/include/adt/fifo.h
rfa8e7d2 r80bcaed 107 107 */ 108 108 #define fifo_push(name, value) \ 109 name.fifo[name.tail = (name.tail + 1) < name.items ? (name.tail + 1) : 0] = (value) 109 name.fifo[name.tail = \ 110 (name.tail + 1) < name.items ? (name.tail + 1) : 0] = (value) 110 111 111 112 /** Allocate memory for dynamic FIFO. -
kernel/generic/include/adt/hash_table.h
rfa8e7d2 r80bcaed 43 43 /** Hash function. 44 44 * 45 * @param key Array of keys needed to compute hash index. All keys must be passed. 45 * @param key Array of keys needed to compute hash index. All keys must 46 * be passed. 46 47 * 47 48 * @return Index into hash table. … … 51 52 /** Hash table item comparison function. 52 53 * 53 * @param key Array of keys that will be compared with item. It is not necessary to pass all keys. 54 * @param key Array of keys that will be compared with item. It is not 55 * necessary to pass all keys. 54 56 * 55 57 * @return true if the keys match, false otherwise. … … 72 74 } hash_table_t; 73 75 74 #define hash_table_get_instance(item, type, member) list_get_instance((item), type, member) 76 #define hash_table_get_instance(item, type, member) \ 77 list_get_instance((item), type, member) 75 78 76 extern void hash_table_create(hash_table_t *h, count_t m, count_t max_keys, hash_table_operations_t *op); 79 extern void hash_table_create(hash_table_t *h, count_t m, count_t max_keys, 80 hash_table_operations_t *op); 77 81 extern void hash_table_insert(hash_table_t *h, unative_t key[], link_t *item); 78 82 extern link_t *hash_table_find(hash_table_t *h, unative_t key[]); -
kernel/generic/include/adt/list.h
rfa8e7d2 r80bcaed 48 48 * @param name Name of the new statically allocated list. 49 49 */ 50 #define LIST_INITIALIZE(name) link_t name = { .prev = &name, .next = &name } 50 #define LIST_INITIALIZE(name) \ 51 link_t name = { .prev = &name, .next = &name } 51 52 52 53 /** Initialize doubly-linked circular list link … … 108 109 * Remove item from doubly-linked circular list. 109 110 * 110 * @param link Pointer to link_t structure to be removed from the list it is contained in. 111 * @param link Pointer to link_t structure to be removed from the list it is 112 * contained in. 111 113 */ 112 114 static inline void list_remove(link_t *link) … … 136 138 * concatenates splitted lists and splits concatenated lists. 137 139 * 138 * @param part1 Pointer to link_t structure leading the first (half of the headless) list. 139 * @param part2 Pointer to link_t structure leading the second (half of the headless) list. 140 * @param part1 Pointer to link_t structure leading the first (half of the 141 * headless) list. 142 * @param part2 Pointer to link_t structure leading the second (half of the 143 * headless) list. 140 144 */ 141 145 static inline void headless_list_split_or_concat(link_t *part1, link_t *part2) … … 155 159 * Split headless doubly-linked circular list. 156 160 * 157 * @param part1 Pointer to link_t structure leading the first half of the headless list. 158 * @param part2 Pointer to link_t structure leading the second half of the headless list. 161 * @param part1 Pointer to link_t structure leading the first half of the 162 * headless list. 163 * @param part2 Pointer to link_t structure leading the second half of the 164 * headless list. 159 165 */ 160 166 static inline void headless_list_split(link_t *part1, link_t *part2) … … 168 174 * 169 175 * @param part1 Pointer to link_t structure leading the first headless list. 170 * @param part2 Pointer to link_t structure leading the second headless list. 176 * @param part2 Pointer to link_t structure leading the second headless list. 171 177 */ 172 178 static inline void headless_list_concat(link_t *part1, link_t *part2) … … 175 181 } 176 182 177 #define list_get_instance(link,type,member) (type *)(((uint8_t*)(link))-((uint8_t*)&(((type *)NULL)->member))) 183 #define list_get_instance(link,type,member) \ 184 ((type *)(((uint8_t *)(link)) - ((uint8_t *)&(((type *)NULL)->member)))) 178 185 179 186 extern bool list_member(const link_t *link, const link_t *head);
Note:
See TracChangeset
for help on using the changeset viewer.