Read/write stream using expandable memory buffer. More...

#include <MemoryDataStream.h>

Inheritance diagram for MemoryDataStream:
Collaboration diagram for MemoryDataStream:

Public Member Functions

 MemoryDataStream (size_t maxCapacity=UINT16_MAX)
 
 MemoryDataStream (String &&string) noexcept
 Stream takes ownership of String content using move semantics. More...
 
 ~MemoryDataStream ()
 
StreamType getStreamType () const override
 Get the stream type. More...
 
const char * getStreamPointer () const
 Get a pointer to the current position. More...
 
int available () override
 Return the total length of the stream. More...
 
size_t write (const uint8_t *buffer, size_t size) override
 Write chars to end of stream. More...
 
uint16_t readMemoryBlock (char *data, int bufSize) override
 Read a block of memory. More...
 
int seekFrom (int offset, SeekOrigin origin) override
 Change position in stream. More...
 
bool isFinished () override
 Check if all data has been read. More...
 
bool moveString (String &s) override
 Memory-based streams may be able to move content into a String. More...
 
bool ensureCapacity (size_t minCapacity)
 Pre-allocate stream to given size. More...
 
void clear ()
 Clear data from stream and reset to start, but keep buffer allocated. More...
 
void reset ()
 Clear stream and release allocated memory. More...
 
size_t getSize () const
 
size_t getCapacity () const
 
size_t write (uint8_t charToWrite) override
 
virtual size_t write (const uint8_t *buffer, size_t size)=0
 Write chars to stream. More...
 
- Public Member Functions inherited from ReadWriteStream
size_t write (uint8_t charToWrite) override
 From Stream class: We don't write using this stream. More...
 
virtual size_t copyFrom (IDataSourceStream *source, size_t size=SIZE_MAX)
 Copy data from a source stream. More...
 
virtual size_t write (uint8_t c)=0
 Writes a single character to output stream. More...
 
size_t write (const char *str)
 Writes a c-string to output stream. More...
 
virtual size_t write (const uint8_t *buffer, size_t size)
 Writes characters from a buffer to output stream. More...
 
size_t write (const char *buffer, size_t size)
 Writes characters from a buffer to output stream. More...
 
- Public Member Functions inherited from IDataSourceStream
virtual bool isValid () const
 Determine if the stream object contains valid data. More...
 
size_t readBytes (char *buffer, size_t length) override
 Read chars from stream into buffer. More...
 
int read () override
 Read one character and moves the stream pointer. More...
 
int peek () override
 Read a character without advancing the stream pointer. More...
 
virtual bool seek (int len)
 Move read cursor. More...
 
void flush () override
 
virtual String id () const
 Returns unique id of the resource. More...
 
virtual String getName () const
 Returns name of the resource. More...
 
virtual MimeType getMimeType () const
 Get MIME type for stream content. More...
 
String readString (size_t maxLen) override
 Overrides Stream method for more efficient reading. More...
 
virtual size_t readBytes (char *buffer, size_t length)
 Read chars from stream into buffer. More...
 
size_t readBytes (uint8_t *buffer, size_t length)
 
- Public Member Functions inherited from Stream
 Stream ()
 
void setTimeout (unsigned long timeout)
 Set maximum milliseconds to wait for stream data, default is 1 second. More...
 
bool find (const char *target)
 Read data from the stream until the target string is found. More...
 
bool find (const char *target, size_t length)
 Read data from the stream until the target string of given length is found. More...
 
bool findUntil (const char *target, const char *terminator)
 As find() but search ends if the terminator string is found. More...
 
bool findUntil (const char *target, size_t targetLen, const char *terminate, size_t termLen)
 As findUntil(const char*, const char*) but search ends if the terminate string is found. More...
 
long parseInt ()
 Returns the first valid (long) integer value from the current position. More...
 
float parseFloat ()
 float version of parseInt More...
 
size_t readBytes (uint8_t *buffer, size_t length)
 
size_t readBytesUntil (char terminator, char *buffer, size_t length)
 As readBytes() with terminator character. More...
 
String readStringUntil (char terminator)
 
virtual int indexOf (char c)
 
- Public Member Functions inherited from Print
virtual ~Print ()
 
int getWriteError ()
 Gets last error. More...
 
void clearWriteError ()
 Clears the last write error. More...
 
size_t write (const char *str)
 Writes a c-string to output stream. More...
 
size_t write (const char *buffer, size_t size)
 Writes characters from a buffer to output stream. More...
 
size_t print (char c)
 Prints a single character to output stream. More...
 
size_t print (const char str[])
 Prints a c-string to output stream. More...
 
size_t print (double num, int digits=2)
 Print a floating-point number to output stream. More...
 
template<typename T >
std::enable_if< has_printTo< T >::value, size_t >::type print (const T &obj)
 Prints a Printable object to output stream. More...
 
size_t print (const String &s)
 Prints a String to output stream. More...
 
template<typename E >
std::enable_if< std::is_enum< E >::value &&!std::is_convertible< E, int >::value, size_t >::type print (E value)
 enums can be printed as strings provided they have a toString(E) implementation. More...
 
size_t println ()
 Prints a newline to output stream. More...
 
template<typename... Args>
size_t println (const Args &... args)
 Print value plus newline to output stream. More...
 
size_t printf (const char *fmt,...)
 Prints a formatted c-string to output stream. More...
 
size_t print (unsigned long num, uint8_t base=DEC)
 
template<typename... Args>
size_t print (unsigned long num, Args... args)
 
template<typename... Args>
size_t print (const unsigned long long &num, Args... args)
 
size_t print (long num, uint8_t base=DEC)
 
template<typename... Args>
size_t print (long num, Args... args)
 
template<typename... Args>
size_t print (const long long &num, Args... args)
 
template<typename... Args>
size_t print (unsigned int num, Args... args)
 
template<typename... Args>
size_t print (unsigned char num, Args... args)
 
template<typename... Args>
size_t print (int num, Args... args)
 

Additional Inherited Members

- Protected Member Functions inherited from Stream
int timedRead ()
 
int timedPeek ()
 
int peekNextDigit ()
 returns the next numeric digit in the stream or -1 if timeout More...
 
long parseInt (char skipChar)
 Like regular parseInt() but the given skipChar is ignored. More...
 
float parseFloat (char skipChar)
 Like parseInt(skipChar) for float. More...
 
- Protected Member Functions inherited from Print
void setWriteError (int err=1)
 
- Protected Attributes inherited from Stream
uint16_t receiveTimeout = 1000
 number of milliseconds to wait for the next char before aborting timed read More...
 

Detailed Description

Read/write stream using expandable memory buffer.

This is intended to allow data to be streamed into it, then streamed back out at a later date.

It is not intended to have data continuously written in and read out; memory is not reclaimed as it is read.

Constructor & Destructor Documentation

◆ MemoryDataStream() [1/2]

MemoryDataStream::MemoryDataStream ( size_t  maxCapacity = UINT16_MAX)
inline

◆ MemoryDataStream() [2/2]

MemoryDataStream::MemoryDataStream ( String &&  string)
noexcept

Stream takes ownership of String content using move semantics.

◆ ~MemoryDataStream()

MemoryDataStream::~MemoryDataStream ( )
inline

Member Function Documentation

◆ available()

int MemoryDataStream::available ( )
inlineoverridevirtual

Return the total length of the stream.

Return values
int-1 is returned when the size cannot be determined

Reimplemented from IDataSourceStream.

Reimplemented in JsonObjectStream.

◆ clear()

void MemoryDataStream::clear ( )
inline

Clear data from stream and reset to start, but keep buffer allocated.

◆ ensureCapacity()

bool MemoryDataStream::ensureCapacity ( size_t  minCapacity)

Pre-allocate stream to given size.

Parameters
minCapacityTotal minimum number of bytes required in stream
Return values
booltrue on success
Note
Memory is only reallocated if smaller than requested size. If reallocation fails the existing stream content is preserved. Intended use is to reduce or eliminate buffer reallocations if the size is known in advance. Provided subsequent write operations do not exceed the total capacity they are guaranteed to succeed, so return value checking may be skipped.

◆ getCapacity()

size_t MemoryDataStream::getCapacity ( ) const
inline

◆ getSize()

size_t MemoryDataStream::getSize ( ) const
inline

◆ getStreamPointer()

const char* MemoryDataStream::getStreamPointer ( ) const
inline

Get a pointer to the current position.

Return values
const char*Pointer to current cursor position within the data stream

◆ getStreamType()

StreamType MemoryDataStream::getStreamType ( ) const
inlineoverridevirtual

Get the stream type.

Return values
StreamTypeThe stream type.

Reimplemented from IDataSourceStream.

Reimplemented in JsonObjectStream.

◆ isFinished()

bool MemoryDataStream::isFinished ( )
inlineoverridevirtual

Check if all data has been read.

Return values
boolTrue on success.

Implements IDataSourceStream.

Reimplemented in UPnP::ActionResponse::Stream, and JsonObjectStream.

◆ moveString()

bool MemoryDataStream::moveString ( String s)
overridevirtual

Memory-based streams may be able to move content into a String.

Parameters
sString object to move data into
Return values
booltrue on success, false if there's a problem.

If the operation is not supported by the stream, s will be invalidated and false returned.

Because a String object must have a NUL terminator, this will be appended if there is sufficient capacity. In this case, the method returns true.

If there is no capacity to add a NUL terminator, then the final character of stream data will be replaced with a NUL. The method returns false to indicate this.

Reimplemented from IDataSourceStream.

◆ readMemoryBlock()

uint16_t MemoryDataStream::readMemoryBlock ( char *  data,
int  bufSize 
)
overridevirtual

Read a block of memory.

Parameters
dataPointer to the data to be read
bufSizeQuantity of chars to read
Return values
uint16_tQuantity of chars read
Todo:
Should IDataSourceStream::readMemoryBlock return same data type as its bufSize param?

Implements IDataSourceStream.

Reimplemented in JsonObjectStream.

◆ reset()

void MemoryDataStream::reset ( )
inline

Clear stream and release allocated memory.

◆ seekFrom()

int MemoryDataStream::seekFrom ( int  offset,
SeekOrigin  origin 
)
overridevirtual

Change position in stream.

Parameters
offset
origin
Return values
Newposition, < 0 on error
Note
This method is implemented by streams which support random seeking, such as files and memory streams.

Reimplemented from IDataSourceStream.

◆ write() [1/3]

size_t MemoryDataStream::write ( const uint8_t *  buffer,
size_t  size 
)
overridevirtual

Write chars to end of stream.

Parameters
bufferPointer to buffer to write to the stream
sizeQuantity of chars to write
Return values
size_tQuantity of chars written to stream

Implements ReadWriteStream.

◆ write() [2/3]

virtual size_t ReadWriteStream::write

Write chars to stream.

Parameters
bufferPointer to buffer to write to the stream
sizeQuantity of chars to write
Return values
size_tQuantity of chars written to stream
Note
Although this is defined in the Print class, ReadWriteStream uses this as the core output method so descendants are required to implement it

◆ write() [3/3]

size_t ReadWriteStream::write
inlineoverride

The documentation for this class was generated from the following file: