<p>The dynamic case is very rare (I have never seen an instance where it is actually hit), as such I used <code>strcat</code> instead of <code>memcpy</code>.</p>
<p>The new implementation is not meant to be a super performance increase (even though it aids a little since there is a lot of diagnostics going on when initially parsing the mkv), but mostly a rewrite of the old implementation with an added bonus (not doing dynamic initialization in 99.999..% of the cases).</p>
<p>One could use <code>std::string</code> for the purpose, but the C++03 grammar in terms of <code>std::basic_string<...></code> is not really my favorite part of the Standard.</p>
<blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<p>In my opinion, adding branching just to potentially avoid dynamic allocation is debatable. I didn’t run a benchmark but it seems overkill in any case. If you are really concerned with the execution speed of a non critical function, I would argue that memcpy will be probably be faster than strcat :)</p>
</blockquote>
<p>I agree with ou that branching is evil, and if you want to clean up the implementation you are more than welcome to! I will make a note that the function <em>could</em> be refactored, but will work on other parts of the module during the upcoming days.</p>
<p>Thanks!</p>