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