1*5e8dce4dSJason Molenda //===-- Queue.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 #include "lldb/Target/Thread.h"
14*5e8dce4dSJason Molenda 
15*5e8dce4dSJason Molenda using namespace lldb;
16*5e8dce4dSJason Molenda using namespace lldb_private;
17*5e8dce4dSJason Molenda 
18*5e8dce4dSJason Molenda Queue::Queue (ProcessSP process_sp, lldb::queue_id_t queue_id, const char *queue_name) :
19*5e8dce4dSJason Molenda     m_process_wp (process_sp),
20*5e8dce4dSJason Molenda     m_queue_id (queue_id),
21*5e8dce4dSJason Molenda     m_queue_name (queue_name),
22*5e8dce4dSJason Molenda     m_enqueued_items()
23*5e8dce4dSJason Molenda {
24*5e8dce4dSJason Molenda     m_index_id = process_sp->AssignIndexIDToQueue (queue_id);
25*5e8dce4dSJason Molenda }
26*5e8dce4dSJason Molenda 
27*5e8dce4dSJason Molenda Queue::~Queue ()
28*5e8dce4dSJason Molenda {
29*5e8dce4dSJason Molenda }
30*5e8dce4dSJason Molenda 
31*5e8dce4dSJason Molenda queue_id_t
32*5e8dce4dSJason Molenda Queue::GetID ()
33*5e8dce4dSJason Molenda {
34*5e8dce4dSJason Molenda     return m_queue_id;
35*5e8dce4dSJason Molenda }
36*5e8dce4dSJason Molenda 
37*5e8dce4dSJason Molenda const char *
38*5e8dce4dSJason Molenda Queue::GetName ()
39*5e8dce4dSJason Molenda {
40*5e8dce4dSJason Molenda     const char *result = NULL;
41*5e8dce4dSJason Molenda     if (m_queue_name.size() > 0)
42*5e8dce4dSJason Molenda         result = m_queue_name.c_str();
43*5e8dce4dSJason Molenda     return result;
44*5e8dce4dSJason Molenda }
45*5e8dce4dSJason Molenda 
46*5e8dce4dSJason Molenda uint32_t
47*5e8dce4dSJason Molenda Queue::GetIndexID ()
48*5e8dce4dSJason Molenda {
49*5e8dce4dSJason Molenda     return m_index_id;
50*5e8dce4dSJason Molenda }
51*5e8dce4dSJason Molenda 
52*5e8dce4dSJason Molenda std::vector<lldb::ThreadSP>
53*5e8dce4dSJason Molenda Queue::GetThreads ()
54*5e8dce4dSJason Molenda {
55*5e8dce4dSJason Molenda     std::vector<ThreadSP> result;
56*5e8dce4dSJason Molenda     ProcessSP process_sp = m_process_wp.lock();
57*5e8dce4dSJason Molenda     if (process_sp.get ())
58*5e8dce4dSJason Molenda     {
59*5e8dce4dSJason Molenda         for (ThreadSP thread_sp : process_sp->Threads())
60*5e8dce4dSJason Molenda         {
61*5e8dce4dSJason Molenda             if (thread_sp->GetQueueID() == m_queue_id)
62*5e8dce4dSJason Molenda             {
63*5e8dce4dSJason Molenda                 result.push_back (thread_sp);
64*5e8dce4dSJason Molenda             }
65*5e8dce4dSJason Molenda         }
66*5e8dce4dSJason Molenda     }
67*5e8dce4dSJason Molenda     return result;
68*5e8dce4dSJason Molenda }
69