diff --git a/src/treewalk.c b/src/treewalk.c index 7631973649ea28dcd0a49cd95da9ddcfd7fb32e3..dfdf64b0b9376942991b4f4073b54bb314cc1775 100644 --- a/src/treewalk.c +++ b/src/treewalk.c @@ -19,6 +19,29 @@ #include <stdio.h> #include <assert.h> +void draw_horizontal_line(int pivot, int k, FILE *tree,int size, int *tiles, int killed){ + int y, ordinate1, ordinate2, absciss1, absciss2, absciss3, absciss4; + ordinate1 = size + size * killed; + ordinate2 = size + size * pivot; + absciss1 = (size + (size / 4)) + size * tiles[killed]; + absciss3 = (size + (size / 4)) + size * tiles[pivot]; + /* Increasing the step */ + y = libhqr_imax(tiles[killed], tiles[pivot]) + 1; + tiles[killed] = tiles[pivot] = y; + absciss2 = (size + (size / 4)) + size * tiles[killed]; + absciss4 = (size + (size / 4)) + size * tiles[pivot]; + libhqr_drawline( absciss1, ordinate1, absciss2, ordinate1, k, tree); + libhqr_drawline( absciss3, ordinate2, absciss4, ordinate2, k, tree); +} + +void draw_vertical_line(int pivot, int k, FILE *tree,int size, int *tiles, int killed){ + int absciss, ordinate1, ordinate2; + absciss = size + size * tiles[killed]; + ordinate1 = size + size * killed; + ordinate2 = size + size * pivot; + libhqr_drawline(absciss, ordinate1, absciss, ordinate2, k, tree); +} + /**************************************************** * LIBHQR_TREEWALK ***************************************************/ @@ -35,6 +58,12 @@ * @param[in] tiles * Table stocking the tiles and their step * + * @param[in] tree + * File where the tree is drawn + * + * @param[in] size + * Paramter for the size of the drawing + * */ void libhqr_treewalk(const libhqr_tree_t *qrtree, int k, int *tiles, FILE *tree, int size) { @@ -43,7 +72,6 @@ void libhqr_treewalk(const libhqr_tree_t *qrtree, int k, int *tiles, FILE *tree, int pivot = k; libhqr_queue_tile_t *tt = libhqr_queue_tile_new(); libhqr_queue_tile_t *ts = libhqr_queue_tile_new(); - int y, ordinate1, ordinate2, ordinate3, ordinate4, absciss1, absciss2, absciss3, absciss4; libhqr_queue_tile_push(&tt, k); while( tt ) @@ -75,18 +103,8 @@ void libhqr_treewalk(const libhqr_tree_t *qrtree, int k, int *tiles, FILE *tree, printf("POP TS: %d\n", tsid); printf("Call function on (%d, %d)\n", qrtree->currpiv(qrtree, k, tsid), tsid ); - /* Drawing the horizontal lines */ - ordinate1 = ordinate2 = size + size * tsid; - ordinate3 = ordinate4 = size + size * qrtree->currpiv(qrtree, k, tsid); - absciss1 = (size + (size / 4)) + size * tiles[tsid]; - absciss3 = (size + (size / 4)) + size * tiles[qrtree->currpiv(qrtree, k, tsid)]; - /* Increasing the step */ - y = libhqr_imax(tiles[tsid], tiles[qrtree->currpiv(qrtree, k, tsid)]) + 1; - tiles[tsid] = tiles[qrtree->currpiv(qrtree, k, tsid)] = y; - absciss2 = (size + (size / 4)) + size * tiles[tsid]; - absciss4 = (size + (size / 4)) + size * tiles[qrtree->currpiv(qrtree, k, tsid)]; - libhqr_drawline( absciss1, ordinate1, absciss2, ordinate2, k, tree); - libhqr_drawline( absciss3, ordinate3, absciss4, ordinate4, k, tree); + draw_horizontal_line(qrtree->currpiv(qrtree, k, tsid), k, tree, size, tiles, tsid); + draw_vertical_line(qrtree->currpiv(qrtree, k, tsid), k, tree, size, tiles, tsid); tsid = libhqr_queue_tile_head(&ts); } pivot = p = ttid; diff --git a/testings/testing_treedraw.c b/testings/testing_treedraw.c index d0e562ea09b46423d5b40382e7aec0c9f009a5c5..680ece49527495db308bcdb38b44806c61c5d0f4 100644 --- a/testings/testing_treedraw.c +++ b/testings/testing_treedraw.c @@ -30,7 +30,7 @@ main(int argc, char ** argv) { libhqr_tree_t qrtree; libhqr_tiledesc_t matrix; - int maxMN, absciss1, ordinate1, absciss2, ordinate2, k, i, j; + int maxMN, absciss1, ordinate1, k, i, j; int *tiles; matrix.nodes = 1; matrix.p = 1; @@ -45,25 +45,14 @@ main(int argc, char ** argv) FILE *tree = fopen("tree.svg","w+"); libhqr_writeheader(tree); for (k = 0; k < 3; k++){ - /* Drawing the horizontal lines */ + /* Drawing the lines */ libhqr_treewalk(&qrtree, k, tiles, tree, SIZE); - /* Drawing the vertical lines */ - for (i = k; i < maxMN; i++){ - if (i > 0){ - absciss1 = absciss2 = SIZE + SIZE * tiles[i]; - ordinate1 = SIZE + SIZE * i; - ordinate2 = SIZE + SIZE * (qrtree.currpiv(&qrtree, k, i)); - libhqr_drawline(absciss1, ordinate1, absciss2, ordinate2, k, tree); - } - } - /* Drawing the rectangles */ for (i = k + 1; i < maxMN; i++){ absciss1 = ((SIZE * 3) /4) + SIZE * tiles[i]; ordinate1 = ((SIZE * 3) /4) + SIZE * i; libhqr_drawTS(absciss1, ordinate1, WIDTH, HEIGHT, k, tree); j = qrtree.currpiv(&qrtree, k, i); - absciss1 = ((SIZE * 3) /4) + SIZE * tiles[i]; ordinate1 = ((SIZE * 3) /4) + SIZE * j; libhqr_drawTT(absciss1, ordinate1, WIDTH, HEIGHT, k, tree); }