forked from qt-creator/qt-creator
QmlDesigner: Reduce allocations
We use std::to_chars instead of QByteArray::number. In the normal case we only allocate once but if the numbers are unusual long we would allocate two or three times. But this is very very unlikely. Change-Id: Ieb734d63962d4cc5a1c1da73f4ccb4acd7db2577 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -44,6 +44,9 @@
|
|||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <charconv>
|
||||||
|
|
||||||
namespace QmlDesigner {
|
namespace QmlDesigner {
|
||||||
|
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -711,9 +714,22 @@ PropertyName NodeMetaInfoPrivate::defaultPropertyName() const
|
|||||||
return PropertyName("data");
|
return PropertyName("data");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline TypeName stringIdentifier( const TypeName &type, int maj, int min)
|
static void addNumber(TypeName &id, int number)
|
||||||
{
|
{
|
||||||
return type + QByteArray::number(maj) + '_' + QByteArray::number(min);
|
char text[std::numeric_limits<int>::digits10 + 1];
|
||||||
|
auto [end, error] = std::to_chars(std::begin(text), std::end(text), number);
|
||||||
|
id.append(std::data(text), static_cast<int>(end - std::begin(text)));
|
||||||
|
}
|
||||||
|
|
||||||
|
static TypeName stringIdentifier(const TypeName &type, int majorVersion, int minorVersion)
|
||||||
|
{
|
||||||
|
TypeName id = type;
|
||||||
|
id.reserve(id.size() + 5);
|
||||||
|
addNumber(id, majorVersion);
|
||||||
|
id.append('_');
|
||||||
|
addNumber(id, minorVersion);
|
||||||
|
|
||||||
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeMetaInfoPrivate::Pointer NodeMetaInfoPrivate::create(Model *model, const TypeName &type, int major, int minor)
|
NodeMetaInfoPrivate::Pointer NodeMetaInfoPrivate::create(Model *model, const TypeName &type, int major, int minor)
|
||||||
|
|||||||
Reference in New Issue
Block a user