ThreadCollection.h revision 314564
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 <mutex> 14#include <vector> 15 16#include "lldb/Utility/Iterable.h" 17#include "lldb/lldb-private.h" 18 19namespace lldb_private { 20 21class ThreadCollection { 22public: 23 typedef std::vector<lldb::ThreadSP> collection; 24 typedef LockingAdaptedIterable<collection, lldb::ThreadSP, vector_adapter, 25 std::recursive_mutex> 26 ThreadIterable; 27 28 ThreadCollection(); 29 30 ThreadCollection(collection threads); 31 32 virtual ~ThreadCollection() {} 33 34 uint32_t GetSize(); 35 36 void AddThread(const lldb::ThreadSP &thread_sp); 37 38 void AddThreadSortedByIndexID(const lldb::ThreadSP &thread_sp); 39 40 void InsertThread(const lldb::ThreadSP &thread_sp, uint32_t idx); 41 42 // Note that "idx" is not the same as the "thread_index". It is a zero 43 // based index to accessing the current threads, whereas "thread_index" 44 // is a unique index assigned 45 lldb::ThreadSP GetThreadAtIndex(uint32_t idx); 46 47 virtual ThreadIterable Threads() { 48 return ThreadIterable(m_threads, GetMutex()); 49 } 50 51 virtual std::recursive_mutex &GetMutex() const { return m_mutex; } 52 53protected: 54 collection m_threads; 55 mutable std::recursive_mutex m_mutex; 56}; 57 58} // namespace lldb_private 59 60#endif // liblldb_ThreadCollection_h_ 61