StreamChain.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * StreamChain.h
8  *
9  * @author: 2018 - Slavey Karadzhov <slav@attachix.com>
10  *
11  ****/
12 
13 #pragma once
14 
15 #include "MultiStream.h"
16 #include "../ObjectQueue.h"
17 
18 #ifndef MAX_STREAM_CHAIN_SIZE
19 
22 #define MAX_STREAM_CHAIN_SIZE 10
23 #endif
24 
30 class StreamChain : public MultiStream
31 {
32 public:
34  {
35  // Free any remaining streams in queue
36  while(queue.count() != 0) {
37  delete queue.dequeue();
38  }
39  }
40 
42  {
43  if(stream == nullptr) {
44  return false;
45  }
46 
47  return queue.enqueue(stream);
48  }
49 
50 protected:
52  {
53  return queue.dequeue();
54  }
55 
56 private:
58 
59  Queue queue;
60 };
~StreamChain()
Definition: StreamChain.h:33
bool attachStream(IDataSourceStream *stream)
Definition: StreamChain.h:41
Base class for read-only stream which generates output from multiple source streams.
Definition: MultiStream.h:23
Base class for read-only stream.
Definition: DataSourceStream.h:40
IDataSourceStream * getNextStream() override
Inherited class must implement this.
Definition: StreamChain.h:51
unsigned int count() const override
Definition: FIFO.h:37
T * dequeue()
Definition: ObjectQueue.h:37
bool enqueue(T element)
Definition: FIFO.h:69
Provides a read-only stream which concatenates content from multiple source streams.
Definition: StreamChain.h:30