jaulib v1.1.2-28-g30efb27-dirty
Jau Support Library (C++, Java, ..)
Public Member Functions | List of all members
jau::io::ByteInStream Class Referenceabstract

Abstract byte input stream object. More...

#include <byte_stream.hpp>

Inheritance diagram for jau::io::ByteInStream:
Collaboration diagram for jau::io::ByteInStream:

Public Member Functions

 ByteInStream () noexcept
 
 ByteInStream (const ByteInStream &)=delete
 
 ~ByteInStream () noexcept override=default
 
virtual bool available (size_t n) noexcept=0
 Return whether n bytes are available in the input stream, if has_content_size() or using an asynchronous source. More...
 
virtual void close () noexcept=0
 Close the stream if supported by the underlying mechanism. More...
 
virtual uint64_t content_size () const noexcept=0
 Returns the content_size if known. More...
 
size_t discard (size_t N) noexcept
 Discard the next N bytes of the data. More...
 
virtual bool has_content_size () const noexcept=0
 Returns true if implementation is aware of content_size(), otherwise false. More...
 
virtual std::string id () const noexcept
 return the id of this data source More...
 
virtual bool is_open () const noexcept=0
 Checks if the stream has an associated file. More...
 
ByteInStreamoperator= (const ByteInStream &)=delete
 
bool peek (uint8_t &out) noexcept
 Peek at one byte. More...
 
virtual size_t peek (void *out, size_t length, size_t peek_offset) noexcept=0
 Read from the source but do not modify the internal offset. More...
 
bool read (uint8_t &out) noexcept
 Read one byte. More...
 
virtual size_t read (void *out, size_t length) noexcept=0
 Read from the source. More...
 
virtual uint64_t tellg () const noexcept=0
 Returns the input position indicator, similar to std::basic_istream. More...
 
virtual std::string to_string () const noexcept=0
 
- Public Member Functions inherited from jau::io::iostate_func
 iostate_func () noexcept
 
 iostate_func (const iostate_func &o) noexcept=default
 
 iostate_func (iostate_func &&o) noexcept=default
 
virtual ~iostate_func () noexcept=default
 
bool bad () const noexcept
 Checks if a non-recoverable error has occurred. More...
 
virtual void clear (const iostate state=iostate::goodbit) noexcept
 Clears state flags by assignment to the given value. More...
 
bool eof () const noexcept
 Checks if end-of-file has been reached. More...
 
bool fail () const noexcept
 Checks if an error has occurred. More...
 
bool good () const noexcept
 Checks if no error nor eof() has occurred i.e. More...
 
 operator bool () const noexcept
 Checks if no error has occurred, synonym of !fail(). More...
 
bool operator! () const noexcept
 Checks if an error has occurred, synonym of fail(). More...
 
iostate_funcoperator= (const iostate_func &o) noexcept=default
 
iostate_funcoperator= (iostate_func &&o) noexcept=default
 
virtual iostate rdstate () const noexcept
 Returns the current state flags. More...
 
void setstate (const iostate state) noexcept
 Sets state flags, by keeping its previous bits. More...
 
bool timeout () const noexcept
 Checks if a timeout (non-recoverable) has occurred. More...
 

Additional Inherited Members

- Protected Member Functions inherited from jau::io::iostate_func
constexpr iostate rdstate_impl () const noexcept
 
constexpr void setstate_impl (iostate state) const noexcept
 

Detailed Description

Abstract byte input stream object.

ByteInStream Properties

The byte input stream can originate from a local source w/o delay, remote URL like http connection or even from another thread feeding the input buffer.
Both latter asynchronous resources may expose blocking properties in available().

Asynchronous resources benefit from knowing their content size, as their available() implementation may avoid blocking and waiting for requested bytes available if the stream is already beyond its scope.

All method implementations are of noexcept.

One may use fail() to detect whether an error has occurred, while end_of_data() not only covers the end-of-stream (EOS) case but includes fail().

See also
ByteInStream Properties

Definition at line 195 of file byte_stream.hpp.

Constructor & Destructor Documentation

◆ ByteInStream() [1/2]

jau::io::ByteInStream::ByteInStream ( )
inlinenoexcept

Definition at line 198 of file byte_stream.hpp.

◆ ~ByteInStream()

jau::io::ByteInStream::~ByteInStream ( )
overridedefaultnoexcept

◆ ByteInStream() [2/2]

jau::io::ByteInStream::ByteInStream ( const ByteInStream )
delete

Member Function Documentation

◆ operator=()

ByteInStream & jau::io::ByteInStream::operator= ( const ByteInStream )
delete

◆ is_open()

virtual bool jau::io::ByteInStream::is_open ( ) const
pure virtualnoexcept

◆ close()

virtual void jau::io::ByteInStream::close ( )
pure virtualnoexcept

Close the stream if supported by the underlying mechanism.

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

Here is the caller graph for this function:

◆ available()

virtual bool jau::io::ByteInStream::available ( size_t  n)
pure virtualnoexcept

Return whether n bytes are available in the input stream, if has_content_size() or using an asynchronous source.

If !has_content_size() and not being an asynchronous source, !end_of_data() is returned.

Method may be blocking when using an asynchronous source up until the requested bytes are available.

A subsequent call to read() shall return immediately with at least the requested numbers of bytes available, if has_content_size() or using an asynchronous source.

See details of the implementing class.

Parameters
nbyte count to wait for
Returns
true if n bytes are available, otherwise false
See also
has_content_size()
read()
ByteInStream Properties

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

◆ read() [1/2]

virtual size_t jau::io::ByteInStream::read ( void *  out,
size_t  length 
)
pure virtualnoexcept

Read from the source.

Moves the internal offset so that every call to read will return a new portion of the source.

Use available() to try to wait for a certain amount of bytes available.

This method shall only block until min(available, length) bytes are transfered.

See details of the implementing class.

Parameters
outthe byte array to write the result to
lengththe length of the byte array out
Returns
length in bytes that was actually read and put into out
See also
available()
ByteInStream Properties

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_Recorder, jau::io::ByteInStream_URL, and jau::io::ByteInStream_Feed.

◆ read() [2/2]

bool ByteInStream::read ( uint8_t &  out)
noexcept

Read one byte.

Parameters
outthe byte to read to
Returns
true if one byte has been read, false otherwise

Definition at line 82 of file byte_stream.cpp.

◆ peek() [1/2]

virtual size_t jau::io::ByteInStream::peek ( void *  out,
size_t  length,
size_t  peek_offset 
)
pure virtualnoexcept

Read from the source but do not modify the internal offset.

Consecutive calls to peek() will return portions of the source starting at the same position.

Parameters
outthe byte array to write the output to
lengththe length of the byte array out
peek_offsetthe offset into the stream to read at
Returns
length in bytes that was actually read and put into out

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

◆ peek() [2/2]

bool ByteInStream::peek ( uint8_t &  out)
noexcept

Peek at one byte.

Parameters
outan output byte
Returns
true if one byte has been peeked, false otherwise

Definition at line 86 of file byte_stream.cpp.

◆ discard()

size_t ByteInStream::discard ( size_t  N)
noexcept

Discard the next N bytes of the data.

Parameters
Nthe number of bytes to discard
Returns
number of bytes actually discarded

Definition at line 90 of file byte_stream.cpp.

◆ id()

virtual std::string jau::io::ByteInStream::id ( ) const
inlinevirtualnoexcept

return the id of this data source

Returns
std::string representing the id of this data source

Reimplemented in jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

Definition at line 294 of file byte_stream.hpp.

Here is the caller graph for this function:

◆ tellg()

virtual uint64_t jau::io::ByteInStream::tellg ( ) const
pure virtualnoexcept

Returns the input position indicator, similar to std::basic_istream.

Returns
number of bytes read so far.

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

◆ has_content_size()

virtual bool jau::io::ByteInStream::has_content_size ( ) const
pure virtualnoexcept

Returns true if implementation is aware of content_size(), otherwise false.

See also
content_size()

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

Here is the caller graph for this function:

◆ content_size()

virtual uint64_t jau::io::ByteInStream::content_size ( ) const
pure virtualnoexcept

Returns the content_size if known.

See also
has_content_size()

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

Here is the caller graph for this function:

◆ to_string()

virtual std::string jau::io::ByteInStream::to_string ( ) const
pure virtualnoexcept

Implemented in jau::io::ByteInStream_SecMemory, jau::io::ByteInStream_File, jau::io::ByteInStream_URL, jau::io::ByteInStream_Feed, and jau::io::ByteInStream_Recorder.

Here is the caller graph for this function:

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