From 7c759c766481a134cec3003d58d96841f54166fd Mon Sep 17 00:00:00 2001 From: Thulinma Date: Mon, 8 Feb 2016 16:02:23 +0100 Subject: [PATCH] Optimized getWritableIdentifier to improve the speed of MistInBuffer even further. --- lib/dtsc.h | 2 ++ lib/dtscmeta.cpp | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/dtsc.h b/lib/dtsc.h index cf6752f1..4b2de033 100644 --- a/lib/dtsc.h +++ b/lib/dtsc.h @@ -282,6 +282,8 @@ namespace DTSC { int width; int height; int fpks; + private: + std::string cachedIdent; }; ///\brief Class for storage of meta data diff --git a/lib/dtscmeta.cpp b/lib/dtscmeta.cpp index 4125c47c..d431f222 100644 --- a/lib/dtscmeta.cpp +++ b/lib/dtscmeta.cpp @@ -1376,9 +1376,11 @@ namespace DTSC { ///\brief Returns a writable identifier for a track, to prevent overwrites on readout std::string Track::getWritableIdentifier() { + if (cachedIdent.size()){return cachedIdent;} std::stringstream result; result << getIdentifier() << "_" << trackID; - return result.str(); + cachedIdent = result.str(); + return cachedIdent; } ///\brief Determines the "packed" size of a track @@ -1418,8 +1420,9 @@ namespace DTSC { ///\brief Writes a track to a pointer void Track::writeTo(char *& p) { - writePointer(p, convertShort(getWritableIdentifier().size()), 2); - writePointer(p, getWritableIdentifier()); + std::string trackIdent = getWritableIdentifier(); + writePointer(p, convertShort(trackIdent.size()), 2); + writePointer(p, trackIdent); writePointer(p, "\340", 1);//Begin track object writePointer(p, "\000\011fragments\002", 12); writePointer(p, convertInt(fragments.size() * 11), 4);