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 
29 
31 {
32 public:
33  StreamTransformer(IDataSourceStream* stream, size_t resultSize = 256, size_t blockSize = 64)
34  : sourceStream(stream), result(new uint8_t[resultSize]), resultSize(resultSize), blockSize(blockSize)
35  {
36  }
37 
41  StreamTransformer(IDataSourceStream* stream, const StreamTransformerCallback& callback, size_t resultSize = 256,
42  size_t blockSize = 64) SMING_DEPRECATED : transformCallback(callback),
43  sourceStream(stream),
44  result(new uint8_t[resultSize]),
45  resultSize(resultSize),
46  blockSize(blockSize)
47  {
48  }
49 
51  {
52  delete[] result;
53  delete tempStream;
54  delete sourceStream;
55  }
56 
57  //Use base class documentation
58  StreamType getStreamType() const override
59  {
60  return sourceStream->getStreamType();
61  }
62 
67  int available() override
68  {
69  return -1;
70  }
71 
72  //Use base class documentation
73  uint16_t readMemoryBlock(char* data, int bufSize) override;
74 
75  //Use base class documentation
76  bool seek(int len) override;
77 
78  //Use base class documentation
79  bool isFinished() override;
80 
81  String getName() const override
82  {
83  return (sourceStream == nullptr) ? nullptr : sourceStream->getName();
84  }
85 
90  virtual void saveState(){};
91 
95  virtual void restoreState(){};
96 
97 protected:
107  virtual size_t transform(const uint8_t* in, size_t inLength, uint8_t* out, size_t outLength)
108  {
109  return (transformCallback == nullptr) ? 0 : transformCallback(in, inLength, out, outLength);
110  }
111 
116 
117 private:
118  IDataSourceStream* sourceStream = nullptr;
119  CircularBuffer* tempStream = nullptr;
120  uint8_t* result = nullptr;
121  size_t resultSize;
122  size_t blockSize;
123 };
124 
StreamTransformer(IDataSourceStream *stream, size_t resultSize=256, size_t blockSize=64)
Definition: StreamTransformer.h:33
virtual size_t transform(const uint8_t *in, size_t inLength, uint8_t *out, size_t outLength)
Inherited class implements this method to transform a block of data.
Definition: StreamTransformer.h:107
StreamTransformer(IDataSourceStream *stream, const StreamTransformerCallback &callback, size_t resultSize=256, size_t blockSize=64)
Constructor with external callback function.
Definition: StreamTransformer.h:41
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
StreamTransformerCallback transformCallback
Callback function to perform transformation.
Definition: StreamTransformer.h:115
Base class for data source stream.
Definition: DataSourceStream.h:39
~StreamTransformer()
Definition: StreamTransformer.h:50
The String class.
Definition: WString.h:136
Definition: StreamTransformer.h:30
virtual void restoreState()
A method that restores the last backed up state.
Definition: StreamTransformer.h:95
String getName() const override
Returns name of the resource.
Definition: StreamTransformer.h:81
bool seek(int len) override
Move read cursor.
Circular stream class.
Definition: CircularBuffer.h:28
#define SMING_DEPRECATED
Definition: sming_attr.h:30
StreamType
Data stream type.
Definition: DataSourceStream.h:22
virtual String getName() const
Returns name of the resource.
Definition: DataSourceStream.h:157
StreamType getStreamType() const override
Get the stream type.
Definition: StreamTransformer.h:58
virtual StreamType getStreamType() const
Get the stream type.
Definition: DataSourceStream.h:45
int available() override
Return the total length of the stream.
Definition: StreamTransformer.h:67
Delegate< size_t(const uint8_t *in, size_t inLength, uint8_t *out, size_t outLength)> StreamTransformerCallback
Class that can be used to transform streams of data on the fly.
Definition: StreamTransformer.h:28
virtual void saveState()
A method that backs up the current state.
Definition: StreamTransformer.h:90
bool isFinished() override
Check if all data has been read.