File indexing completed on 2025-03-09 04:52:25

0001 /*
0002  * This file is part of LibKGAPI library
0003  *
0004  * SPDX-FileCopyrightText: 2013 Daniel Vrátil <dvratil@redhat.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #pragma once
0010 
0011 #include <QQueue>
0012 
0013 template<typename T>
0014 class QueueHelper
0015 {
0016 public:
0017     explicit QueueHelper()
0018     {
0019     }
0020     virtual ~QueueHelper()
0021     {
0022     }
0023 
0024     bool atEnd() const
0025     {
0026         return (m_iter == m_items.constEnd());
0027     }
0028 
0029     void currentProcessed()
0030     {
0031         ++m_iter;
0032     }
0033 
0034     T current()
0035     {
0036         return *m_iter;
0037     }
0038 
0039     QueueHelper &operator<<(const T &item)
0040     {
0041         m_items << item;
0042         if (m_items.count() == 1) {
0043             m_iter = m_items.constBegin();
0044         }
0045         return *this;
0046     }
0047 
0048     QueueHelper &operator<<(const QList<T> &list)
0049     {
0050         if (m_items.count() == 0) {
0051             m_items << list;
0052             m_iter = m_items.constBegin();
0053         } else {
0054             m_items << list;
0055         }
0056 
0057         return *this;
0058     }
0059 
0060     void reserve(int n)
0061     {
0062         m_items.reserve(n);
0063     }
0064 
0065     QueueHelper &operator=(const QList<T> &list)
0066     {
0067         m_items.clear();
0068         m_items << list;
0069         m_iter = m_items.constBegin();
0070         return *this;
0071     }
0072 
0073 private:
0074     QQueue<T> m_items;
0075 
0076     typename QList<T>::ConstIterator m_iter;
0077 };