StreamTransformer.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  * StreamTransformer.h
8  *
9  * @author Slavey Karadzhov <slaff@attachix.com>
10  *
11  ****/
12 
13 #pragma once
14 
15 #include "Buffer/CircularBuffer.h"
16 
21 {
22 public:
23  StreamTransformer(IDataSourceStream* stream, size_t resultSize = 256, size_t blockSize = 64)
24  : sourceStream(stream), result(new uint8_t[resultSize]), resultSize(resultSize), blockSize(blockSize)
25  {
26  }
27 
29  {
30  delete[] result;
31  delete tempStream;
32  delete sourceStream;
33  }
34 
35  //Use base class documentation
36  StreamType getStreamType() const override
37  {
38  return sourceStream->getStreamType();
39  }
40 
45  int available() override
46  {
47  return -1;
48  }
49 
50  bool isValid() const
51  {
52  return sourceStream != nullptr && sourceStream->isValid();
53  }
54 
55  uint16_t readMemoryBlock(char* data, int bufSize) override;
56 
57  bool seek(int len) override;
58 
59  bool isFinished() override;
60 
61  String getName() const override
62  {
63  return (sourceStream == nullptr) ? nullptr : sourceStream->getName();
64  }
65 
70  virtual void saveState(){};
71 
75  virtual void restoreState(){};
76 
77 protected:
87  virtual size_t transform(const uint8_t* in, size_t inLength, uint8_t* out, size_t outLength) = 0;
88 
89 private:
90  void fillTempStream(char* buffer, size_t bufSize);
91 
92  IDataSourceStream* sourceStream{nullptr};
93  CircularBuffer* tempStream{nullptr};
94  uint8_t* result{nullptr};
95  size_t resultSize;
96  size_t blockSize;
97 };
StreamTransformer(IDataSourceStream *stream, size_t resultSize=256, size_t blockSize=64)
Definition: StreamTransformer.h:23
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
Base class for read-only stream.
Definition: DataSourceStream.h:45
~StreamTransformer()
Definition: StreamTransformer.h:28
The String class.
Definition: WString.h:136
virtual bool isValid() const
Determine if the stream object contains valid data.
Definition: DataSourceStream.h:61
Class that can be used to transform streams of data on the fly.
Definition: StreamTransformer.h:20
virtual void restoreState()
A method that restores the last backed up state.
Definition: StreamTransformer.h:75
String getName() const override
Returns name of the resource.
Definition: StreamTransformer.h:61
bool seek(int len) override
Move read cursor.
Circular stream class.
Definition: CircularBuffer.h:28
StreamType
Data stream type.
Definition: DataSourceStream.h:25
virtual String getName() const
Returns name of the resource.
Definition: DataSourceStream.h:156
bool isValid() const
Determine if the stream object contains valid data.
Definition: StreamTransformer.h:50
StreamType getStreamType() const override
Get the stream type.
Definition: StreamTransformer.h:36
virtual size_t transform(const uint8_t *in, size_t inLength, uint8_t *out, size_t outLength)=0
Inherited class implements this method to transform a block of data.
virtual StreamType getStreamType() const
Get the stream type.
Definition: DataSourceStream.h:51
int available() override
Return the total length of the stream.
Definition: StreamTransformer.h:45
virtual void saveState()
A method that backs up the current state.
Definition: StreamTransformer.h:70
bool isFinished() override
Check if all data has been read.