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  bool isValid() const
73  {
74  return sourceStream != nullptr && sourceStream->isValid();
75  }
76 
77  uint16_t readMemoryBlock(char* data, int bufSize) override;
78 
79  bool seek(int len) override;
80 
81  bool isFinished() override;
82 
83  String getName() const override
84  {
85  return (sourceStream == nullptr) ? nullptr : sourceStream->getName();
86  }
87 
92  virtual void saveState(){};
93 
97  virtual void restoreState(){};
98 
99 protected:
109  virtual size_t transform(const uint8_t* in, size_t inLength, uint8_t* out, size_t outLength)
110  {
111  return (transformCallback == nullptr) ? 0 : transformCallback(in, inLength, out, outLength);
112  }
113 
118 
119 private:
120  void fillTempStream(char* buffer, size_t bufSize);
121 
122  IDataSourceStream* sourceStream{nullptr};
123  CircularBuffer* tempStream{nullptr};
124  uint8_t* result{nullptr};
125  size_t resultSize;
126  size_t blockSize;
127 };
128 
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:109
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:117
Base class for read-only stream.
Definition: DataSourceStream.h:40
~StreamTransformer()
Definition: StreamTransformer.h:50
The String class.
Definition: WString.h:136
virtual bool isValid() const
Determine if the stream object contains valid data.
Definition: DataSourceStream.h:56
Definition: StreamTransformer.h:30
virtual void restoreState()
A method that restores the last backed up state.
Definition: StreamTransformer.h:97
String getName() const override
Returns name of the resource.
Definition: StreamTransformer.h:83
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:26
virtual String getName() const
Returns name of the resource.
Definition: DataSourceStream.h:160
bool isValid() const
Determine if the stream object contains valid data.
Definition: StreamTransformer.h:72
StreamType getStreamType() const override
Get the stream type.
Definition: StreamTransformer.h:58
virtual StreamType getStreamType() const
Get the stream type.
Definition: DataSourceStream.h:46
int available() override
Return the total length of the stream.
Definition: StreamTransformer.h:67
virtual void saveState()
A method that backs up the current state.
Definition: StreamTransformer.h:92
bool isFinished() override
Check if all data has been read.