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