From 231eae15542410b186c22c39d97ed97dcc37ee7b Mon Sep 17 00:00:00 2001 From: Raphael Boucherie <raphael.boucherie@inria.fr> Date: Fri, 14 Apr 2017 17:27:21 +0200 Subject: [PATCH] added print_tree function --- include/libhqr.h | 3 ++- src/treewalk.c | 42 +++++++++++++++++++++++++++++++------ testings/testing_treedraw.c | 21 +------------------ 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/include/libhqr.h b/include/libhqr.h index 0487104..9e8baa0 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 b5e4d74..4f6e494 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 d29066c..d37809f 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; } -- GitLab