1*e4d4801cSKuba Brecka //===-- ThreadCollection.cpp ------------------------------------*- C++ -*-===// 2*e4d4801cSKuba Brecka // 3*e4d4801cSKuba Brecka // The LLVM Compiler Infrastructure 4*e4d4801cSKuba Brecka // 5*e4d4801cSKuba Brecka // This file is distributed under the University of Illinois Open Source 6*e4d4801cSKuba Brecka // License. See LICENSE.TXT for details. 7*e4d4801cSKuba Brecka // 8*e4d4801cSKuba Brecka //===----------------------------------------------------------------------===// 9*e4d4801cSKuba Brecka #include <stdlib.h> 10*e4d4801cSKuba Brecka 11*e4d4801cSKuba Brecka #include <algorithm> 12*e4d4801cSKuba Brecka 13*e4d4801cSKuba Brecka #include "lldb/Target/ThreadCollection.h" 14*e4d4801cSKuba Brecka 15*e4d4801cSKuba Brecka using namespace lldb; 16*e4d4801cSKuba Brecka using namespace lldb_private; 17*e4d4801cSKuba Brecka 18*e4d4801cSKuba Brecka ThreadCollection::ThreadCollection() : 19*e4d4801cSKuba Brecka m_threads(), 20*e4d4801cSKuba Brecka m_mutex() 21*e4d4801cSKuba Brecka { 22*e4d4801cSKuba Brecka } 23*e4d4801cSKuba Brecka 24*e4d4801cSKuba Brecka ThreadCollection::ThreadCollection(collection threads) : 25*e4d4801cSKuba Brecka m_threads(threads), 26*e4d4801cSKuba Brecka m_mutex() 27*e4d4801cSKuba Brecka { 28*e4d4801cSKuba Brecka } 29*e4d4801cSKuba Brecka 30*e4d4801cSKuba Brecka void 31*e4d4801cSKuba Brecka ThreadCollection::AddThread (const ThreadSP &thread_sp) 32*e4d4801cSKuba Brecka { 33*e4d4801cSKuba Brecka Mutex::Locker locker(GetMutex()); 34*e4d4801cSKuba Brecka m_threads.push_back (thread_sp); 35*e4d4801cSKuba Brecka } 36*e4d4801cSKuba Brecka 37*e4d4801cSKuba Brecka void 38*e4d4801cSKuba Brecka ThreadCollection::InsertThread (const lldb::ThreadSP &thread_sp, uint32_t idx) 39*e4d4801cSKuba Brecka { 40*e4d4801cSKuba Brecka Mutex::Locker locker(GetMutex()); 41*e4d4801cSKuba Brecka if (idx < m_threads.size()) 42*e4d4801cSKuba Brecka m_threads.insert(m_threads.begin() + idx, thread_sp); 43*e4d4801cSKuba Brecka else 44*e4d4801cSKuba Brecka m_threads.push_back (thread_sp); 45*e4d4801cSKuba Brecka } 46*e4d4801cSKuba Brecka 47*e4d4801cSKuba Brecka uint32_t 48*e4d4801cSKuba Brecka ThreadCollection::GetSize () 49*e4d4801cSKuba Brecka { 50*e4d4801cSKuba Brecka Mutex::Locker locker(GetMutex()); 51*e4d4801cSKuba Brecka return m_threads.size(); 52*e4d4801cSKuba Brecka } 53*e4d4801cSKuba Brecka 54*e4d4801cSKuba Brecka ThreadSP 55*e4d4801cSKuba Brecka ThreadCollection::GetThreadAtIndex (uint32_t idx) 56*e4d4801cSKuba Brecka { 57*e4d4801cSKuba Brecka Mutex::Locker locker(GetMutex()); 58*e4d4801cSKuba Brecka ThreadSP thread_sp; 59*e4d4801cSKuba Brecka if (idx < m_threads.size()) 60*e4d4801cSKuba Brecka thread_sp = m_threads[idx]; 61*e4d4801cSKuba Brecka return thread_sp; 62*e4d4801cSKuba Brecka } 63