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 
19 /*
20  * MemoryDataStream
21  *
22  * This is intended to allow data to be streamed into it, then streamed back out at a later
23  * date.
24  *
25  * It is _not_ intended to have data continuously written in and read out; memory is not reclaimed
26  * as it is read.
27  */
29 {
30 public:
32  {
33  free(buffer);
34  }
35 
36  StreamType getStreamType() const override
37  {
38  return eSST_Memory;
39  }
40 
44  const char* getStreamPointer() const
45  {
46  return buffer ? buffer + readPos : nullptr;
47  }
48 
53  int available() override
54  {
55  return size - readPos;
56  }
57 
59 
65  size_t write(const uint8_t* buffer, size_t size) override;
66 
67  uint16_t readMemoryBlock(char* data, int bufSize) override;
68 
69  int seekFrom(int offset, unsigned origin) override;
70 
71  bool isFinished() override
72  {
73  return readPos >= size;
74  }
75 
87  bool ensureCapacity(size_t minCapacity);
88 
92  void clear()
93  {
94  size = 0;
95  readPos = 0;
96  }
97 
98 private:
99  char* buffer = nullptr;
100  size_t readPos = 0;
101  size_t size = 0;
102  size_t capacity = 0;
103 };
104 
bool isFinished() override
Check if all data has been read.
Definition: MemoryDataStream.h:71
Memory data stream.
Definition: DataSourceStream.h:24
const char * getStreamPointer() const
Get a pointer to the current position.
Definition: MemoryDataStream.h:44
int seekFrom(int offset, unsigned origin) override
Change position in stream.
int available() override
Return the total length of the stream.
Definition: MemoryDataStream.h:53
bool ensureCapacity(size_t minCapacity)
Pre-allocate stream to given size.
~MemoryDataStream()
Definition: MemoryDataStream.h:31
StreamType
Data stream type.
Definition: DataSourceStream.h:22
size_t write(uint8_t charToWrite) override
Write a single character to the stream.
Definition: ReadWriteStream.h:29
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
size_t write(const uint8_t *buffer, size_t size) override
Write chars to end of stream.
StreamType getStreamType() const override
Get the stream type.
Definition: MemoryDataStream.h:36
Base class for read/write stream.
Definition: ReadWriteStream.h:22
void clear()
Clear data from stream and reset to start, but keep buffer allocated.
Definition: MemoryDataStream.h:92
Definition: MemoryDataStream.h:28