void TraceLoader::searchNext(const ApiTrace::SearchRequest &request) { Q_ASSERT(m_parser.supportsOffsets()); if (m_parser.supportsOffsets()) { int startFrame = m_createdFrames.indexOf(request.frame); const FrameBookmark &frameBookmark = m_frameBookmarks[startFrame]; m_parser.setBookmark(frameBookmark.start); trace::Call *call = 0; while ((call = m_parser.parse_call())) { if (callContains(call, request.text, request.cs)) { unsigned frameIdx = callInFrame(call->no); ApiTraceFrame *frame = m_createdFrames[frameIdx]; const QVector<ApiTraceCall*> calls = fetchFrameContents(frame); for (int i = 0; i < calls.count(); ++i) { if (calls[i]->index() == call->no) { emit searchResult(request, ApiTrace::SearchResult_Found, calls[i]); break; } } delete call; return; } delete call; } } emit searchResult(request, ApiTrace::SearchResult_NotFound, 0); }
void TraceLoader::findCallIndex(int index) { int frameIdx = callInFrame(index); ApiTraceFrame *frame = m_createdFrames[frameIdx]; QVector<ApiTraceCall*> calls = fetchFrameContents(frame); QVector<ApiTraceCall*>::const_iterator itr; ApiTraceCall *call = 0; for (itr = calls.constBegin(); itr != calls.constEnd(); ++itr) { if ((*itr)->index() == index) { call = *itr; } } Q_ASSERT(call); emit foundCallIndex(call); }