Improve wxJSScriptWrapper performance

The previous implementation was very inefficent on larger scripts
This commit is contained in:
Tobias Taschner 2022-09-09 10:39:30 +02:00
parent 40ff38b63b
commit 4953cf65b4
No known key found for this signature in database
GPG key ID: AE6ECD71294F87FD

View file

@ -33,38 +33,42 @@ public:
};
wxJSScriptWrapper(const wxString& js, OutputType outputType)
: m_escapedCode(js), m_outputType(outputType)
: m_outputType(outputType)
{
// Adds one escape level.
const char *charsNeededToBeEscaped = "\\\"\n\r\v\t\b\f";
for (
size_t pos = m_escapedCode.find_first_of(charsNeededToBeEscaped, 0);
pos != wxString::npos;
pos = m_escapedCode.find_first_of(charsNeededToBeEscaped, pos)
) {
switch (m_escapedCode[pos].GetValue())
m_escapedCode.reserve(js.size());
for (wxString::const_iterator it = js.begin(); it != js.end(); ++it)
{
if (wxStrchr(charsNeededToBeEscaped, *it))
{
case 0x0A: // '\n'
m_escapedCode[pos] = 'n';
break;
case 0x0D: // '\r'
m_escapedCode[pos] = 'r';
break;
case 0x0B: // '\v'
m_escapedCode[pos] = 'v';
break;
case 0x09: // '\t'
m_escapedCode[pos] = 't';
break;
case 0x08: // '\b'
m_escapedCode[pos] = 'b';
break;
case 0x0C: // '\f'
m_escapedCode[pos] = 'f';
break;
m_escapedCode += '\\';
switch ((wxChar) *it)
{
case 0x0A: // '\n'
m_escapedCode += 'n';
break;
case 0x0D: // '\r'
m_escapedCode += 'r';
break;
case 0x0B: // '\v'
m_escapedCode += 'v';
break;
case 0x09: // '\t'
m_escapedCode += 't';
break;
case 0x08: // '\b'
m_escapedCode += 'b';
break;
case 0x0C: // '\f'
m_escapedCode += 'f';
break;
default:
m_escapedCode += *it;
}
}
m_escapedCode.insert(pos, '\\');
pos += 2;
else
m_escapedCode += *it;
}
}