TraceObject* CachegrindLoader::compressedObject(const QString& name) { if ((name[0] != '(') || !name[1].isDigit()) return _data->object(checkUnknown(name)); // compressed format using _objectVector int p = name.indexOf(')'); if (p<2) { error(QStringLiteral("Invalid compressed ELF object ('%1')").arg(name)); return 0; } int index = name.midRef(1, p-1).toInt(); TraceObject* o = 0; p++; while((name.length()>p) && name.at(p).isSpace()) p++; if (name.length()>p) { if (_objectVector.size() <= index) { int newSize = index * 2; #if TRACE_LOADER qDebug() << " CachegrindLoader: objectVector enlarged to " << newSize; #endif _objectVector.resize(newSize); } QString realName = checkUnknown(name.mid(p)); o = (TraceObject*) _objectVector.at(index); if (o && (o->name() != realName)) { error(QStringLiteral("Redefinition of compressed ELF object index %1 (was '%2') to %3") .arg(index).arg(o->name()).arg(realName)); } o = _data->object(realName); _objectVector.replace(index, o); } else { if ((_objectVector.size() <= index) || ( (o=(TraceObject*)_objectVector.at(index)) == 0)) { error(QStringLiteral("Undefined compressed ELF object index %1").arg(index)); return 0; } } return o; }