1*a5ea1e2bSKuba Brecka //===-- SBThreadCollection.cpp ----------------------------------*- C++ -*-===//
2*a5ea1e2bSKuba Brecka //
3*a5ea1e2bSKuba Brecka //                     The LLVM Compiler Infrastructure
4*a5ea1e2bSKuba Brecka //
5*a5ea1e2bSKuba Brecka // This file is distributed under the University of Illinois Open Source
6*a5ea1e2bSKuba Brecka // License. See LICENSE.TXT for details.
7*a5ea1e2bSKuba Brecka //
8*a5ea1e2bSKuba Brecka //===----------------------------------------------------------------------===//
9*a5ea1e2bSKuba Brecka 
10*a5ea1e2bSKuba Brecka #include "lldb/API/SBThreadCollection.h"
11*a5ea1e2bSKuba Brecka #include "lldb/API/SBThread.h"
12*a5ea1e2bSKuba Brecka #include "lldb/Target/ThreadList.h"
13*a5ea1e2bSKuba Brecka 
14*a5ea1e2bSKuba Brecka using namespace lldb;
15*a5ea1e2bSKuba Brecka using namespace lldb_private;
16*a5ea1e2bSKuba Brecka 
17*a5ea1e2bSKuba Brecka 
18*a5ea1e2bSKuba Brecka SBThreadCollection::SBThreadCollection () :
19*a5ea1e2bSKuba Brecka     m_opaque_sp()
20*a5ea1e2bSKuba Brecka {
21*a5ea1e2bSKuba Brecka }
22*a5ea1e2bSKuba Brecka 
23*a5ea1e2bSKuba Brecka SBThreadCollection::SBThreadCollection(const SBThreadCollection &rhs) :
24*a5ea1e2bSKuba Brecka     m_opaque_sp (rhs.m_opaque_sp)
25*a5ea1e2bSKuba Brecka {
26*a5ea1e2bSKuba Brecka }
27*a5ea1e2bSKuba Brecka 
28*a5ea1e2bSKuba Brecka const SBThreadCollection &
29*a5ea1e2bSKuba Brecka SBThreadCollection::operator = (const SBThreadCollection &rhs)
30*a5ea1e2bSKuba Brecka {
31*a5ea1e2bSKuba Brecka     if (this != &rhs)
32*a5ea1e2bSKuba Brecka         m_opaque_sp = rhs.m_opaque_sp;
33*a5ea1e2bSKuba Brecka     return *this;
34*a5ea1e2bSKuba Brecka }
35*a5ea1e2bSKuba Brecka 
36*a5ea1e2bSKuba Brecka SBThreadCollection::SBThreadCollection (const ThreadCollectionSP &threads) :
37*a5ea1e2bSKuba Brecka     m_opaque_sp(threads)
38*a5ea1e2bSKuba Brecka {
39*a5ea1e2bSKuba Brecka }
40*a5ea1e2bSKuba Brecka 
41*a5ea1e2bSKuba Brecka SBThreadCollection::~SBThreadCollection ()
42*a5ea1e2bSKuba Brecka {
43*a5ea1e2bSKuba Brecka }
44*a5ea1e2bSKuba Brecka 
45*a5ea1e2bSKuba Brecka void
46*a5ea1e2bSKuba Brecka SBThreadCollection::SetOpaque (const lldb::ThreadCollectionSP &threads)
47*a5ea1e2bSKuba Brecka {
48*a5ea1e2bSKuba Brecka     m_opaque_sp = threads;
49*a5ea1e2bSKuba Brecka }
50*a5ea1e2bSKuba Brecka 
51*a5ea1e2bSKuba Brecka lldb_private::ThreadCollection *
52*a5ea1e2bSKuba Brecka SBThreadCollection::get() const
53*a5ea1e2bSKuba Brecka {
54*a5ea1e2bSKuba Brecka     return m_opaque_sp.get();
55*a5ea1e2bSKuba Brecka }
56*a5ea1e2bSKuba Brecka 
57*a5ea1e2bSKuba Brecka lldb_private::ThreadCollection *
58*a5ea1e2bSKuba Brecka SBThreadCollection::operator->() const
59*a5ea1e2bSKuba Brecka {
60*a5ea1e2bSKuba Brecka     return m_opaque_sp.operator->();
61*a5ea1e2bSKuba Brecka }
62*a5ea1e2bSKuba Brecka 
63*a5ea1e2bSKuba Brecka lldb::ThreadCollectionSP &
64*a5ea1e2bSKuba Brecka SBThreadCollection::operator*()
65*a5ea1e2bSKuba Brecka {
66*a5ea1e2bSKuba Brecka     return m_opaque_sp;
67*a5ea1e2bSKuba Brecka }
68*a5ea1e2bSKuba Brecka 
69*a5ea1e2bSKuba Brecka const lldb::ThreadCollectionSP &
70*a5ea1e2bSKuba Brecka SBThreadCollection::operator*() const
71*a5ea1e2bSKuba Brecka {
72*a5ea1e2bSKuba Brecka     return m_opaque_sp;
73*a5ea1e2bSKuba Brecka }
74*a5ea1e2bSKuba Brecka 
75*a5ea1e2bSKuba Brecka 
76*a5ea1e2bSKuba Brecka bool
77*a5ea1e2bSKuba Brecka SBThreadCollection::IsValid () const
78*a5ea1e2bSKuba Brecka {
79*a5ea1e2bSKuba Brecka     return m_opaque_sp.get() != NULL;
80*a5ea1e2bSKuba Brecka }
81*a5ea1e2bSKuba Brecka 
82*a5ea1e2bSKuba Brecka size_t
83*a5ea1e2bSKuba Brecka SBThreadCollection::GetSize ()
84*a5ea1e2bSKuba Brecka {
85*a5ea1e2bSKuba Brecka     if (m_opaque_sp)
86*a5ea1e2bSKuba Brecka         return m_opaque_sp->GetSize();
87*a5ea1e2bSKuba Brecka     return 0;
88*a5ea1e2bSKuba Brecka }
89*a5ea1e2bSKuba Brecka 
90*a5ea1e2bSKuba Brecka SBThread
91*a5ea1e2bSKuba Brecka SBThreadCollection::GetThreadAtIndex(size_t idx)
92*a5ea1e2bSKuba Brecka {
93*a5ea1e2bSKuba Brecka     SBThread thread;
94*a5ea1e2bSKuba Brecka     if (m_opaque_sp && idx < m_opaque_sp->GetSize())
95*a5ea1e2bSKuba Brecka         thread = m_opaque_sp->GetThreadAtIndex(idx);
96*a5ea1e2bSKuba Brecka     return thread;
97*a5ea1e2bSKuba Brecka }
98