File indexing completed on 2024-04-28 04:01:23
0001 /* -*- C++ -*- 0002 This file is part of ThreadWeaver, a KDE framework. 0003 0004 SPDX-FileCopyrightText: 2013 Mirko Boehm <mirko@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.0-or-later 0007 */ 0008 0009 #include <QList> 0010 0011 #include "queue.h" 0012 #include "queueing.h" 0013 #include "queuestream.h" 0014 0015 namespace ThreadWeaver 0016 { 0017 class Q_DECL_HIDDEN QueueStream::Private 0018 { 0019 public: 0020 Private(Queue *w) 0021 : weaver(w) 0022 { 0023 } 0024 Queue *weaver; 0025 QList<JobPointer> jobs; 0026 }; 0027 0028 QueueStream::QueueStream(Queue *queue) 0029 : d(new Private(queue)) 0030 { 0031 Q_ASSERT(queue); 0032 } 0033 0034 QueueStream::~QueueStream() 0035 { 0036 flush(); 0037 delete d; 0038 } 0039 0040 void ThreadWeaver::QueueStream::add(const ThreadWeaver::JobPointer &job) 0041 { 0042 d->jobs.append(job); 0043 } 0044 0045 void QueueStream::flush() 0046 { 0047 if (d->jobs.isEmpty()) { 0048 return; 0049 } 0050 Q_ASSERT(d->weaver); 0051 d->weaver->enqueue(d->jobs); 0052 d->jobs.clear(); 0053 } 0054 0055 QueueStream &QueueStream::operator<<(const JobPointer &job) 0056 { 0057 add(job); 0058 return *this; 0059 } 0060 0061 QueueStream &QueueStream::operator<<(JobInterface *job) 0062 { 0063 add(make_job(job)); 0064 return *this; 0065 } 0066 0067 QueueStream &QueueStream::operator<<(Job &job) 0068 { 0069 add(make_job_raw(&job)); 0070 return *this; 0071 } 0072 0073 /** @brief Return a stream the enqueues jobs in the ThreadWeaver global queue. 0074 * Using this is synonymous to Weaver::instance()::stream(). */ 0075 QueueStream stream() 0076 { 0077 return QueueStream(Queue::instance()); 0078 } 0079 0080 }