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  delete[] 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  uint16_t readMemoryBlock(char* data, int bufSize) override;
70 
71  int seekFrom(int offset, SeekOrigin origin) override;
72 
73  size_t write(const uint8_t* buffer, size_t size) override;
74 
75  bool isFinished() override
76  {
77  return available() <= 0;
78  }
79 
80  bool moveString(String& s) override;
81 
82 private:
83  bool owned;
84  char* buffer;
85  size_t capacity;
86  size_t writePos{0};
87  size_t readPos{0};
88 };
LimitedMemoryStream(size_t length)
Constructor to set size of internal buffer.
Definition: LimitedMemoryStream.h:40
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
Memory data stream.
Definition: DataSourceStream.h:28
int length()
Return the total length of the stream.
Definition: DataSourceStream.h:134
uint16_t readMemoryBlock(char *data, int bufSize) override
Read a block of memory.
The String class.
Definition: WString.h:136
int seekFrom(int offset, SeekOrigin origin) override
Change position in stream.
int available() override
Return the total length of the stream.
Definition: LimitedMemoryStream.h:64
SeekOrigin
Stream/file seek origins.
Definition: SeekOrigin.h:18
size_t write(const uint8_t *buffer, size_t size) override
Write chars to stream.
StreamType
Data stream type.
Definition: DataSourceStream.h:26
~LimitedMemoryStream()
Definition: LimitedMemoryStream.h:44
LimitedMemoryStream(void *buffer, size_t length, size_t available, bool owned)
Constructor for use with pre-existing buffer.
Definition: LimitedMemoryStream.h:30
bool isFinished() override
Check if all data has been read.
Definition: LimitedMemoryStream.h:75
Memory stream operating on fixed-size buffer Once the limit is reached the stream will discard incomi...
Definition: LimitedMemoryStream.h:21
bool moveString(String &s) override
Memory-based streams may be able to move content into a String.
Base class for read/write stream.
Definition: ReadWriteStream.h:19