File indexing completed on 2024-04-21 04:01:28

0001 /* -*- C++ -*-
0002     This file is part of ThreadWeaver.
0003 
0004     SPDX-FileCopyrightText: 2004-2013 Mirko Boehm <mirko@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #ifndef SEQUENCE_P_H
0010 #define SEQUENCE_P_H
0011 
0012 #include <QAtomicInt>
0013 
0014 #include "collection_p.h"
0015 #include "queuepolicy.h"
0016 #include "sequence.h"
0017 
0018 namespace ThreadWeaver
0019 {
0020 namespace Private
0021 {
0022 class BlockerPolicy : public QueuePolicy
0023 {
0024 public:
0025     bool canRun(JobPointer) override;
0026     void free(JobPointer) override;
0027     void release(JobPointer) override;
0028     void destructed(JobInterface *job) override;
0029 };
0030 
0031 class Sequence_Private : public Collection_Private
0032 {
0033 public:
0034     Sequence_Private();
0035     BlockerPolicy *blocker();
0036     void prepareToEnqueueElements() override;
0037     void processCompletedElement(Collection *collection, JobPointer job, Thread *thread) override;
0038     void elementDequeued(const JobPointer &job) override;
0039     BlockerPolicy blocker_;
0040     QAtomicInt completed_;
0041 };
0042 
0043 }
0044 
0045 }
0046 
0047 #endif // SEQUENCE_P_H