Skip to content

Instantly share code, notes, and snippets.

@denysvitali
Created January 8, 2018 20:21
Show Gist options
  • Save denysvitali/1b697bc711688faf63cf5738f2f3fbbf to your computer and use it in GitHub Desktop.
Save denysvitali/1b697bc711688faf63cf5738f2f3fbbf to your computer and use it in GitHub Desktop.
void swap_on_diff_lvls(HuffmanTree* ht, Node* node, Node* node2){
debug("Swapping on different levels");
/*Node** arr = malloc(sizeof(Node*) * HA_DIM_X * HA_DIM_Y);
Node** arr2 = malloc(sizeof(Node*) * HA_DIM_X * HA_DIM_Y);*/
Node** arr = calloc(HA_DIM_X * HA_DIM_Y, sizeof(Node*));
Node** arr2 = calloc(HA_DIM_X * HA_DIM_Y, sizeof(Node*));
int i, k;
for(i=0; i<HA_DIM_X; i++){
for(k=0; k<HA_DIM_Y; k++){
arr[i * HA_DIM_X + k] = NULL;
arr2[i * HA_DIM_X + k] = NULL;
}
}
int* pos;
int* pos2;
pos = getNodePosition(ht, node);
pos2 = getNodePosition(ht, node2);
printf("pos: [%d][%d]\n", pos[0], pos[1]);
printf("pos2: [%d][%d]\n", pos2[0], pos2[1]);
int nullpos[2] = {0, 0};
printHuffmanTree(ht);
printHuffmanArray(ht);
debug("[swap_on_diff_lvls] Creating arr");
create_subtree_from_node(ht, node, arr, nullpos);
debug("[swap_on_diff_lvls] End arr creation");
printNodeArray(arr);
debug("[swap_on_diff_lvls] Creating arr2");
create_subtree_from_node(ht, node2, arr2, nullpos);
debug("[swap_on_diff_lvls] End arr2 creation");
printNodeArray(arr2);
rebuilding_from_array(ht, pos2[0] * HA_DIM_X + pos2[1], arr, 0, pos[0]-pos2[0]);
rebuilding_from_array(ht, pos[0] * HA_DIM_X + pos[1], arr2, 0, pos[0]-pos2[0]);
free(pos);
free(pos2);
free(arr);
free(arr2);
//exit(2); // TODO: REMOVE!
}
void rebuilding_from_array(HuffmanTree *ht, int pos, Node** arr, int iter, int lvl){
//debug("[rebuilding_from_array] Starting rebuild");
if(iter == 0 && DEBUG){
printf("\n\n");
}
char debug_b[200];
sprintf(debug_b, "[rebuilding_from_array] Arguments: HT: %p, pos: %d, arr: %p, iter: %d, lvl: %d", ht, pos, arr, iter, lvl);
debug(debug_b);
int my_rel_pos = pos % HA_DIM_X;
sprintf(debug_b, "[rebuilding_from_array] my_rel_pos: %d");
debug(debug_b);
//printPartialArray(arr);
//printHuffmanArray(ht);
if(DEBUG){
printf("Setting ht->tree[%d] to arr[%d] (%s to %s)\n", pos, iter, getElement(ht->tree[pos]), getElement(arr[iter]));
}
ht->tree[pos] = arr[iter];
if(pos + HA_DIM_X + 1 < HA_DIM_X * HA_DIM_Y && iter * HA_DIM_X + pos < HA_DIM_X * HA_DIM_Y && arr[iter] != NULL) {
rebuilding_from_array(ht, pos + HA_DIM_X + my_rel_pos + 0, arr, iter + HA_DIM_X + iter%HA_DIM_X + 0, lvl);
rebuilding_from_array(ht, pos + HA_DIM_X + my_rel_pos + 1, arr, iter + HA_DIM_X + iter%HA_DIM_X + 1, lvl);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment