Revision: 45828
          http://brlcad.svn.sourceforge.net/brlcad/?rev=45828&view=rev
Author:   brlcad
Date:     2011-08-08 22:15:46 +0000 (Mon, 08 Aug 2011)

Log Message:
-----------
now that mk_sketch() releases memory, we can simplify by creating the sketch 
and all segments on the stack.

Modified Paths:
--------------
    brlcad/trunk/src/proc-db/sketch.c

Modified: brlcad/trunk/src/proc-db/sketch.c
===================================================================
--- brlcad/trunk/src/proc-db/sketch.c   2011-08-08 22:05:18 UTC (rev 45827)
+++ brlcad/trunk/src/proc-db/sketch.c   2011-08-08 22:15:46 UTC (rev 45828)
@@ -41,10 +41,10 @@
 int
 main(int argc, char **argv)
 {
-    struct rt_sketch_internal *skt;
-    struct bezier_seg *bsg;
-    struct line_seg *lsg;
-    struct carc_seg *csg;
+    struct rt_sketch_internal skt;
+    struct bezier_seg bsg;
+    struct line_seg lsg[4];
+    struct carc_seg csg;
     size_t i;
     point_t V;
     vect_t u_vec, v_vec;
@@ -68,71 +68,69 @@
     VSET(u_vec, 1, 0, 0);
     VSET(v_vec, 0, 1, 0);
 
-    skt = (struct rt_sketch_internal *)bu_calloc(1, sizeof(struct 
rt_sketch_internal), "sketch");
-    skt->magic = RT_SKETCH_INTERNAL_MAGIC;
-    VMOVE(skt->V, V);
-    VMOVE(skt->u_vec, u_vec);
-    VMOVE(skt->v_vec, v_vec);
-    skt->vert_count = 10;
-    skt->verts = (point2d_t *)bu_calloc(skt->vert_count, sizeof(point2d_t), 
"verts");
-    for (i=0; i<skt->vert_count; i++) {
-       V2MOVE(skt->verts[i], verts[i]);
+    skt.magic = RT_SKETCH_INTERNAL_MAGIC;
+    VMOVE(skt.V, V);
+    VMOVE(skt.u_vec, u_vec);
+    VMOVE(skt.v_vec, v_vec);
+    skt.vert_count = 10;
+    skt.verts = (point2d_t *)bu_calloc(skt.vert_count, sizeof(point2d_t), 
"verts");
+    for (i=0; i<skt.vert_count; i++) {
+       V2MOVE(skt.verts[i], verts[i]);
     }
 
-    skt->curve.count = 6;
-    skt->curve.reverse = (int *)bu_calloc(skt->curve.count, sizeof(int), 
"sketch: reverse");
+    skt.curve.count = 6;
+    skt.curve.reverse = (int *)bu_calloc(skt.curve.count, sizeof(int), 
"reverse");
 
-    skt->curve.segment = (genptr_t *)bu_calloc(skt->curve.count, 
sizeof(genptr_t), "segs");
-    bsg = (struct bezier_seg *)bu_malloc(sizeof(struct bezier_seg), "sketch: 
bsg");
-    bsg->magic = CURVE_BEZIER_MAGIC;
-    bsg->degree = 4;
-    bsg->ctl_points = (int *)bu_calloc(bsg->degree+1, sizeof(int), "sketch: 
bsg->ctl_points");
-    bsg->ctl_points[0] = 4;
-    bsg->ctl_points[1] = 7;
-    bsg->ctl_points[2] = 9;
-    bsg->ctl_points[3] = 8;
-    bsg->ctl_points[4] = 0;
-    skt->curve.segment[0] = (genptr_t)bsg;
+    skt.curve.segment = (genptr_t *)bu_calloc(skt.curve.count, 
sizeof(genptr_t), "segs");
 
-    lsg = (struct line_seg *)bu_malloc(sizeof(struct line_seg), "sketch: lsg");
-    lsg->magic = CURVE_LSEG_MAGIC;
-    lsg->start = 0;
-    lsg->end = 1;
+    bsg.magic = CURVE_BEZIER_MAGIC;
+    bsg.degree = 4;
+    bsg.ctl_points = (int *)bu_calloc(bsg.degree+1, sizeof(int), 
"bsg.ctl_points");
+    bsg.ctl_points[0] = 4;
+    bsg.ctl_points[1] = 7;
+    bsg.ctl_points[2] = 9;
+    bsg.ctl_points[3] = 8;
+    bsg.ctl_points[4] = 0;
+    skt.curve.segment[0] = (genptr_t)&bsg;
 
-    skt->curve.segment[1] = (genptr_t)lsg;
+    lsg[0].magic = CURVE_LSEG_MAGIC;
+    lsg[0].start = 0;
+    lsg[0].end = 1;
+    skt.curve.segment[1] = (genptr_t)&lsg[0];
 
-    lsg = (struct line_seg *)bu_malloc(sizeof(struct line_seg), "sketch: lsg");
-    lsg->magic = CURVE_LSEG_MAGIC;
-    lsg->start = 1;
-    lsg->end = 2;
+    lsg[1].magic = CURVE_LSEG_MAGIC;
+    lsg[1].start = 1;
+    lsg[1].end = 2;
+    skt.curve.segment[2] = (genptr_t)&lsg[1];
 
-    skt->curve.segment[2] = (genptr_t)lsg;
+    lsg[2].magic = CURVE_LSEG_MAGIC;
+    lsg[2].start = 2;
+    lsg[2].end = 3;
+    skt.curve.segment[3] = (genptr_t)&lsg[2];
 
-    lsg = (struct line_seg *)bu_malloc(sizeof(struct line_seg), "sketch: lsg");
-    lsg->magic = CURVE_LSEG_MAGIC;
-    lsg->start = 2;
-    lsg->end = 3;
+    lsg[3].magic = CURVE_LSEG_MAGIC;
+    lsg[3].start = 3;
+    lsg[3].end = 4;
+    skt.curve.segment[4] = (genptr_t)&lsg[3];
 
-    skt->curve.segment[3] = (genptr_t)lsg;
+    csg.magic = CURVE_CARC_MAGIC;
+    csg.radius = -1.0;
+    csg.start = 6;
+    csg.end = 5;
+    skt.curve.segment[5] = (genptr_t)&csg;
 
-    lsg = (struct line_seg *)bu_malloc(sizeof(struct line_seg), "sketch: lsg");
-    lsg->magic = CURVE_LSEG_MAGIC;
-    lsg->start = 3;
-    lsg->end = 4;
-
-    skt->curve.segment[4] = (genptr_t)lsg;
-
-    csg = (struct carc_seg *)bu_malloc(sizeof(struct carc_seg), "sketch: csg");
-    csg->magic = CURVE_CARC_MAGIC;
-    csg->radius = -1.0;
-    csg->start = 6;
-    csg->end = 5;
-
-    skt->curve.segment[5] = (genptr_t)csg;
-
+    /* write the sketch out */
     outfp = wdb_fopen("sketch.g");
     mk_id(outfp, "sketch test");
-    mk_sketch(outfp, "test_sketch", skt);
+    mk_sketch(outfp, "test_sketch", &skt);
+
+    /* cleanup and release */
+    wdb_close(outfp);
+    bu_free(bsg.ctl_points, "bsg.ctl_points");
+    bu_free(skt.curve.segment, "segs");
+    bu_free(skt.curve.reverse, "reverse");
+    bu_free(skt.verts, "verts");
+
     return 0;
 }
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
uberSVN's rich system and user administration capabilities and model 
configuration take the hassle out of deploying and managing Subversion and 
the tools developers use with it. Learn more about uberSVN and get a free 
download at:  http://p.sf.net/sfu/wandisco-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to