summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/mu-indexer.cc3
-rw-r--r--lib/utils/mu-async-queue.hh184
2 files changed, 1 insertions, 186 deletions
diff --git a/lib/mu-indexer.cc b/lib/mu-indexer.cc
index be956ad..c190d5d 100644
--- a/lib/mu-indexer.cc
+++ b/lib/mu-indexer.cc
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 2020-2025 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
+** Copyright (C) 2020-2026 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
**
** This program is free software; you can redistribute it and/or modify it
** under the terms of the GNU General Public License as published by the
@@ -34,7 +34,6 @@ using namespace std::chrono_literals;
#include "mu-store.hh"
#include "mu-scanner.hh"
-#include "utils/mu-async-queue.hh"
#include "utils/mu-error.hh"
#include "utils/mu-utils-file.hh"
diff --git a/lib/utils/mu-async-queue.hh b/lib/utils/mu-async-queue.hh
deleted file mode 100644
index afabef5..0000000
--- a/lib/utils/mu-async-queue.hh
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
-** Copyright (C) 2020-2023 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
-**
-** This program is free software; you can redistribute it and/or modify it
-** under the terms of the GNU General Public License as published by the
-** Free Software Foundation; either version 3, or (at your option) any
-** later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program; if not, write to the Free Software Foundation,
-** Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-**
-*/
-
-#ifndef __MU_ASYNC_QUEUE_HH__
-#define __MU_ASYNC_QUEUE_HH__
-
-#include <deque>
-#include <mutex>
-#include <chrono>
-#include <condition_variable>
-
-namespace Mu {
-
-constexpr std::size_t UnlimitedAsyncQueueSize{0};
-
-template <typename ItemType, /**< the type of Item to queue */
- std::size_t MaxSize = UnlimitedAsyncQueueSize, /**< maximum size for the queue */
- typename Allocator = std::allocator<ItemType>> /**< allocator for the items */
-
-class AsyncQueue {
- public:
- using value_type = ItemType;
- using allocator_type = Allocator;
- using size_type = std::size_t;
- using reference = value_type&;
- using const_reference = const value_type&;
- using pointer = typename std::allocator_traits<allocator_type>::pointer;
- using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;
-
- using Timeout = std::chrono::steady_clock::duration;
-
- /**
- * Push an item to the end of the queue by moving it
- *
- * @param item the item to move to the end of the queue
- * @param timeout and optional timeout
- *
- * @return true if the item was pushed; false otherwise.
- */
- bool push(const value_type& item, Timeout timeout = {}) {
- return push(std::move(value_type(item)), timeout);
- }
-
- /**
- * Push an item to the end of the queue by moving it
- *
- * @param item the item to move to the end of the queue
- * @param timeout and optional timeout
- *
- * @return true if the item was pushed; false otherwise.
- */
- bool push(value_type&& item, Timeout timeout = {}) {
- std::unique_lock lock{m_};
-
- if (!unlimited()) {
- const auto rv = cv_full_.wait_for(lock, timeout, [&]() {
- return !full_unlocked();
- }) && !full_unlocked();
- if (!rv)
- return false;
- }
-
- q_.emplace_back(std::move(item));
- cv_empty_.notify_one();
-
- return true;
- }
-
- /**
- * Pop an item from the queue
- *
- * @param receives the value if the function returns true
- * @param timeout optional time to wait for an item to become available
- *
- * @return true if an item was popped (into val), false otherwise.
- */
- bool pop(value_type& val, Timeout timeout = {}) {
- std::unique_lock lock{m_};
-
- if (timeout != Timeout{}) {
- const auto rv = cv_empty_.wait_for(lock, timeout, [&]() {
- return !q_.empty();
- }) && !q_.empty();
- if (!rv)
- return false;
-
- } else if (q_.empty())
- return false;
-
- val = std::move(q_.front());
- q_.pop_front();
- cv_full_.notify_one();
-
- return true;
- }
-
- /**
- * Clear the queue
- *
- */
- void clear() {
- std::unique_lock lock{m_};
- q_.clear();
- cv_full_.notify_one();
- }
-
- /**
- * Size of the queue
- *
- *
- * @return the size
- */
- size_type size() const {
- std::unique_lock lock{m_};
- return q_.size();
- }
-
- /**
- * Maximum size of the queue if specified through the template
- * parameter; otherwise the (theoretical) max_size of the inner
- * container.
- *
- * @return the maximum size
- */
- size_type max_size() const { return unlimited() ? q_.max_size() : MaxSize; }
-
- /**
- * Is the queue empty?
- *
- * @return true or false
- */
- bool empty() const {
- std::unique_lock lock{m_};
- return q_.empty();
- }
-
- /**
- * Is the queue full? Returns false unless a maximum size was specified
- * (as a template argument)
- *
- * @return true or false.
- */
- bool full() const {
- if (unlimited())
- return false;
-
- std::unique_lock lock{m_};
- return full_unlocked();
- }
-
- /**
- * Is this queue (theoretically) unlimited in size?
- *
- * @return true or false
- */
- constexpr static bool unlimited() { return MaxSize == UnlimitedAsyncQueueSize; }
-
-private:
- bool full_unlocked() const { return q_.size() >= max_size(); }
-
- std::deque<ItemType, Allocator> q_;
- mutable std::mutex m_;
- std::condition_variable cv_full_, cv_empty_;
-};
-
-} // namespace Mu
-
-#endif /* __MU_ASYNC_QUEUE_HH__ */