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