1*80814287SRaphael Isemann //===-- QueueList.cpp -----------------------------------------------------===//
25e8dce4dSJason Molenda //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65e8dce4dSJason Molenda //
75e8dce4dSJason Molenda //===----------------------------------------------------------------------===//
85e8dce4dSJason Molenda 
95e8dce4dSJason Molenda #include "lldb/Target/Queue.h"
10b9c1b51eSKate Stone #include "lldb/Target/Process.h"
115e8dce4dSJason Molenda #include "lldb/Target/QueueList.h"
125e8dce4dSJason Molenda 
135e8dce4dSJason Molenda using namespace lldb;
145e8dce4dSJason Molenda using namespace lldb_private;
155e8dce4dSJason Molenda 
QueueList(Process * process)16b9c1b51eSKate Stone QueueList::QueueList(Process *process)
17b9c1b51eSKate Stone     : m_process(process), m_stop_id(0), m_queues(), m_mutex() {}
185e8dce4dSJason Molenda 
~QueueList()19b9c1b51eSKate Stone QueueList::~QueueList() { Clear(); }
205e8dce4dSJason Molenda 
GetSize()21b9c1b51eSKate Stone uint32_t QueueList::GetSize() {
22bb19a13cSSaleem Abdulrasool   std::lock_guard<std::mutex> guard(m_mutex);
235e8dce4dSJason Molenda   return m_queues.size();
245e8dce4dSJason Molenda }
255e8dce4dSJason Molenda 
GetQueueAtIndex(uint32_t idx)26b9c1b51eSKate Stone lldb::QueueSP QueueList::GetQueueAtIndex(uint32_t idx) {
27bb19a13cSSaleem Abdulrasool   std::lock_guard<std::mutex> guard(m_mutex);
28b9c1b51eSKate Stone   if (idx < m_queues.size()) {
295e8dce4dSJason Molenda     return m_queues[idx];
30b9c1b51eSKate Stone   } else {
315e8dce4dSJason Molenda     return QueueSP();
325e8dce4dSJason Molenda   }
335e8dce4dSJason Molenda }
345e8dce4dSJason Molenda 
Clear()35b9c1b51eSKate Stone void QueueList::Clear() {
36bb19a13cSSaleem Abdulrasool   std::lock_guard<std::mutex> guard(m_mutex);
375e8dce4dSJason Molenda   m_queues.clear();
385e8dce4dSJason Molenda }
395e8dce4dSJason Molenda 
AddQueue(QueueSP queue_sp)40b9c1b51eSKate Stone void QueueList::AddQueue(QueueSP queue_sp) {
41bb19a13cSSaleem Abdulrasool   std::lock_guard<std::mutex> guard(m_mutex);
42b9c1b51eSKate Stone   if (queue_sp.get()) {
435e8dce4dSJason Molenda     m_queues.push_back(queue_sp);
445e8dce4dSJason Molenda   }
455e8dce4dSJason Molenda }
465e8dce4dSJason Molenda 
FindQueueByID(lldb::queue_id_t qid)47b9c1b51eSKate Stone lldb::QueueSP QueueList::FindQueueByID(lldb::queue_id_t qid) {
485e8dce4dSJason Molenda   QueueSP ret;
49b9c1b51eSKate Stone   for (QueueSP queue_sp : Queues()) {
50b9c1b51eSKate Stone     if (queue_sp->GetID() == qid) {
515e8dce4dSJason Molenda       ret = queue_sp;
525e8dce4dSJason Molenda       break;
535e8dce4dSJason Molenda     }
545e8dce4dSJason Molenda   }
555e8dce4dSJason Molenda   return ret;
565e8dce4dSJason Molenda }
575e8dce4dSJason Molenda 
FindQueueByIndexID(uint32_t index_id)58b9c1b51eSKate Stone lldb::QueueSP QueueList::FindQueueByIndexID(uint32_t index_id) {
595e8dce4dSJason Molenda   QueueSP ret;
60b9c1b51eSKate Stone   for (QueueSP queue_sp : Queues()) {
61b9c1b51eSKate Stone     if (queue_sp->GetIndexID() == index_id) {
625e8dce4dSJason Molenda       ret = queue_sp;
635e8dce4dSJason Molenda       break;
645e8dce4dSJason Molenda     }
655e8dce4dSJason Molenda   }
665e8dce4dSJason Molenda   return ret;
675e8dce4dSJason Molenda }
685e8dce4dSJason Molenda 
GetMutex()69b9c1b51eSKate Stone std::mutex &QueueList::GetMutex() { return m_mutex; }
70