]> granicus.if.org Git - graphviz/commitdiff
neatogen: remove upfront allocation of trigraph edges
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Fri, 18 Nov 2022 01:27:12 +0000 (17:27 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 19 Nov 2022 05:29:08 +0000 (21:29 -0800)
Following on from fc465488e1e62fe5ef879b379a07ef272431f400, this removes
assumptions about how many total edges will be generated by this algorithm. New
edges are now allocated on demand when appending.

lib/neatogen/multispline.c

index eec809fea8e7f9c341128c97963c85ae5d3f17f0..0da8a3eb4aec5268c0e4b9d88bece74d7bd2670c 100644 (file)
@@ -528,6 +528,8 @@ static ipair sharedEdge(int *p, int *q)
  * segment seg.
  */
 static void addTriEdge(tgraph *g, int t, int h, ipair seg) {
+    g->edges = gv_recalloc(g->edges, g->nedges, g->nedges + 1,
+                           sizeof(g->edges[0]));
     tedge *ep = g->edges + g->nedges;
     tnode *tp = g->nodes + t;
     tnode *hp = g->nodes + h;
@@ -579,10 +581,7 @@ static tgraph *mkTriGraph(surface_t * sf, int maxv, pointf * pts)
     g->nnodes = sf->nfaces + 2;
     g->nodes = N_GNEW(g->nnodes, tnode);
 
-    /* allow 1 possible extra edge per triangle, plus 
-     * obstacles can have at most maxv triangles touching 
-     */
-    g->edges = N_GNEW(ne/2 + 2 * maxv, tedge);
+    g->edges = NULL;
     g->nedges = 0;
 
     for (i = 0; i < sf->nfaces; i++) {