LimitedMemoryStream.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  * LimitedMemoryStream.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "ReadWriteStream.h"
14 
22 {
23 public:
30  LimitedMemoryStream(void* buffer, size_t length, size_t available, bool owned)
31  : owned(owned), buffer(static_cast<char*>(buffer)), capacity(length),
32  writePos(available <= length ? available : length)
33  {
34  }
35 
40  LimitedMemoryStream(size_t length) : LimitedMemoryStream(nullptr, length, 0, false)
41  {
42  }
43 
45  {
46  if(owned) {
47  free(buffer);
48  }
49  }
50 
51  StreamType getStreamType() const override
52  {
53  return eSST_Memory;
54  }
55 
59  char* getStreamPointer() const
60  {
61  return reinterpret_cast<char*>(buffer ? buffer + readPos : nullptr);
62  }
63 
64  int available() override
65  {
66  return writePos - readPos;
67  }
68 
69  size_t getCapacity() const
70  {
71  return capacity;
72  }
73 
74  uint16_t readMemoryBlock(char* data, int bufSize) override;
75 
76  int seekFrom(int offset, SeekOrigin origin) override;
77 
78  size_t write(const uint8_t* buffer, size_t size) override;
79 
80  bool isFinished() override
81  {
82  return available() <= 0;
83  }
84 
85  bool moveString(String& s) override;
86 
87 private:
88  bool owned;
89  char* buffer;
90  size_t capacity;
91  size_t writePos{0};
92  size_t readPos{0};
93 };
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
Memory stream operating on fixed-size buffer Once the limit is reached the stream will discard incomi...
Definition: LimitedMemoryStream.h:22
LimitedMemoryStream(void *buffer, size_t length, size_t available, bool owned)
Constructor for use with pre-existing buffer.
Definition: LimitedMemoryStream.h:30
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
StreamType getStreamType() const override
Get the stream type.
Definition: LimitedMemoryStream.h:51
char * getStreamPointer() const
Get a pointer to the current position.
Definition: LimitedMemoryStream.h:59
~LimitedMemoryStream()
Definition: LimitedMemoryStream.h:44
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
bool moveString(String &s) override
Memory-based streams may be able to move content into a String.
size_t getCapacity() const
Definition: LimitedMemoryStream.h:69
size_t write(const uint8_t *buffer, size_t size) override
Write chars to stream.
LimitedMemoryStream(size_t length)
Constructor to set size of internal buffer.
Definition: LimitedMemoryStream.h:40
int available() override
Return the total length of the stream.
Definition: LimitedMemoryStream.h:64
bool isFinished() override
Check if all data has been read.
Definition: LimitedMemoryStream.h:80
Base class for read/write stream.
Definition: ReadWriteStream.h:20
The String class.
Definition: WString.h:137
StreamType
Data stream type.
Definition: DataSourceStream.h:25
@ eSST_Memory
Memory stream.
Definition: DataSourceStream.h:27