diff --git a/include/libhqr.h b/include/libhqr.h index 04871044fa5e57c601d3353acb531ce38622e467..9e8baa03fdacdcab59a0fc56461a0bf2bbed2a8c 100644 --- a/include/libhqr.h +++ b/include/libhqr.h @@ -191,13 +191,14 @@ int libhqr_hqr_init( libhqr_tree_t *qrtree, void libhqr_hqr_finalize( libhqr_tree_t *qrtree ); /* - * function for treewalk + * function for drawing the tree */ void libhqr_treewalk(const libhqr_tree_t *qrtree,int k, int *tiles, FILE *file); void draw_rectangle(int k, int p, int m, int *tiles, FILE *file); void draw_horizontal_line(int k, int p, int m, int *tiles, FILE *file); void draw_vertical_line(int k, int p, int m, int *tiles, FILE *file); +void libhqr_print_tree(const libhqr_tree_t *qrtree, libhqr_tiledesc_t *matrix); /* * Debugging functions diff --git a/src/treewalk.c b/src/treewalk.c index b5e4d746c911fc472e1b2032d38b09fd1af25e78..4f6e494a5390c9de3d9e09d2e30e8cfce14911e2 100644 --- a/src/treewalk.c +++ b/src/treewalk.c @@ -13,11 +13,14 @@ * @date 2017-03-21 * */ + #include "libhqr.h" #include "libdraw.h" #include "queue.h" #include <stdio.h> #include <assert.h> +#include <stdlib.h> +#include <string.h> /* * Common prameters to the 2 following functions: @@ -99,10 +102,10 @@ void libhqr_treewalk(const libhqr_tree_t *qrtree, int k, int *tiles, FILE *file) (qrtree->prevpiv(qrtree, k, p, p) != qrtree->mt) ) { libhqr_queue_tile_push(&tt,p); - printf("PUSH TT: %d\n", p); + /* printf("PUSH TT: %d\n", p); */ } libhqr_queue_tile_push(&ts, p); - printf("PUSH TS: %d\n", p); + /* printf("PUSH TS: %d\n", p); */ p = qrtree->prevpiv(qrtree, k, pivot, p); assert( p != -1 ); } @@ -112,12 +115,12 @@ void libhqr_treewalk(const libhqr_tree_t *qrtree, int k, int *tiles, FILE *file) /* Unstack all element killed by TS, or by TT and already discovered */ while(tsid != -1 && tsid != ttid) { - printf( "TS=%d, TT=%d\n", tsid, ttid ); + /* printf( "TS=%d, TT=%d\n", tsid, ttid ); */ tsid = libhqr_queue_tile_pop(&ts); - printf("POP TS: %d\n", tsid); - printf("Call function on (%d, %d)\n", - qrtree->currpiv(qrtree, k, tsid), tsid ); + /* printf("POP TS: %d\n", tsid); */ + /* printf("Call function on (%d, %d)\n", + qrtree->currpiv(qrtree, k, tsid), tsid ); */ draw_horizontal_line(k, qrtree->currpiv(qrtree, k, tsid), tsid, tiles, file); draw_vertical_line(k, qrtree->currpiv(qrtree, k, tsid), tsid, tiles, file); tsid = libhqr_queue_tile_head(&ts); @@ -128,3 +131,30 @@ void libhqr_treewalk(const libhqr_tree_t *qrtree, int k, int *tiles, FILE *file) assert(ts == NULL); assert(tt == NULL); } + +/**************************************************** + * LIBHQR_PRINT_TREE + ***************************************************/ + +void libhqr_print_tree(const libhqr_tree_t *qrtree, libhqr_tiledesc_t *matrix){ + int maxMN, minMN, k, i; + int *tiles; + FILE *file; + maxMN = libhqr_imax(matrix->mt, matrix->nt ); + minMN = libhqr_imin(matrix->mt, matrix->nt ); + tiles = (int*)malloc(maxMN*sizeof(int)); + memset( tiles, 0, maxMN*sizeof(int) ); + file = fopen("tree.svg","w+"); + libhqr_writeheader(file); + for (k = 0; k < minMN; k++){ + /* Drawing the lines */ + libhqr_treewalk(qrtree, k, tiles, file); + /* Drawing the rectangles */ + for (i = k + 1; i < maxMN; i++){ + draw_rectangle(k, qrtree->currpiv(qrtree, k, i), i, tiles, file); + } + } + libhqr_writeend(file); + fclose(file); + free(tiles); +} diff --git a/testings/testing_treedraw.c b/testings/testing_treedraw.c index d29066ce8b1ff71ea21d0a0ec931063cb4bb3446..d37809f3e40a0746b76646a99cdf35f9991dc26c 100644 --- a/testings/testing_treedraw.c +++ b/testings/testing_treedraw.c @@ -26,31 +26,12 @@ main(int argc, char ** argv) { libhqr_tree_t qrtree; libhqr_tiledesc_t matrix; - int maxMN, k, i; - int *tiles; matrix.nodes = 1; matrix.p = 1; matrix.mt = 16; matrix.nt = 4; libhqr_hqr_init( &qrtree, LIBHQR_QR, &matrix, LIBHQR_BINARY_TREE, LIBHQR_FLAT_TREE, 1, 2, 0, 0); - maxMN = libhqr_imax(matrix.mt, matrix.nt ); - tiles = (int*)malloc(maxMN*sizeof(int)); - for ( int i = 0; i < maxMN; i++){ - tiles[i] = 0; - } - FILE *tree = fopen("tree.svg","w+"); - libhqr_writeheader(tree); - for (k = 0; k < 3; k++){ - /* Drawing the lines */ - libhqr_treewalk(&qrtree, k, tiles, tree); - /* Drawing the rectangles */ - for (i = k + 1; i < maxMN; i++){ - draw_rectangle(k, qrtree.currpiv(&qrtree, k, i), i, tiles, tree); - } - } - libhqr_writeend(tree); + libhqr_print_tree( &qrtree, &matrix); libhqr_hqr_finalize( &qrtree ); - free(tiles); - fclose(tree); return 1; }