1*5e8dce4dSJason Molenda //===-- QueueList.cpp -------------------------------------------*- C++ -*-===//
2*5e8dce4dSJason Molenda //
3*5e8dce4dSJason Molenda //                     The LLVM Compiler Infrastructure
4*5e8dce4dSJason Molenda //
5*5e8dce4dSJason Molenda // This file is distributed under the University of Illinois Open Source
6*5e8dce4dSJason Molenda // License. See LICENSE.TXT for details.
7*5e8dce4dSJason Molenda //
8*5e8dce4dSJason Molenda //===----------------------------------------------------------------------===//
9*5e8dce4dSJason Molenda 
10*5e8dce4dSJason Molenda #include "lldb/Target/Process.h"
11*5e8dce4dSJason Molenda #include "lldb/Target/Queue.h"
12*5e8dce4dSJason Molenda #include "lldb/Target/QueueList.h"
13*5e8dce4dSJason Molenda 
14*5e8dce4dSJason Molenda using namespace lldb;
15*5e8dce4dSJason Molenda using namespace lldb_private;
16*5e8dce4dSJason Molenda 
17*5e8dce4dSJason Molenda QueueList::QueueList (Process *process) :
18*5e8dce4dSJason Molenda     m_process (process),
19*5e8dce4dSJason Molenda     m_stop_id (0),
20*5e8dce4dSJason Molenda     m_queues (),
21*5e8dce4dSJason Molenda     m_mutex ()
22*5e8dce4dSJason Molenda {
23*5e8dce4dSJason Molenda }
24*5e8dce4dSJason Molenda 
25*5e8dce4dSJason Molenda QueueList::~QueueList ()
26*5e8dce4dSJason Molenda {
27*5e8dce4dSJason Molenda     Clear();
28*5e8dce4dSJason Molenda }
29*5e8dce4dSJason Molenda 
30*5e8dce4dSJason Molenda uint32_t
31*5e8dce4dSJason Molenda QueueList::GetSize ()
32*5e8dce4dSJason Molenda {
33*5e8dce4dSJason Molenda     Mutex::Locker locker (m_mutex);
34*5e8dce4dSJason Molenda     return m_queues.size();
35*5e8dce4dSJason Molenda }
36*5e8dce4dSJason Molenda 
37*5e8dce4dSJason Molenda lldb::QueueSP
38*5e8dce4dSJason Molenda QueueList::GetQueueAtIndex (uint32_t idx)
39*5e8dce4dSJason Molenda {
40*5e8dce4dSJason Molenda     Mutex::Locker locker (m_mutex);
41*5e8dce4dSJason Molenda     if (idx < m_queues.size())
42*5e8dce4dSJason Molenda     {
43*5e8dce4dSJason Molenda         return m_queues[idx];
44*5e8dce4dSJason Molenda     }
45*5e8dce4dSJason Molenda     else
46*5e8dce4dSJason Molenda     {
47*5e8dce4dSJason Molenda         return QueueSP();
48*5e8dce4dSJason Molenda     }
49*5e8dce4dSJason Molenda }
50*5e8dce4dSJason Molenda 
51*5e8dce4dSJason Molenda void
52*5e8dce4dSJason Molenda QueueList::Clear ()
53*5e8dce4dSJason Molenda {
54*5e8dce4dSJason Molenda     Mutex::Locker locker (m_mutex);
55*5e8dce4dSJason Molenda     m_queues.clear();
56*5e8dce4dSJason Molenda }
57*5e8dce4dSJason Molenda 
58*5e8dce4dSJason Molenda void
59*5e8dce4dSJason Molenda QueueList::AddQueue (QueueSP queue_sp)
60*5e8dce4dSJason Molenda {
61*5e8dce4dSJason Molenda     Mutex::Locker locker (m_mutex);
62*5e8dce4dSJason Molenda     if (queue_sp.get ())
63*5e8dce4dSJason Molenda     {
64*5e8dce4dSJason Molenda         m_queues.push_back (queue_sp);
65*5e8dce4dSJason Molenda     }
66*5e8dce4dSJason Molenda }
67*5e8dce4dSJason Molenda 
68*5e8dce4dSJason Molenda lldb::QueueSP
69*5e8dce4dSJason Molenda QueueList::FindQueueByID (lldb::queue_id_t qid)
70*5e8dce4dSJason Molenda {
71*5e8dce4dSJason Molenda     QueueSP ret;
72*5e8dce4dSJason Molenda     for (QueueSP queue_sp : Queues())
73*5e8dce4dSJason Molenda     {
74*5e8dce4dSJason Molenda         if (queue_sp->GetID() == qid)
75*5e8dce4dSJason Molenda         {
76*5e8dce4dSJason Molenda             ret = queue_sp;
77*5e8dce4dSJason Molenda             break;
78*5e8dce4dSJason Molenda         }
79*5e8dce4dSJason Molenda     }
80*5e8dce4dSJason Molenda     return ret;
81*5e8dce4dSJason Molenda }
82*5e8dce4dSJason Molenda 
83*5e8dce4dSJason Molenda lldb::QueueSP
84*5e8dce4dSJason Molenda QueueList::FindQueueByIndexID (uint32_t index_id)
85*5e8dce4dSJason Molenda {
86*5e8dce4dSJason Molenda     QueueSP ret;
87*5e8dce4dSJason Molenda     for (QueueSP queue_sp : Queues())
88*5e8dce4dSJason Molenda     {
89*5e8dce4dSJason Molenda         if (queue_sp->GetIndexID() == index_id)
90*5e8dce4dSJason Molenda         {
91*5e8dce4dSJason Molenda             ret = queue_sp;
92*5e8dce4dSJason Molenda             break;
93*5e8dce4dSJason Molenda         }
94*5e8dce4dSJason Molenda     }
95*5e8dce4dSJason Molenda     return ret;
96*5e8dce4dSJason Molenda }
97*5e8dce4dSJason Molenda 
98*5e8dce4dSJason Molenda lldb_private::Mutex &
99*5e8dce4dSJason Molenda QueueList::GetMutex ()
100*5e8dce4dSJason Molenda {
101*5e8dce4dSJason Molenda     return m_mutex;
102*5e8dce4dSJason Molenda }
103