Function report | 
Source Code:lib\assoc_array.c | 
Create Date:2022-07-28 06:54:13 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:Navigate through the internal tree looking for the closest node to the key.
Proto:static enum assoc_array_walk_status assoc_array_walk(const struct assoc_array *array, const struct assoc_array_ops *ops, const void *index_key, struct assoc_array_walk_result *result)
Type:enum assoc_array_walk_status
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| const struct assoc_array * | array | |
| const struct assoc_array_ops * | ops | |
| const void * | index_key | |
| struct assoc_array_walk_result * | result | 
| 186 | If Not cursor Then Return assoc_array_walk_tree_empty | 
| 189 | level = 0 | 
| 198 | jumped : | 
| 199 | segments = get_key_chunk(index_key, level) | 
| 202 | If assoc_array_ptr_is_shortcut(cursor) Then Go to follow_shortcut | 
| 205 | consider_node : | 
| 206 | node = assoc_array_ptr_to_node(cursor) | 
| 207 | slot = segments >> (level & ASSOC_ARRAY_KEY_CHUNK_MASK) | 
| 208 | slot &= ASSOC_ARRAY_FAN_MASK | 
| 214 | If Not assoc_array_ptr_is_meta(ptr) Then | 
| 222 | Return assoc_array_walk_found_terminal_node | 
| 225 | If assoc_array_ptr_is_node(ptr) Then | 
| 230 | level += ASSOC_ARRAY_LEVEL_STEP | 
| 231 | If (level & ASSOC_ARRAY_KEY_CHUNK_MASK) != 0 Then Go to consider_node | 
| 233 | Go to jumped | 
| 241 | follow_shortcut : | 
| 243 | pr_devel("shortcut to %d\n", skip_to_level) | 
| 244 | sc_level = level + ASSOC_ARRAY_LEVEL_STEP | 
| 245 | BUG_ON(sc_level > skip_to_level) | 
| 247 | Do | 
| 252 | If (sc_level & ASSOC_ARRAY_KEY_CHUNK_MASK) == 0 Then segments = get_key_chunk(index_key, sc_level) | 
| 256 | dissimilarity = segments ^ sc_segments | 
| 261 | dissimilarity &= ~(ULONG_MAX << shift) | 
| 262 | next_sc_level = skip_to_level | 
| 263 | Else | 
| 268 | If dissimilarity != 0 Then | 
| 273 | sc_segments = sc_segments | 
| 274 | dissimilarity = dissimilarity | 
| 275 | Return assoc_array_walk_found_wrong_shortcut | 
| 278 | sc_level = next_sc_level | 
| 279 | When sc_level < skip_to_level cycle | 
| 283 | If ((level ^ sc_level) & ~ASSOC_ARRAY_KEY_CHUNK_MASK) != 0 Then | 
| 286 | Else | 
| 288 | Go to consider_node | 
| Name | Describe | 
|---|---|
| assoc_array_find | assoc_array_find - Find an object by index key*@array: The associative array to search | 
| assoc_array_insert | assoc_array_insert - Script insertion of an object into an associative array*@array: The array to insert into | 
| assoc_array_delete | assoc_array_delete - Script deletion of an object from an associative array*@array: The array to search.*@ops: The operations to use.*@index_key: The key to the object.* Precalculate and preallocate a script for the deletion of an object from an | 
| Source code conversion tool public plug-in interface  | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion  |