ApiTraceCall::ApiTraceCall(const Trace::Call *call) : ApiTraceEvent(ApiTraceEvent::Call), m_hasBinaryData(false), m_binaryDataIndex(0) { m_name = QString::fromStdString(call->sig->name); m_index = call->no; QString argumentsText; for (int i = 0; i < call->sig->arg_names.size(); ++i) { m_argNames += QString::fromStdString(call->sig->arg_names[i]); } if (call->ret) { VariantVisitor retVisitor; call->ret->visit(retVisitor); m_returnValue = retVisitor.variant(); } for (int i = 0; i < call->args.size(); ++i) { VariantVisitor argVisitor; call->args[i]->visit(argVisitor); m_argValues += argVisitor.variant(); if (m_argValues[i].type() == QVariant::ByteArray) { m_hasBinaryData = true; m_binaryDataIndex = i; } } }
void VariantVisitor::visit(Trace::Enum *e) { VariantVisitor vis; e->sig->second->visit(vis); QVariant val = vis.variant(); m_variant = QVariant::fromValue( ApiEnum(QString::fromStdString(e->sig->first), val)); }
void ApiArray::init(const Trace::Array *arr) { if (!arr) return; for (int i = 0; i < arr->values.size(); ++i) { VariantVisitor vis; arr->values[i]->visit(vis); m_array.append(vis.variant()); } }
void ApiStruct::init(const trace::Struct *s) { if (!s) return; m_sig.name = QString::fromLatin1(s->sig->name); for (unsigned i = 0; i < s->sig->num_members; ++i) { VariantVisitor vis; m_sig.memberNames.append( QString::fromLatin1(s->sig->member_names[i])); s->members[i]->visit(vis); m_members.append(vis.variant()); } }
void ApiArray::init(const trace::Array *arr) { if (!arr) return; m_array.reserve(arr->values.size()); for (auto & value : arr->values) { VariantVisitor vis; value->visit(vis); m_array.append(vis.variant()); } m_array.squeeze(); }