xref: /freebsd/contrib/llvm-project/lldb/include/lldb/Target/ThreadCollection.h (revision fe6060f10f634930ff71b7c50291ddc610da2475)
1  //===-- ThreadCollection.h --------------------------------------*- C++ -*-===//
2  //
3  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4  // See https://llvm.org/LICENSE.txt for license information.
5  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6  //
7  //===----------------------------------------------------------------------===//
8  
9  #ifndef LLDB_TARGET_THREADCOLLECTION_H
10  #define LLDB_TARGET_THREADCOLLECTION_H
11  
12  #include <mutex>
13  #include <vector>
14  
15  #include "lldb/Utility/Iterable.h"
16  #include "lldb/lldb-private.h"
17  
18  namespace lldb_private {
19  
20  class ThreadCollection {
21  public:
22    typedef std::vector<lldb::ThreadSP> collection;
23    typedef LockingAdaptedIterable<collection, lldb::ThreadSP, vector_adapter,
24                                   std::recursive_mutex>
25        ThreadIterable;
26  
27    ThreadCollection();
28  
29    ThreadCollection(collection threads);
30  
31    virtual ~ThreadCollection() = default;
32  
33    uint32_t GetSize();
34  
35    void AddThread(const lldb::ThreadSP &thread_sp);
36  
37    void AddThreadSortedByIndexID(const lldb::ThreadSP &thread_sp);
38  
39    void InsertThread(const lldb::ThreadSP &thread_sp, uint32_t idx);
40  
41    // Note that "idx" is not the same as the "thread_index". It is a zero based
42    // index to accessing the current threads, whereas "thread_index" is a unique
43    // index assigned
44    lldb::ThreadSP GetThreadAtIndex(uint32_t idx);
45  
Threads()46    virtual ThreadIterable Threads() {
47      return ThreadIterable(m_threads, GetMutex());
48    }
49  
GetMutex()50    virtual std::recursive_mutex &GetMutex() const { return m_mutex; }
51  
52  protected:
53    collection m_threads;
54    mutable std::recursive_mutex m_mutex;
55  };
56  
57  } // namespace lldb_private
58  
59  #endif // LLDB_TARGET_THREADCOLLECTION_H
60