]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/include/lldb/Target/ThreadCollection.h
Import to 0.6.1
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / include / lldb / Target / ThreadCollection.h
1 //===-- ThreadCollection.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_ThreadCollection_h_
11 #define liblldb_ThreadCollection_h_
12
13 #include <vector>
14
15 #include "lldb/lldb-private.h"
16 #include "lldb/Host/Mutex.h"
17 #include "lldb/Utility/Iterable.h"
18
19 namespace lldb_private {
20     
21 class ThreadCollection
22 {
23 public:
24     typedef std::vector<lldb::ThreadSP> collection;
25     typedef LockingAdaptedIterable<collection, lldb::ThreadSP, vector_adapter> ThreadIterable;
26     
27     ThreadCollection();
28     
29     ThreadCollection(collection threads);
30     
31     virtual
32     ~ThreadCollection()
33     {
34     }
35     
36     uint32_t
37     GetSize();
38     
39     void
40     AddThread (const lldb::ThreadSP &thread_sp);
41     
42     void
43     InsertThread (const lldb::ThreadSP &thread_sp, uint32_t idx);
44     
45     // Note that "idx" is not the same as the "thread_index". It is a zero
46     // based index to accessing the current threads, whereas "thread_index"
47     // is a unique index assigned
48     lldb::ThreadSP
49     GetThreadAtIndex (uint32_t idx);
50
51     virtual ThreadIterable
52     Threads ()
53     {
54         return ThreadIterable(m_threads, GetMutex());
55     }
56     
57     virtual Mutex &
58     GetMutex()
59     {
60         return m_mutex;
61     }
62     
63 protected:
64     collection m_threads;
65     Mutex m_mutex;
66 };
67     
68 } // namespace lldb_private
69
70 #endif  // liblldb_ThreadCollection_h_