diff options
| -rw-r--r-- | main.c | 56 |
1 files changed, 53 insertions, 3 deletions
@@ -99,14 +99,64 @@ void remove_element(element* el) { } else { el->set->head = el->next; } - //demote(el->set); + demote(el->set); free(el); } void remove_parents(int id, parent** parents) { - for(parent* p=parents[id]; p != NULL; p = p->next) { + parent* temp; + parent* p = parents[id]; + while (p != NULL) { remove_element(p->pos); - free(p); + temp = p; + p = p->next; + free(temp); + } +} + +void remove_bucket(bucket* b) { + if (b->prev) { + b->prev->next = b->next; + } + if (b->next) { + b->next->prev = b->prev; + } + free(b); +} + +void demote(set* s) { + detach_set(s); + int size = s->bucket->size; + bucket* attach_point; + if (s->bucket->prev) { + attach_point = s->bucket->prev; + } else if (s->bucket->head) { + attach_point = s->bucket; + } else { + + } + remove_bucket(s->bucket); + attach_set(s, size, b); +} + +void detach_set(set* s) { + if (s->next) { + s->next->prev = s->prev; + } + if (s->prev) { + s->prev->next = s->next; + } else { + s->bucket->head = s->next; + } +} + +void attach_set(set* s, int size, bucket* b) { + if (b->size == size) { + insert_set(s, b); + } else { + bucket* nb = new_bucket(s, size); + nb->prev = b; + nb->next = b->next; } } |
