ThreadWeaver

queuestream.cpp
1 /* -*- C++ -*-
2  This file is part of ThreadWeaver, a KDE framework.
3 
4  SPDX-FileCopyrightText: 2013 Mirko Boehm <[email protected]>
5 
6  SPDX-License-Identifier: LGPL-2.0-or-later
7 */
8 
9 #include <QVector>
10 
11 #include "queue.h"
12 #include "queueing.h"
13 #include "queuestream.h"
14 
15 namespace ThreadWeaver
16 {
17 class Q_DECL_HIDDEN QueueStream::Private
18 {
19 public:
20  Private(Queue *w)
21  : weaver(w)
22  {
23  }
24  Queue *weaver;
26 };
27 
28 QueueStream::QueueStream(Queue *queue)
29  : d(new Private(queue))
30 {
31  Q_ASSERT(queue);
32 }
33 
34 QueueStream::~QueueStream()
35 {
36  flush();
37  delete d;
38 }
39 
40 void ThreadWeaver::QueueStream::add(const ThreadWeaver::JobPointer &job)
41 {
42  d->jobs.append(job);
43 }
44 
45 void QueueStream::flush()
46 {
47  if (d->jobs.isEmpty()) {
48  return;
49  }
50  Q_ASSERT(d->weaver);
51  d->weaver->enqueue(d->jobs);
52  d->jobs.clear();
53 }
54 
55 QueueStream &QueueStream::operator<<(const JobPointer &job)
56 {
57  add(job);
58  return *this;
59 }
60 
61 QueueStream &QueueStream::operator<<(JobInterface *job)
62 {
63  add(make_job(job));
64  return *this;
65 }
66 
67 QueueStream &QueueStream::operator<<(Job &job)
68 {
69  add(make_job_raw(&job));
70  return *this;
71 }
72 
73 /** @brief Return a stream the enqueues jobs in the ThreadWeaver global queue.
74  * Using this is synonymous to Weaver::instance()::stream(). */
75 QueueStream stream()
76 {
77  return QueueStream(Queue::instance());
78 }
79 
80 }
static ThreadWeaver::Queue * instance()
Access the application-global Queue.
Definition: queue.cpp:152
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Thu Sep 21 2023 04:10:21 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.