1/* -*- C++ -*-
2 This file declares the StateIMplementation class.
3
4 SPDX-FileCopyrightText: 2005-2013 Mirko Boehm <mirko@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#ifndef WEAVERIMPLSTATE_H
10#define WEAVERIMPLSTATE_H
11
12#include "state.h"
13#include "weaver.h"
14
15namespace ThreadWeaver
16{
17class QueueSignals;
18
19/*
20 * Base class for all WeaverImpl states.
21 */
22class WeaverImplState : public State
23{
24public:
25 explicit WeaverImplState(QueueSignals *weaver);
26
27 const State *state() const override;
28
29 /* Shut down the queue. */
30 void shutDown() override;
31 /* Set the maximum number of threads this Weaver object may start. */
32 void setMaximumNumberOfThreads(int cap) override;
33 /* Get the maximum number of threads this Weaver may start. */
34 int maximumNumberOfThreads() const override;
35 /* Returns the current number of threads in the inventory. */
36 int currentNumberOfThreads() const override;
37 /* Enqueue a job. */
38 void enqueue(const QList<JobPointer> &jobs) override;
39 /* Dequeue a job. */
40 bool dequeue(const JobPointer &job) override;
41 /* Dequeue all jobs. */
42 void dequeue() override;
43 /* Finish all queued jobs. */
44 void finish() override;
45 /* Are no more jobs queued? */
46 bool isEmpty() const override;
47 /* Are all threads waiting? */
48 bool isIdle() const override;
49 /* How many jobs are currently queued? */
50 int queueLength() const override;
51 /* Request abort for all queued and currently executed jobs. */
52 void requestAbort() override;
53 /* Reschedule jobs to threads. */
54 void reschedule() override;
55 /* Wait (by suspending the calling thread) until a job becomes available. */
56 void waitForAvailableJob(Thread *th) override;
57
58protected:
59 /* Provide correct return type for WeaverImpl states. */
60 Weaver *weaver() override;
61 const Weaver *weaver() const override;
62};
63
64}
65
66#endif
67

source code of threadweaver/src/weaverimplstate.h