1 //===-- TraceCursor.cpp -----------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "lldb/Target/TraceCursor.h"
10 
11 #include "lldb/Target/ExecutionContext.h"
12 
13 using namespace lldb;
14 using namespace lldb_private;
15 using namespace llvm;
16 
17 TraceCursor::TraceCursor(lldb::ThreadSP thread_sp)
18     : m_exe_ctx_ref(ExecutionContext(thread_sp)) {}
19 
20 ExecutionContextRef &TraceCursor::GetExecutionContextRef() {
21   return m_exe_ctx_ref;
22 }
23 
24 void TraceCursor::SetForwards(bool forwards) { m_forwards = forwards; }
25 
26 bool TraceCursor::IsForwards() const { return m_forwards; }
27 
28 const char *trace_event_utils::EventToDisplayString(lldb::TraceEvents event) {
29   switch (event) {
30   case lldb::eTraceEventPaused:
31     return "paused";
32   }
33   return nullptr;
34 }
35 
36 void trace_event_utils::ForEachEvent(
37     lldb::TraceEvents events,
38     std::function<void(lldb::TraceEvents event)> callback) {
39   while (events) {
40     TraceEvents event = static_cast<TraceEvents>(events & ~(events - 1));
41     callback(event);
42     events &= ~event;
43   }
44 }
45