Function report |
Source Code:lib\assoc_array.c |
Create Date:2022-07-28 06:54:31 |
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
| home page | Tree |
| Annotation kernel can get tool activity | Download SCCT | Chinese |
Name: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
Proto:struct assoc_array_edit *assoc_array_delete(struct assoc_array *array, const struct assoc_array_ops *ops, const void *index_key)
Type:struct assoc_array_edit
Parameter:
| Type | Parameter | Name |
|---|---|---|
| struct assoc_array * | array | |
| const struct assoc_array_ops * | ops | |
| const void * | index_key |
| 1093 | edit = kzalloc - allocate memory. The memory is set to zero.*@size: how many bytes of memory are required.*@flags: the type of memory to allocate (see kmalloc). |
| 1098 | adjust_count_by = -1 |
| 1105 | pr_devel("terminal_node\n") |
| 1108 | When slot < Number of slots per node cycle |
| 1110 | If ptr && assoc_array_ptr_is_leaf(ptr) && compare_object(assoc_array_ptr_to_leaf(ptr), index_key) Then Go to found_leaf |
| 1117 | Case Navigate through the internal tree looking for the closest node to the key. == assoc_array_walk_tree_empty |
| 1118 | Case Navigate through the internal tree looking for the closest node to the key. == assoc_array_walk_found_wrong_shortcut |
| 1119 | Default |
| 1125 | found_leaf : |
| 1126 | BUG_ON(nr_leaves_on_tree <= 0) |
| 1133 | to = NULL |
| 1134 | adjust_count_on = node |
| 1139 | If nr_leaves_on_tree == 1 Then |
| 1158 | If nr_leaves_on_branch <= Number of slots per node + 1 Then |
| 1166 | has_meta = false |
| 1167 | When i < Number of slots per node cycle |
| 1175 | pr_devel("leaves: %ld [m=%d]\n", nr_leaves_on_branch - 1, has_meta) |
| 1182 | collapse_up : |
| 1183 | pr_devel("collapse subtree: %ld\n", nr_leaves_on_branch) |
| 1185 | ptr = back_pointer |
| 1186 | If Not ptr Then Go to do_collapse |
| 1188 | If assoc_array_ptr_is_shortcut(ptr) Then |
| 1189 | s = assoc_array_ptr_to_shortcut(ptr) |
| 1190 | ptr = back_pointer |
| 1191 | If Not ptr Then Go to do_collapse |
| 1195 | grandparent = assoc_array_ptr_to_node(ptr) |
| 1196 | If nr_leaves_on_branch <= Number of slots per node + 1 Then |
| 1197 | parent = grandparent |
| 1198 | Go to collapse_up |
| 1201 | do_collapse : |
| 1210 | new_n0 = kzalloc - allocate memory. The memory is set to zero.*@size: how many bytes of memory are required.*@flags: the type of memory to allocate (see kmalloc). |
| 1213 | new_meta[0] = assoc_array_node_to_ptr(new_n0) |
| 1215 | back_pointer = back_pointer |
| 1216 | parent_slot = parent_slot |
| 1218 | adjust_count_on = new_n0 |
| 1222 | slot = 0 |
| 1227 | pr_devel("collapsed %d,%lu\n", slot, nr_leaves_on_branch) |
| 1228 | BUG_ON(slot != nr_leaves_on_branch - 1) |
| 1230 | If Not back_pointer Then |
| 1232 | Else if assoc_array_ptr_is_leaf(back_pointer) Then |
| 1233 | BUG() |
| 1234 | Else if assoc_array_ptr_is_node(back_pointer) Then |
| 1235 | p = assoc_array_ptr_to_node(back_pointer) |
| 1237 | ptr = slots[parent_slot] |
| 1238 | Else if assoc_array_ptr_is_shortcut(back_pointer) Then |
| 1239 | s = assoc_array_ptr_to_shortcut(back_pointer) |
| 1243 | to = assoc_array_node_to_ptr(new_n0) |
| 1248 | Return edit |
| 1250 | enomem : |
| 1252 | pr_devel("enomem\n") |
| 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 |