/** * @brief Do the increments */ static void increment(huff_t *huff, node_t *node) { if (!node) { return; } if (node->next != NULL && node->next->weight == node->weight) { node_t *lnode = *node->head; if (lnode != node->parent) { swap(huff, lnode, node); } swaplist(lnode, node); } if (node->prev && node->prev->weight == node->weight) { *node->head = node->prev; } else { *node->head = NULL; free_ppnode(huff, node->head); } node->weight++; if (node->next && node->next->weight == node->weight) { node->head = node->next->head; } else { node->head = get_ppnode(huff); *node->head = node; } if (node->parent) { increment(huff, node->parent); if (node->prev == node->parent) { swaplist(node, node->parent); if (*node->head == node) { *node->head = node->parent; } } } }
/* Do the increments */ static void increment(Huff* huff, Node *n) { Node *ln; if(n == nil) return; if(n->next != nil && n->next->weight == n->weight){ ln = *n->head; if(ln != n->parent) swap(huff, ln, n); swaplist(ln, n); } if(n->prev && n->prev->weight == n->weight) *n->head = n->prev; else{ *n->head = nil; free_ppnode(huff, n->head); } n->weight++; if(n->next && n->next->weight == n->weight) n->head = n->next->head; else{ n->head = get_ppnode(huff); *n->head = n; } if(n->parent){ increment(huff, n->parent); if(n->prev == n->parent){ swaplist(n, n->parent); if(*n->head == n) *n->head = n->parent; } } }