Revision: 55939
          http://sourceforge.net/p/brlcad/code/55939
Author:   starseeker
Date:     2013-07-02 19:07:09 +0000 (Tue, 02 Jul 2013)
Log Message:
-----------
Use a queue to re-use arrays rather than always mallocing and freeing

Modified Paths:
--------------
    brlcad/trunk/include/brep.h
    brlcad/trunk/src/libbrep/opennurbs_ext.cpp

Modified: brlcad/trunk/include/brep.h
===================================================================
--- brlcad/trunk/include/brep.h 2013-07-02 18:36:12 UTC (rev 55938)
+++ brlcad/trunk/include/brep.h 2013-07-02 19:07:09 UTC (rev 55939)
@@ -36,6 +36,7 @@
 #include <vector>
 #include <list>
 #include <iostream>
+#include <queue>
 #include <assert.h>
 
 
@@ -1634,6 +1635,7 @@
 
     const ON_BrepFace* m_face;
     BBNode* m_root;
+    std::queue<ON_Plane *> f_queue;
 };
 
 

Modified: brlcad/trunk/src/libbrep/opennurbs_ext.cpp
===================================================================
--- brlcad/trunk/src/libbrep/opennurbs_ext.cpp  2013-07-02 18:36:12 UTC (rev 
55938)
+++ brlcad/trunk/src/libbrep/opennurbs_ext.cpp  2013-07-02 19:07:09 UTC (rev 
55939)
@@ -616,6 +616,10 @@
        TRACE("u: [" << u[0] << ", " << u[1] << "]");
        TRACE("v: [" << v[0] << ", " << v[1] << "]");
        TRACE("m_root: " << m_root);
+       while (!f_queue.empty()) {
+           bu_free(f_queue.front(), "free subsurface frames array");
+           f_queue.pop();
+       }
     }
 
 
@@ -1041,7 +1045,7 @@
                if (prev_knot) localsurf->FrameAt(usplit, vsplit, frames[4]);
 
                ON_Plane *newframes;
-               newframes = (ON_Plane *)bu_malloc(9*sizeof(ON_Plane), "new 
frames");
+               if (!f_queue.empty()) {newframes = f_queue.front(); 
f_queue.pop();} else {newframes = (ON_Plane *)bu_malloc(9*sizeof(ON_Plane), 
"new frames");}
                newframes[0] = frames[0];
                newframes[1] = sharedframes[0];
                newframes[2] = frames[4];
@@ -1070,7 +1074,8 @@
                newframes[4] = frames[6];
                quads[3] = subdivideSurface(q3surf, firstu, secondv, newframes, 
divDepth+1, depthLimit, prev_knot);
                delete q3surf;
-               bu_free(newframes, "free subsurface frames array");
+               memset(newframes, 0, 9 * sizeof(ON_Plane *));
+               f_queue.push(newframes);
 
                parent->m_trimmed = true;
                parent->m_checkTrim = false;
@@ -1212,8 +1217,7 @@
                localsurf->FrameAt(usplit, v.Max(), sharedframes[1]);
 
                ON_Plane *newframes;
-               newframes = (ON_Plane *) bu_malloc(9 * sizeof(ON_Plane),
-                       "new frames");
+                if (!f_queue.empty()) {newframes = f_queue.front(); 
f_queue.pop();} else {newframes = (ON_Plane *)bu_malloc(9*sizeof(ON_Plane), 
"new frames");}
                newframes[0] = frames[0];
                newframes[1] = sharedframes[0];
                newframes[2] = sharedframes[1];
@@ -1244,7 +1248,8 @@
                }
                delete west;
 
-               bu_free(newframes, "free subsurface frames array");
+               memset(newframes, 0, 9 * sizeof(ON_Plane *));
+               f_queue.push(newframes);
 
                parent->m_trimmed = true;
                parent->m_checkTrim = false;
@@ -1370,8 +1375,7 @@
                localsurf->FrameAt(u.Max(), vsplit, sharedframes[1]);
 
                ON_Plane *newframes;
-               newframes = (ON_Plane *) bu_malloc(9 * sizeof(ON_Plane),
-                       "new frames");
+                if (!f_queue.empty()) {newframes = f_queue.front(); 
f_queue.pop();} else {newframes = (ON_Plane *)bu_malloc(9*sizeof(ON_Plane), 
"new frames");}
                newframes[0] = frames[0];
                newframes[1] = frames[1];
                newframes[2] = sharedframes[1];
@@ -1401,7 +1405,8 @@
                }
                delete north;
 
-               bu_free(newframes, "free subsurface frames array");
+               memset(newframes, 0, 9 * sizeof(ON_Plane *));
+                f_queue.push(newframes);
 
                parent->m_trimmed = true;
                parent->m_checkTrim = false;

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


------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to