/* -*- C++ -*- This file declares the StateIMplementation class. SPDX-FileCopyrightText: 2005-2013 Mirko Boehm SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef WEAVERIMPLSTATE_H #define WEAVERIMPLSTATE_H #include "state.h" #include "weaver.h" namespace ThreadWeaver { class QueueSignals; /** @brief Base class for all WeaverImpl states. */ class WeaverImplState : public State { public: explicit WeaverImplState(QueueSignals *weaver); const State *state() const override; /** Shut down the queue. */ void shutDown() override; /** Set the maximum number of threads this Weaver object may start. */ void setMaximumNumberOfThreads(int cap) override; /** Get the maximum number of threads this Weaver may start. */ int maximumNumberOfThreads() const override; /** Returns the current number of threads in the inventory. */ int currentNumberOfThreads() const override; /** Enqueue a job. */ void enqueue(const QList &jobs) override; /** Dequeue a job. */ bool dequeue(const JobPointer &job) override; /** Dequeue all jobs. */ void dequeue() override; /** Finish all queued jobs. */ void finish() override; /** Are no more jobs queued? */ bool isEmpty() const override; /** Are all threads waiting? */ bool isIdle() const override; /** How many jobs are currently queued? */ int queueLength() const override; /** Request abort for all queued and currently executed jobs. */ void requestAbort() override; /** Reschedule jobs to threads. */ void reschedule() override; /** Wait (by suspending the calling thread) until a job becomes available. */ void waitForAvailableJob(Thread *th) override; protected: /** Provide correct return type for WeaverImpl states. */ Weaver *weaver() override; const Weaver *weaver() const override; }; } #endif