#ifndef liblldb_ThreadList_h_
#define liblldb_ThreadList_h_
#include <vector>
#include "lldb/lldb-private.h"
#include "lldb/Host/Mutex.h"
#include "lldb/Core/UserID.h"
namespace lldb_private {
class ThreadList
{
friend class Process;
public:
ThreadList (Process *process);
ThreadList (const ThreadList &rhs);
~ThreadList ();
const ThreadList&
operator = (const ThreadList& rhs);
uint32_t
GetSize(bool can_update = true);
void
AddThread (lldb::ThreadSP &thread_sp);
lldb::ThreadSP
GetSelectedThread ();
bool
SetSelectedThreadByID (lldb::tid_t tid);
bool
SetSelectedThreadByIndexID (uint32_t index_id);
void
Clear();
lldb::ThreadSP
GetThreadAtIndex (uint32_t idx, bool can_update = true);
lldb::ThreadSP
FindThreadByID (lldb::tid_t tid, bool can_update = true);
lldb::ThreadSP
FindThreadByIndexID (lldb::tid_t index_id, bool can_update = true);
lldb::ThreadSP
GetThreadSPForThreadPtr (Thread *thread_ptr);
bool
ShouldStop (Event *event_ptr);
Vote
ShouldReportStop (Event *event_ptr);
Vote
ShouldReportRun (Event *event_ptr);
void
RefreshStateAfterStop ();
bool
WillResume ();
void
DidResume ();
void
DiscardThreadPlans();
uint32_t
GetStopID () const;
void
SetStopID (uint32_t stop_id);
Mutex &
GetMutex ()
{
return m_threads_mutex;
}
protected:
typedef std::vector<lldb::ThreadSP> collection;
Process *m_process; uint32_t m_stop_id; collection m_threads; mutable Mutex m_threads_mutex;
lldb::tid_t m_selected_tid;
private:
ThreadList ();
};
}
#endif // liblldb_ThreadList_h_