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 ~ThreadCollection()31 virtual ~ThreadCollection() {} 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