ThreadList.h revision b344843f75ef893762c93fd0a22d2d45712ce74d
1//===-- ThreadList.h --------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef liblldb_ThreadList_h_ 11#define liblldb_ThreadList_h_ 12 13#include <vector> 14 15#include "lldb/lldb-private.h" 16#include "lldb/Host/Mutex.h" 17#include "lldb/Core/UserID.h" 18 19 20// FIXME: Currently this is a thread list with lots of functionality for use only by 21// the process for which this is the thread list. If we ever want a container class 22// to hand out that is just a random subset of threads, with iterator functionality, 23// then we should make that part a base class, and make a ProcessThreadList for the 24// process. 25namespace lldb_private { 26 27class ThreadList 28{ 29friend class Process; 30 31public: 32 33 ThreadList (Process *process); 34 35 ThreadList (const ThreadList &rhs); 36 37 ~ThreadList (); 38 39 const ThreadList& 40 operator = (const ThreadList& rhs); 41 42 uint32_t 43 GetSize(bool can_update = true); 44 45 void 46 AddThread (lldb::ThreadSP &thread_sp); 47 48 lldb::ThreadSP 49 GetSelectedThread (); 50 51 bool 52 SetSelectedThreadByID (lldb::tid_t tid); 53 54 bool 55 SetSelectedThreadByIndexID (uint32_t index_id); 56 57 void 58 Clear(); 59 60 // Note that "idx" is not the same as the "thread_index". It is a zero 61 // based index to accessing the current threads, whereas "thread_index" 62 // is a unique index assigned 63 lldb::ThreadSP 64 GetThreadAtIndex (uint32_t idx, bool can_update = true); 65 66 lldb::ThreadSP 67 FindThreadByID (lldb::tid_t tid, bool can_update = true); 68 69 lldb::ThreadSP 70 FindThreadByIndexID (lldb::tid_t index_id, bool can_update = true); 71 72 lldb::ThreadSP 73 GetThreadSPForThreadPtr (Thread *thread_ptr); 74 75 bool 76 ShouldStop (Event *event_ptr); 77 78 Vote 79 ShouldReportStop (Event *event_ptr); 80 81 Vote 82 ShouldReportRun (Event *event_ptr); 83 84 void 85 RefreshStateAfterStop (); 86 87 bool 88 WillResume (); 89 90 void 91 DidResume (); 92 93 void 94 DiscardThreadPlans(); 95 96 uint32_t 97 GetStopID () const; 98 99 void 100 SetStopID (uint32_t stop_id); 101 102 Mutex & 103 GetMutex () 104 { 105 return m_threads_mutex; 106 } 107 108protected: 109 110 typedef std::vector<lldb::ThreadSP> collection; 111 //------------------------------------------------------------------ 112 // Classes that inherit from Process can see and modify these 113 //------------------------------------------------------------------ 114 Process *m_process; ///< The process that manages this thread list. 115 uint32_t m_stop_id; ///< The process stop ID that this thread list is valid for. 116 collection m_threads; ///< The threads for this process. 117 mutable Mutex m_threads_mutex; 118 lldb::tid_t m_selected_tid; ///< For targets that need the notion of a current thread. 119 120private: 121 ThreadList (); 122}; 123 124} // namespace lldb_private 125 126#endif // liblldb_ThreadList_h_ 127