MCPcopy Create free account
hub / github.com/1a1a11a/libCacheSim / splay_delete_t

Function splay_delete_t

libCacheSim/dataStructure/splay_tuple.c:190–241  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

188}
189
190sTree_tuple *splay_delete_t(splay_key_type_t i, sTree_tuple *t) {
191 if (t == NULL) return NULL;
192
193 t = splay_t(i, t);
194
195 sTree_tuple *current = t;
196 sTree_tuple *parent = NULL;
197
198 // Iterate until find the node to delete
199 while (current != NULL) {
200 if (key_cmp_t(i, current->key) == 0 && i->L == current->key->L) {
201 sTree_tuple *replacement;
202
203 if (current->left == NULL) {
204 replacement = current->right;
205 } else if (current->right == NULL) {
206 replacement = current->left;
207 } else {
208 sTree_tuple *successor = current->right;
209 while (successor->left != NULL) {
210 successor = successor->left;
211 }
212 replacement = splay_t(successor->key, current->right);
213 replacement->left = current->left;
214 }
215
216 if (parent == NULL) {
217 t = replacement;
218 } else if (parent->left == current) {
219 parent->left = replacement;
220 } else {
221 parent->right = replacement;
222 }
223
224 free_node_t(current);
225
226 if (t != NULL) {
227 t->value = node_value_t(t->left) + node_value_t(t->right) + 1;
228 }
229
230 break;
231 }
232
233 parent = current;
234 if (key_cmp_t(i, current->key) < 0 || (key_cmp_t(i, current->key) == 0 && i->L < current->key->L))
235 current = current->left;
236 else
237 current = current->right;
238 }
239
240 return t;
241}
242
243// sTree_tuple *find_node(key_type_t e, sTree_tuple *t) {
244// /* Returns a pointer to the node in the sTree with the given value. */

Callers 1

Calls 2

splay_tFunction · 0.85
free_node_tFunction · 0.85

Tested by

no test coverage detected