]> granicus.if.org Git - graphviz/commitdiff
patchwork: use a 'size_t' for treenode children count
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 1 Dec 2022 01:41:20 +0000 (17:41 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 4 Dec 2022 18:02:35 +0000 (10:02 -0800)
This also involves a cascading series of updates to other variables that are
used to interact with `n_children`. Squashes four -Wsign-conversion warnings.

lib/patchwork/patchwork.c
lib/patchwork/tree_map.c
lib/patchwork/tree_map.h

index 2ee03ce2152d6abe1c16d2b576cf5fc3be21f756..6eaf2f5a426e40b8f65a8f338882768872b6e2ad 100644 (file)
@@ -26,7 +26,7 @@ struct treenode_t {
        Agnode_t *n;
     } u;
     int kind;
-    int n_children;
+    size_t n_children;
 };
 
 #define DFLT_SZ 1.0
@@ -92,12 +92,13 @@ static treenode_t *mkTree (Agraph_t * g, attrsym_t* gp, attrsym_t* ap, attrsym_t
     treenode_t *cp;
     treenode_t *first = 0;
     treenode_t *prev = 0;
-    int i, n_children = 0;
+    int i;
     double area = 0;
 
     p->kind = AGRAPH;
     p->u.subg = g;
 
+    size_t n_children = 0;
     for (i = 1; i <= GD_n_cluster(g); i++) {
        subg = GD_clust(g)[i];
        cp = mkTree (subg, gp, ap, mp);
@@ -143,23 +144,22 @@ static int nodecmp (treenode_t** p0, treenode_t** p1)
 static void layoutTree(treenode_t * tree)
 {
     rectangle *recs;
-    int i, nc;
     treenode_t* cp;
 
     /* if (tree->kind == AGNODE) return; */
     if (tree->n_children == 0) return;
 
-    nc = tree->n_children;
+    size_t nc = tree->n_children;
     treenode_t** nodes = gv_calloc(nc, sizeof(treenode_t*));
     cp = tree->leftchild;
-    for (i = 0; i < nc; i++) {
+    for (size_t i = 0; i < nc; i++) {
        nodes[i] = cp;
        cp = cp->rightsib;
     }
 
     qsort (nodes, nc, sizeof(treenode_t*), (qsort_cmpf)nodecmp);
     double* areas_sorted = gv_calloc(nc, sizeof(double));
-    for (i = 0; i < nc; i++) {
+    for (size_t i = 0; i < nc; i++) {
        areas_sorted[i] = nodes[i]->area;
     }
     if (tree->area == tree->child_area)
@@ -178,7 +178,7 @@ static void layoutTree(treenode_t * tree)
     }
     if (Verbose)
        fprintf (stderr, "rec %f %f %f %f\n", tree->r.x[0], tree->r.x[1], tree->r.size[0], tree->r.size[1]);
-    for (i = 0; i < nc; i++) {
+    for (size_t i = 0; i < nc; i++) {
        nodes[i]->r = recs[i];
        if (Verbose)
            fprintf (stderr, "%f - %f %f %f %f = %f (%f %f %f %f)\n", areas_sorted[i],
@@ -192,7 +192,7 @@ static void layoutTree(treenode_t * tree)
     free (recs);
 
     cp = tree->leftchild;
-    for (i = 0; i < nc; i++) {
+    for (size_t i = 0; i < nc; i++) {
        if (cp->kind == AGRAPH)
            layoutTree (cp);
        cp = cp->rightsib;
@@ -257,9 +257,9 @@ static void freeTree (treenode_t* tp)
 {
     treenode_t* cp = tp->leftchild;
     treenode_t* rp;
-    int i, nc = tp->n_children;
+    size_t nc = tp->n_children;
 
-    for (i = 0; i < nc; i++) {
+    for (size_t i = 0; i < nc; i++) {
        rp = cp->rightsib;
        freeTree (cp);
        cp = rp;
index 2dfd4ec9979a5f40ce2f8ac6018899f2c7dc3150..781f36af8105b257bf735f8c131b3634e45950bb 100644 (file)
@@ -9,11 +9,12 @@
  *************************************************************************/
 
 #include <cgraph/alloc.h>
+#include <cgraph/prisize_t.h>
 #include <common/render.h>
 #include <math.h>
 #include <patchwork/tree_map.h>
 
-static void squarify(int n, double *area, rectangle *recs, int nadded, double maxarea, double minarea, double totalarea,
+static void squarify(size_t n, double *area, rectangle *recs, size_t nadded, double maxarea, double minarea, double totalarea,
                     double asp, rectangle fillrec){
   /* add a list of area in fillrec using squarified treemap alg.
      n: number of items to add
@@ -25,13 +26,12 @@ static void squarify(int n, double *area, rectangle *recs, int nadded, double ma
      fillrec: the rectangle to be filled in.
    */
   double w = fmin(fillrec.size[0], fillrec.size[1]);
-  int i;
 
-  if (n <= 0) return;
+  if (n == 0) return;
 
   if (Verbose) {
     fprintf(stderr, "trying to add to rect {%f +/- %f, %f +/- %f}\n",fillrec.x[0], fillrec.size[0], fillrec.x[1], fillrec.size[1]);
-    fprintf(stderr, "total added so far = %d\n", nadded);
+    fprintf(stderr, "total added so far = %" PRISIZE_T "\n", nadded);
   }
 
   if (nadded == 0){
@@ -55,12 +55,14 @@ static void squarify(int n, double *area, rectangle *recs, int nadded, double ma
       squarify(n, area, recs, ++nadded, newmaxarea, newminarea, s, newasp, fillrec);
     } else {
       /* aspectio worsen if add another area, fixed the already added recs */
-      if (Verbose) fprintf(stderr,"adding %d items, total area = %f, w = %f, area/w=%f\n",nadded, totalarea, w, totalarea/w);
+      if (Verbose) fprintf(stderr, "adding %" PRISIZE_T
+                           " items, total area = %f, w = %f, area/w=%f\n",
+                           nadded, totalarea, w, totalarea/w);
       if (fillrec.size[0] <= fillrec.size[1]) {
         // tall rec. fix the items along x direction, left to right, at top
        hh = totalarea/w;
        xx = fillrec.x[0] - fillrec.size[0]/2;
-       for (i = 0; i < nadded; i++){
+       for (size_t i = 0; i < nadded; i++){
          recs[i].size[1] = hh;
          ww = area[i]/hh;
          recs[i].size[0] = ww;
@@ -73,7 +75,7 @@ static void squarify(int n, double *area, rectangle *recs, int nadded, double ma
       } else {/* short rec. fix along y top to bot, at left*/
        ww = totalarea/w;
        yy = fillrec.x[1] + fillrec.size[1]/2;
-       for (i = 0; i < nadded; i++){
+       for (size_t i = 0; i < nadded; i++){
          recs[i].size[0] = ww;
          hh = area[i]/ww;
          recs[i].size[1] = hh;
@@ -97,18 +99,16 @@ static void squarify(int n, double *area, rectangle *recs, int nadded, double ma
  *  fillred - rectangle to be filled
  *  return array of rectangles 
  */
-rectangle* tree_map(int n, double *area, rectangle fillrec){
+rectangle* tree_map(size_t n, double *area, rectangle fillrec){
   /* fill a rectangle rec with n items, each item i has area[i] area. */
-  int i;
   double total = 0, minarea = 1., maxarea = 0., asp = 1, totalarea = 0;
-  int nadded = 0;
 
-  for (i = 0; i < n; i++) total += area[i]; 
+  for (size_t i = 0; i < n; i++) total += area[i];
     /* make sure there is enough area */
   if (total > fillrec.size[0] * fillrec.size[1] + 0.001)
     return NULL;
   
   rectangle *recs = gv_calloc(n, sizeof(rectangle));
-  squarify(n, area, recs, nadded, maxarea, minarea, totalarea, asp, fillrec);
+  squarify(n, area, recs, 0, maxarea, minarea, totalarea, asp, fillrec);
   return recs;
 }
index bc4f35b44011318534ca53625b24a61eb3e63dfb..a71a16336fbba93a49615a2461de8419ede5fc7a 100644 (file)
 #pragma once
 
 #include <sparse/SparseMatrix.h>
+#include <stddef.h>
 
 typedef struct {
   double x[2];/* center */
   double size[2]; /* total width/height*/
 } rectangle;
 
-extern rectangle* tree_map(int n, double *area, rectangle fillrec);
+extern rectangle* tree_map(size_t n, double *area, rectangle fillrec);