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
22 #define MAX_STREAM_CHAIN_SIZE 100
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  StreamType getStreamType() const override
51  {
52  return eSST_Chain;
53  }
54 
55 protected:
57  {
58  return queue.dequeue();
59  }
60 
61 private:
63 
64  Queue queue;
65 };
unsigned int count() const override
Definition: FIFO.h:37
bool enqueue(T element)
Definition: FIFO.h:74
Base class for read-only stream.
Definition: DataSourceStream.h:46
Base class for read-only stream which generates output from multiple source streams.
Definition: MultiStream.h:24
T * dequeue()
Definition: ObjectQueue.h:37
Provides a read-only stream which concatenates content from multiple source streams.
Definition: StreamChain.h:31
~StreamChain()
Definition: StreamChain.h:33
IDataSourceStream * getNextStream() override
Inherited class must implement this.
Definition: StreamChain.h:56
StreamType getStreamType() const override
Get the stream type.
Definition: StreamChain.h:50
bool attachStream(IDataSourceStream *stream)
Definition: StreamChain.h:41
StreamType
Data stream type.
Definition: DataSourceStream.h:25
@ eSST_Chain
A stream (chain) containing multiple streams.
Definition: DataSourceStream.h:34