18 #ifndef MULTI_TRACK_SOURCE_H 19 #define MULTI_TRACK_SOURCE_H 25 #include <QFutureSynchronizer> 28 #include <QtConcurrentRun> 39 template <
class SOURCE, const
bool INITIALIZE>
41 private QList<SOURCE *>
58 Q_ASSERT(INITIALIZE || (tracks == 0));
59 Q_ASSERT(QList<SOURCE *>::size() == static_cast<int>(tracks));
72 virtual void goOn() Q_DECL_OVERRIDE
74 QFutureSynchronizer<void> synchronizer;
76 foreach (SOURCE *src,
static_cast< QList<SOURCE *>
>(*
this)) {
78 synchronizer.addFuture(QtConcurrent::run(
85 synchronizer.waitForFinished();
89 virtual bool done() const Q_DECL_OVERRIDE
91 foreach (SOURCE *src,
static_cast< QList<SOURCE *>
>(*
this))
92 if (src && !src->done())
return false;
100 virtual unsigned int tracks() const Q_DECL_OVERRIDE
102 return QList<SOURCE *>::size();
110 inline virtual SOURCE *
at(
unsigned int track)
const {
111 return QList<SOURCE *>::at(track);
115 inline virtual SOURCE * operator [] (
unsigned int track)
128 inline virtual bool insert(
unsigned int track, SOURCE *source) {
129 QList<SOURCE *>::insert(track, source);
130 return (at(track) == source);
135 while (!QList<SOURCE *>::isEmpty())
136 delete QList<SOURCE *>::takeLast();
152 template <
class SOURCE>
164 QObject *parent = Q_NULLPTR)
167 for (
unsigned int i = 0; i < tracks; i++)
168 this->insert(i,
new(std::nothrow) SOURCE());
MultiTrackSource(unsigned int tracks, QObject *parent=Q_NULLPTR)
virtual bool done() const Q_DECL_OVERRIDE
virtual unsigned int tracks() const Q_DECL_OVERRIDE
MultiTrackSource(unsigned int tracks, QObject *parent=Q_NULLPTR)
virtual void goOn() Q_DECL_OVERRIDE
virtual ~MultiTrackSource()
virtual bool insert(unsigned int track, SOURCE *source)
virtual SOURCE * at(unsigned int track) const
virtual ~MultiTrackSource() Q_DECL_OVERRIDE
void runSource(SOURCE *src)