MemoryDataStream.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  * MemoryDataStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "ReadWriteStream.h"
14 #include <WString.h>
15 
27 {
28 public:
29  MemoryDataStream(size_t maxCapacity = UINT16_MAX) : maxCapacity(maxCapacity)
30  {
31  }
32 
36  MemoryDataStream(String&& string) noexcept;
37 
39  {
40  free(buffer);
41  }
42 
43  StreamType getStreamType() const override
44  {
45  return eSST_MemoryWritable;
46  }
47 
51  const char* getStreamPointer() const
52  {
53  return buffer ? buffer + readPos : nullptr;
54  }
55 
60  int available() override
61  {
62  return size - readPos;
63  }
64 
66 
72  size_t write(const uint8_t* buffer, size_t size) override;
73 
74  uint16_t readMemoryBlock(char* data, int bufSize) override;
75 
76  int seekFrom(int offset, SeekOrigin origin) override;
77 
78  bool isFinished() override
79  {
80  return readPos >= size;
81  }
82 
83  bool moveString(String& s) override;
84 
96  bool ensureCapacity(size_t minCapacity);
97 
101  void clear()
102  {
103  size = 0;
104  readPos = 0;
105  }
106 
110  void reset()
111  {
112  clear();
113  free(buffer);
114  buffer = nullptr;
115  capacity = 0;
116  }
117 
118  size_t getSize() const
119  {
120  return size;
121  }
122 
123  size_t getCapacity() const
124  {
125  return capacity;
126  }
127 
128 private:
129  char* buffer = nullptr;
130  size_t maxCapacity{UINT16_MAX};
131  size_t readPos = 0;
132  size_t size = 0;
133  size_t capacity = 0;
134 };
Read/write stream using expandable memory buffer.
Definition: MemoryDataStream.h:26
size_t write(const uint8_t *buffer, size_t size) override
Write chars to end of stream.
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
The String class.
Definition: WString.h:136
size_t getSize() const
Definition: MemoryDataStream.h:126
StreamType
Data stream type.
Definition: DataSourceStream.h:25
StreamType getStreamType() const override
Get the stream type.
Definition: MemoryDataStream.h:51
void clear()
Clear data from stream and reset to start, but keep buffer allocated.
Definition: MemoryDataStream.h:109
void reset()
Clear stream and release allocated memory.
Definition: MemoryDataStream.h:118
bool moveString(String &s) override
Memory-based streams may be able to move content into a String.
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
MemoryDataStream(size_t maxCapacity=UINT16_MAX)
Definition: MemoryDataStream.h:37
const char * getStreamPointer() const
Get a pointer to the current position.
Definition: MemoryDataStream.h:59
bool isFinished() override
Check if all data has been read.
Definition: MemoryDataStream.h:86
int available() override
Return the total length of the stream.
Definition: MemoryDataStream.h:68
@ eSST_MemoryWritable
Definition: DataSourceStream.h:28
size_t getCapacity() const
Definition: MemoryDataStream.h:131
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
bool ensureCapacity(size_t minCapacity)
Pre-allocate stream to given size.
size_t write(uint8_t charToWrite) override
From Stream class: We don't write using this stream.
Definition: ReadWriteStream.h:30
~MemoryDataStream()
Definition: MemoryDataStream.h:46
Base class for read/write stream.
Definition: ReadWriteStream.h:19