]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/ThreadSpec.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / Target / ThreadSpec.h
1 //===-- ThreadSpec.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_ThreadSpec_h_
11 #define liblldb_ThreadSpec_h_
12
13 #include <map>
14 #include <string>
15
16 #include "lldb/lldb-private.h"
17
18 namespace lldb_private {
19
20 // Note: For now the thread spec has only fixed elements -
21 //   Thread ID
22 //   Thread Index
23 //   Thread Name
24 //   Thread Queue Name
25 //
26 //  But if we need more generality, we can hang a key/value map off of this structure.
27 //  That's why the thread matches spec test is done as a virtual method in Thread::MatchesSpec,
28 //  since it is the native thread that would know how to interpret the keys.
29 //  I was going to do the Queue Name this way out of sheer orneriness, but that seems a
30 //  sufficiently general concept, so I put it in here on its own.
31
32 class ThreadSpec
33 {
34 public:
35     ThreadSpec ();
36     
37     ThreadSpec (const ThreadSpec &rhs);
38     
39     const ThreadSpec &
40     operator=(const ThreadSpec &rhs);
41     
42     void
43     SetIndex (uint32_t index)
44     {
45         m_index = index;
46     }
47     
48     void
49     SetTID   (lldb::tid_t tid)
50     {
51         m_tid = tid;
52     }
53     
54     void
55     SetName (const char *name)
56     {
57         m_name = name;
58     }
59     
60     void 
61     SetQueueName (const char *queue_name)
62     {
63         m_queue_name = queue_name;
64     }
65
66     uint32_t
67     GetIndex () const
68     {
69         return m_index;
70     }
71     
72     lldb::tid_t 
73     GetTID () const
74     {
75         return m_tid;
76     }
77
78     const char *
79     GetName () const;
80     
81     const char *
82     GetQueueName () const;
83     
84     bool
85     TIDMatches (lldb::tid_t thread_id) const
86     {
87         if (m_tid == LLDB_INVALID_THREAD_ID || thread_id == LLDB_INVALID_THREAD_ID)
88             return true;
89         else
90             return thread_id == m_tid;
91     }
92         
93     bool
94     TIDMatches (Thread &thread) const;
95     
96     bool 
97     IndexMatches (uint32_t index) const
98     {
99         if (m_index == UINT32_MAX || index == UINT32_MAX)
100             return true;
101         else
102             return index == m_index;
103     }
104     
105     bool 
106     IndexMatches (Thread &thread) const;
107     
108     bool 
109     NameMatches (const char *name) const
110     {
111         if (m_name.empty())
112             return true;
113         else if (name == NULL)
114             return false;
115         else
116             return m_name == name;
117     }
118     
119     bool 
120     NameMatches (Thread &thread) const;
121     
122     bool 
123     QueueNameMatches (const char *queue_name) const
124     {
125         if (m_queue_name.empty())
126             return true;
127         else if (queue_name == NULL)
128             return false;
129         else
130             return m_queue_name == queue_name;
131     }
132     
133     bool 
134     QueueNameMatches (Thread &thread) const;
135     
136     bool
137     ThreadPassesBasicTests (Thread &thread) const;
138     
139     bool
140     HasSpecification () const;
141     
142     void
143     GetDescription (Stream *s, lldb::DescriptionLevel level) const;
144
145 protected:
146 private:
147     uint32_t m_index;
148     lldb::tid_t m_tid;
149     std::string m_name;
150     std::string m_queue_name;
151 };
152
153 } // namespace lldb_private
154
155 #endif  // liblldb_ThreadSpec_h_