IFS::FWFS::ArchiveStream Class Reference

Supports direct streaming into FWFS archive format. More...

#include <ArchiveStream.h>

Inheritance diagram for IFS::FWFS::ArchiveStream:
Collaboration diagram for IFS::FWFS::ArchiveStream:

Classes

class  FileInfo
 Passed to callbacks to allow modification of output data. More...
 
struct  VolumeInfo
 

Public Types

enum class  Flag { IncludeMountPoints }
 
using Flags = BitSet< uint8_t, Flag, 1 >
 
using FilterStatCallback = Delegate< bool(const Stat &stat)>
 
using CreateEncoderCallback = Delegate< IBlockEncoder *(FileInfo &file)>
 

Public Member Functions

 ArchiveStream (FileSystem *fileSystem, const VolumeInfo &volumeInfo, const String &rootPath=nullptr, Flags flags=0)
 Construct an archive stream. More...
 
 ~ArchiveStream ()
 
virtual bool filterStat (const Stat &stat)
 Override this method to filter items. More...
 
void onFilterStat (FilterStatCallback callback)
 
virtual IBlockEncodercreateEncoder (FileInfo &file)
 Override this method to implement custom encoding such as compression or encryption. More...
 
void onCreateEncoder (CreateEncoderCallback callback)
 
const StringgetCurrentPath () const
 Get the current path being processed. 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...
 
MimeType getMimeType () const override
 Get MIME type for stream content. More...
 
bool isSuccess () const
 
void reset ()
 Reset stream to beginning. More...
 
- Public Member Functions inherited from IFS::FsBase
 FsBase (IFileSystem *filesys=nullptr)
 
bool isValid () const
 
int getLastError ()
 determine if an error occurred during operation More...
 
String getErrorString (int err) const
 
String getLastErrorString () const
 
FileSystemgetFileSystem () const
 
- Public Member Functions inherited from IDataSourceStream
virtual StreamType getStreamType () const
 Get the stream type. More...
 
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...
 
int available () override
 Return the total length of the stream. More...
 
size_t write (uint8_t charToWrite) override
 From Stream class: We don't write using this stream. 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...
 
String readString (size_t maxLen) override
 Overrides Stream method for more efficient reading. More...
 
virtual bool moveString (String &s)
 Memory-based streams may be able to move content into a String. 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
 Print ()
 
 Print (const Print &)=delete
 
 Print (Print &&)=delete
 
virtual ~Print ()
 
Printoperator= (const Print &)=delete
 
Printoperator= (Print &&)=delete
 
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...
 
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...
 
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 IFS::FsBase
bool check (int64_t res)
 Check file operation result and note error code. More...
 
- 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 IFS::FsBase
int lastError {FS_OK}
 
- 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

Supports direct streaming into FWFS archive format.

Data needs to be enumerated so that all child files and directories are written first. As this happens, the parent directory is built as a list of object references.

The size of all child objects must be known before the containing object is written out. It should be sufficient to buffer all of these into an internal stream. This would only be a problem if large child objects are used. This is possible, but the builder avoids doing it and we should too.

Top-level object is a Volume, below that is the root Directory. That means objects are written in the order: child files/directories Root directory Volume End marker

Member Typedef Documentation

◆ CreateEncoderCallback

◆ FilterStatCallback

◆ Flags

Member Enumeration Documentation

◆ Flag

Enumerator
IncludeMountPoints 

Set to include mountpoints in archive.

Constructor & Destructor Documentation

◆ ArchiveStream()

IFS::FWFS::ArchiveStream::ArchiveStream ( FileSystem fileSystem,
const VolumeInfo volumeInfo,
const String rootPath = nullptr,
Flags  flags = 0 
)
inline

Construct an archive stream.

Parameters
fileSystemThe filesystem to read
volumeInfoInformation about volume to store in the stream
rootPathWhere to root the generated filesystem
flags

◆ ~ArchiveStream()

IFS::FWFS::ArchiveStream::~ArchiveStream ( )
inline

Member Function Documentation

◆ createEncoder()

virtual IBlockEncoder* IFS::FWFS::ArchiveStream::createEncoder ( FileInfo file)
inlinevirtual

Override this method to implement custom encoding such as compression or encryption.

Parameters
fileDetails of the file being archived
Return values
IBlockEncoder*Stream to use for file content. Return nullptr for default behaviour.

To support compression or encryption, this method can create the appropriate stream type and set the appropriate attributes using methods of FileInfo.

◆ filterStat()

virtual bool IFS::FWFS::ArchiveStream::filterStat ( const Stat stat)
inlinevirtual

Override this method to filter items.

Parameters
statThe current item
Return values
boolReturn true to process the item, false to skip it

Use to omit temporary files or directories.

◆ getCurrentPath()

const String& IFS::FWFS::ArchiveStream::getCurrentPath ( ) const
inline

Get the current path being processed.

◆ getMimeType()

MimeType IFS::FWFS::ArchiveStream::getMimeType ( ) const
inlineoverridevirtual

Get MIME type for stream content.

Return values
MimeType

Reimplemented from IDataSourceStream.

◆ isFinished()

bool IFS::FWFS::ArchiveStream::isFinished ( )
inlineoverridevirtual

Check if all data has been read.

Return values
boolTrue on success.

Implements IDataSourceStream.

◆ isSuccess()

bool IFS::FWFS::ArchiveStream::isSuccess ( ) const
inline

◆ onCreateEncoder()

void IFS::FWFS::ArchiveStream::onCreateEncoder ( CreateEncoderCallback  callback)
inline

◆ onFilterStat()

void IFS::FWFS::ArchiveStream::onFilterStat ( FilterStatCallback  callback)
inline

◆ readMemoryBlock()

uint16_t IFS::FWFS::ArchiveStream::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.

◆ reset()

void IFS::FWFS::ArchiveStream::reset ( )

Reset stream to beginning.

◆ seekFrom()

int IFS::FWFS::ArchiveStream::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.


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