Skip to content

Commit e76d400

Browse files
committed
avoid expensive std::ostringstream usage in ValueType::dump()
1 parent 434527a commit e76d400

File tree

1 file changed

+55
-37
lines changed

1 file changed

+55
-37
lines changed

lib/symboldatabase.cpp

Lines changed: 55 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -7379,101 +7379,119 @@ bool ValueType::fromLibraryType(const std::string &typestr, const Settings &sett
73797379

73807380
std::string ValueType::dump() const
73817381
{
7382-
std::ostringstream ret;
7382+
std::string ret;
73837383
switch (type) {
73847384
case UNKNOWN_TYPE:
73857385
return "";
73867386
case NONSTD:
7387-
ret << "valueType-type=\"nonstd\"";
7387+
ret += "valueType-type=\"nonstd\"";
73887388
break;
73897389
case POD:
7390-
ret << "valueType-type=\"pod\"";
7390+
ret += "valueType-type=\"pod\"";
73917391
break;
73927392
case RECORD:
7393-
ret << "valueType-type=\"record\"";
7393+
ret += "valueType-type=\"record\"";
73947394
break;
73957395
case SMART_POINTER:
7396-
ret << "valueType-type=\"smart-pointer\"";
7396+
ret += "valueType-type=\"smart-pointer\"";
73977397
break;
7398-
case CONTAINER:
7399-
ret << "valueType-type=\"container\"";
7400-
ret << " valueType-containerId=\"" << container << "\"";
7398+
case CONTAINER: {
7399+
ret += "valueType-type=\"container\"";
7400+
ret += " valueType-containerId=\"";
7401+
ret += ptr_to_string(container);
7402+
ret += "\"";
74017403
break;
7404+
}
74027405
case ITERATOR:
7403-
ret << "valueType-type=\"iterator\"";
7406+
ret += "valueType-type=\"iterator\"";
74047407
break;
74057408
case VOID:
7406-
ret << "valueType-type=\"void\"";
7409+
ret += "valueType-type=\"void\"";
74077410
break;
74087411
case BOOL:
7409-
ret << "valueType-type=\"bool\"";
7412+
ret += "valueType-type=\"bool\"";
74107413
break;
74117414
case CHAR:
7412-
ret << "valueType-type=\"char\"";
7415+
ret += "valueType-type=\"char\"";
74137416
break;
74147417
case SHORT:
7415-
ret << "valueType-type=\"short\"";
7418+
ret += "valueType-type=\"short\"";
74167419
break;
74177420
case WCHAR_T:
7418-
ret << "valueType-type=\"wchar_t\"";
7421+
ret += "valueType-type=\"wchar_t\"";
74197422
break;
74207423
case INT:
7421-
ret << "valueType-type=\"int\"";
7424+
ret += "valueType-type=\"int\"";
74227425
break;
74237426
case LONG:
7424-
ret << "valueType-type=\"long\"";
7427+
ret += "valueType-type=\"long\"";
74257428
break;
74267429
case LONGLONG:
7427-
ret << "valueType-type=\"long long\"";
7430+
ret += "valueType-type=\"long long\"";
74287431
break;
74297432
case UNKNOWN_INT:
7430-
ret << "valueType-type=\"unknown int\"";
7433+
ret += "valueType-type=\"unknown int\"";
74317434
break;
74327435
case FLOAT:
7433-
ret << "valueType-type=\"float\"";
7436+
ret += "valueType-type=\"float\"";
74347437
break;
74357438
case DOUBLE:
7436-
ret << "valueType-type=\"double\"";
7439+
ret += "valueType-type=\"double\"";
74377440
break;
74387441
case LONGDOUBLE:
7439-
ret << "valueType-type=\"long double\"";
7442+
ret += "valueType-type=\"long double\"";
74407443
break;
74417444
}
74427445

74437446
switch (sign) {
74447447
case Sign::UNKNOWN_SIGN:
74457448
break;
74467449
case Sign::SIGNED:
7447-
ret << " valueType-sign=\"signed\"";
7450+
ret += " valueType-sign=\"signed\"";
74487451
break;
74497452
case Sign::UNSIGNED:
7450-
ret << " valueType-sign=\"unsigned\"";
7453+
ret += " valueType-sign=\"unsigned\"";
74517454
break;
74527455
}
74537456

7454-
if (bits > 0)
7455-
ret << " valueType-bits=\"" << bits << '\"';
7457+
if (bits > 0) {
7458+
ret += " valueType-bits=\"";
7459+
ret += std::to_string(bits);
7460+
ret += '\"';
7461+
}
74567462

7457-
if (pointer > 0)
7458-
ret << " valueType-pointer=\"" << pointer << '\"';
7463+
if (pointer > 0) {
7464+
ret += " valueType-pointer=\"";
7465+
ret += std::to_string(pointer);
7466+
ret += '\"';
7467+
}
74597468

7460-
if (constness > 0)
7461-
ret << " valueType-constness=\"" << constness << '\"';
7469+
if (constness > 0) {
7470+
ret += " valueType-constness=\"";
7471+
ret += std::to_string(constness);
7472+
ret += '\"';
7473+
}
74627474

74637475
if (reference == Reference::None)
7464-
ret << " valueType-reference=\"None\"";
7476+
ret += " valueType-reference=\"None\"";
74657477
else if (reference == Reference::LValue)
7466-
ret << " valueType-reference=\"LValue\"";
7478+
ret += " valueType-reference=\"LValue\"";
74677479
else if (reference == Reference::RValue)
7468-
ret << " valueType-reference=\"RValue\"";
7480+
ret += " valueType-reference=\"RValue\"";
74697481

7470-
if (typeScope)
7471-
ret << " valueType-typeScope=\"" << typeScope << '\"';
7482+
if (typeScope) {
7483+
ret += " valueType-typeScope=\"";
7484+
ret += ptr_to_string(typeScope);
7485+
ret += '\"';
7486+
}
74727487

7473-
if (!originalTypeName.empty())
7474-
ret << " valueType-originalTypeName=\"" << ErrorLogger::toxml(originalTypeName) << '\"';
7488+
if (!originalTypeName.empty()) {
7489+
ret += " valueType-originalTypeName=\"";
7490+
ret += ErrorLogger::toxml(originalTypeName);
7491+
ret += '\"';
7492+
}
74757493

7476-
return ret.str();
7494+
return ret;
74777495
}
74787496

74797497
bool ValueType::isConst(nonneg int indirect) const

0 commit comments

Comments
 (0)