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