[librsvg/rustification] rsvg_path_builder_init(): Remove n_elements argument



commit ddd77f691f88db16926c77610a61a28787f0e15d
Author: Federico Mena Quintero <federico gnome org>
Date:   Fri Oct 28 08:53:38 2016 -0500

    rsvg_path_builder_init(): Remove n_elements argument
    
    The array of cairo_path_data grows as needed, anyway; we just
    start out with a reasonable capacity now, instead of having
    each caller guesstimate on its own.
    
    This will help porting this code to Rust.

 rsvg-path.c   |   10 ++++++----
 rsvg-path.h   |    4 ++--
 rsvg-shapes.c |   20 ++++++--------------
 3 files changed, 14 insertions(+), 20 deletions(-)
---
diff --git a/rsvg-path.c b/rsvg-path.c
index eda05b1..3a5295a 100644
--- a/rsvg-path.c
+++ b/rsvg-path.c
@@ -71,10 +71,12 @@ rsvg_path_builder_add_element (RsvgPathBuilder *builder,
 }
 
 void
-rsvg_path_builder_init (RsvgPathBuilder *builder,
-                        int n_elements)
+rsvg_path_builder_init (RsvgPathBuilder *builder)
 {
-  builder->path_data = g_array_sized_new (FALSE, FALSE, sizeof (cairo_path_data_t), n_elements);
+  /* The starting capacity is just to avoid lots of little resizes while growing
+   * a small path.  After that, it will grow as needed.
+   */
+  builder->path_data = g_array_sized_new (FALSE, FALSE, sizeof (cairo_path_data_t), 32);
   builder->last_move_to_index = -1;
 }
 
@@ -736,7 +738,7 @@ rsvg_parse_path (const char *path_str)
 {
     RSVGParsePathCtx ctx;
 
-    rsvg_path_builder_init (&ctx.builder, 32);
+    rsvg_path_builder_init (&ctx.builder);
 
     ctx.cp.point.x = 0.0;
     ctx.cp.point.y = 0.0;
diff --git a/rsvg-path.h b/rsvg-path.h
index a0bf3b3..25e67fa 100644
--- a/rsvg-path.h
+++ b/rsvg-path.h
@@ -40,8 +40,8 @@ typedef struct {
 } RsvgPathBuilder;
 
 G_GNUC_INTERNAL
-void rsvg_path_builder_init (RsvgPathBuilder *builder,
-                             int n_elements);
+void rsvg_path_builder_init (RsvgPathBuilder *builder);
+
 G_GNUC_INTERNAL
 void rsvg_path_builder_move_to (RsvgPathBuilder *builder,
                                 double x,
diff --git a/rsvg-shapes.c b/rsvg-shapes.c
index 20f0777..b883474 100644
--- a/rsvg-shapes.c
+++ b/rsvg-shapes.c
@@ -165,15 +165,7 @@ _rsvg_node_poly_build_path (const char *value,
         return NULL;
     }
 
-    /* Calculate the number of cairo_path_data_t we'll need:
-     *
-     *     pointlist_len / 2 -> number of commands
-     *     pointlist_len / 2 -> number of points
-     * +   1                 -> closepath
-     * ---------------------------------------------
-     *     pointlist_len + 1 -> total
-     */
-    rsvg_path_builder_init (&builder, pointlist_len + 1);
+    rsvg_path_builder_init (&builder);
 
     rsvg_path_builder_move_to (&builder, pointlist[0], pointlist[1]);
 
@@ -293,7 +285,7 @@ _rsvg_node_line_draw (RsvgNode * overself, RsvgDrawingCtx * ctx, int dominate)
     RsvgNodeLine *self = (RsvgNodeLine *) overself;
     double x1, y1, x2, y2;
 
-    rsvg_path_builder_init (&builder, 4);
+    rsvg_path_builder_init (&builder);
 
     x1 = _rsvg_css_normalize_length (&self->x1, ctx, 'h');
     y1 = _rsvg_css_normalize_length (&self->y1, ctx, 'v');
@@ -416,7 +408,7 @@ _rsvg_node_rect_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
     if (rx == 0) {
         /* Easy case, no rounded corners */
 
-        rsvg_path_builder_init (&builder, 11);
+        rsvg_path_builder_init (&builder);
 
         rsvg_path_builder_move_to (&builder, x, y);
         rsvg_path_builder_line_to (&builder, x + w, y);
@@ -467,7 +459,7 @@ _rsvg_node_rect_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
         right_y1 = left_y1;
         right_y2 = left_y2;
 
-        rsvg_path_builder_init (&builder, 32); /* an estimate; the arc segments may grow the array anyway */
+        rsvg_path_builder_init (&builder);
 
         rsvg_path_builder_move_to (&builder, top_x1, top_y);
         rsvg_path_builder_line_to (&builder, top_x2, top_y);
@@ -569,7 +561,7 @@ _rsvg_node_circle_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
 
     /* approximate a circle using 4 bezier curves */
 
-    rsvg_path_builder_init (&builder, 19);
+    rsvg_path_builder_init (&builder);
 
     rsvg_path_builder_move_to (&builder, cx + r, cy);
 
@@ -665,7 +657,7 @@ _rsvg_node_ellipse_draw (RsvgNode * self, RsvgDrawingCtx * ctx, int dominate)
 
     /* approximate an ellipse using 4 bezier curves */
 
-    rsvg_path_builder_init (&builder, 19);
+    rsvg_path_builder_init (&builder);
 
     rsvg_path_builder_move_to (&builder, cx + rx, cy);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]