File indexing completed on 2024-04-28 04:20:53
0001 /* SPDX-FileCopyrightText: 2012 Jesper K. Pedersen <blackie@kde.org> 0002 0003 SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 */ 0005 0006 #include "PriorityQueue.h" 0007 0008 #include <Utilities/AlgorithmHelper.h> 0009 0010 #include <functional> 0011 0012 using namespace Utilities; 0013 namespace BackgroundTaskManager 0014 { 0015 0016 PriorityQueue::PriorityQueue() 0017 { 0018 m_jobs.resize(SIZE_OF_PRIORITY_QUEUE); 0019 } 0020 0021 bool PriorityQueue::isEmpty() const 0022 { 0023 return all_of(m_jobs, std::mem_fn(&QueueType::isEmpty)); 0024 } 0025 0026 int PriorityQueue::count() const 0027 { 0028 return sum(m_jobs, std::mem_fn(&QueueType::length)); 0029 } 0030 0031 void PriorityQueue::enqueue(JobInterface *job, Priority priority) 0032 { 0033 m_jobs[priority].enqueue(job); 0034 } 0035 0036 JobInterface *PriorityQueue::dequeue() 0037 { 0038 for (QueueType &queue : m_jobs) { 0039 if (!queue.isEmpty()) 0040 return queue.dequeue(); 0041 } 0042 Q_ASSERT(false && "Queue was empty"); 0043 return nullptr; 0044 } 0045 0046 JobInterface *PriorityQueue::peek(int index) const 0047 { 0048 int offset = 0; 0049 for (const QueueType &queue : m_jobs) { 0050 if (index - offset < queue.count()) 0051 return queue[index - offset]; 0052 else 0053 offset += queue.count(); 0054 } 0055 Q_ASSERT(false && "index beyond queue"); 0056 return nullptr; 0057 } 0058 0059 bool PriorityQueue::hasForegroundTasks() const 0060 { 0061 for (int i = 0; i < BackgroundTask; ++i) { 0062 if (!m_jobs[i].isEmpty()) 0063 return true; 0064 } 0065 return false; 0066 } 0067 0068 } // namespace BackgroundTaskManager 0069 // vi:expandtab:tabstop=4 shiftwidth=4: