jaulib v1.4.0-2-g788cf73
Jau Support Library (C++, Java, ..)
|
Byte stream interface. More...
#include <byte_stream.hpp>
Public Types | |
typedef uint64_t | size_type |
uint64_t size data type, bit position and count | |
Public Member Functions | |
ByteStream (iomode_t mode, lb_endian_t byteOrder=lb_endian_t::little) noexcept | |
~ByteStream () 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. | |
constexpr lb_endian_t | byteOrder () const noexcept |
Returns endian byte-order of stream storage. | |
constexpr bool | canRead () const noexcept |
Returns true in case stream has iomode::read capabilities. | |
virtual bool | canRewind () const noexcept=0 |
Return true if implementation supports random rewinding the stream, i.e. | |
constexpr bool | canWrite () const noexcept |
Returns true in case stream has iomode::write capabilities. | |
virtual void | close () noexcept=0 |
Close the stream if supported by the underlying mechanism. | |
virtual size_type | contentSize () const noexcept=0 |
Returns the content_size if known. | |
virtual size_t | discard (size_t N) noexcept=0 |
Discard the next N bytes of the data. | |
virtual void | flush () noexcept=0 |
Synchronizes all output operations, or do nothing. | |
virtual bool | hasContentSize () const noexcept=0 |
Returns true if implementation is aware of content_size(), otherwise false. | |
virtual std::string | id () const noexcept |
return the id of this data source | |
virtual bool | isOpen () const noexcept=0 |
Checks if the stream has an associated file. | |
virtual size_type | mark () const noexcept=0 |
Returns the markpos set via setMark() or ByteStream::npos if unset. | |
virtual size_type | markReadLimit () const noexcept=0 |
Returns the readLimit set via setMark(). | |
constexpr iomode_t | mode () const noexcept |
bool | peek (uint8_t &out) noexcept |
Peek one byte at current position. | |
virtual size_t | peek (void *out, size_t length, size_type peek_offset) noexcept=0 |
Read from the source but do not modify the internal offset. | |
virtual size_type | position () const noexcept=0 |
Returns the position indicator, similar to e.g. | |
bool | read (uint8_t &bits) noexcept |
Read one byte, uint8_t | |
virtual size_t | read (void *out, size_t length) noexcept=0 |
Read from the source. | |
bool | readS16 (int16_t &bits) noexcept |
Read int16_t . | |
bool | readS32 (int32_t &bits) noexcept |
Read int32_t . | |
bool | readS64 (int64_t &bits) noexcept |
Read int64_t . | |
bool | readU16 (uint16_t &bits) noexcept |
Read uint16_t . | |
bool | readU32 (uint32_t &bits) noexcept |
Read incoming uint32_t . | |
bool | readU64 (uint64_t &bits) noexcept |
Read incoming uint64_t . | |
bool | readU64Raw (uint64_t &bits) noexcept |
Read incoming uint64_t w/o considering bigEndian , i.e. | |
virtual size_type | remaining () const noexcept |
Returns the remaining bytes, i.e. | |
virtual size_type | seek (size_type newPos) noexcept=0 |
Sets position indicator for output-streams or input-streams with known length, similar to e.g. | |
virtual bool | seekMark () noexcept=0 |
Seeks stream position to markpos as set via setMark(). | |
void | setImmutable () noexcept |
Clears iomode_t::write from mode() | |
virtual bool | setMark (size_type readLimit) noexcept=0 |
Set markpos to current position, allowing the stream to be seekMark(). | |
virtual std::string | toString () const noexcept=0 |
virtual size_t | write (const void *in, size_t length) noexcept=0 |
Write to the data sink. | |
bool | write (uint8_t in) noexcept |
Write one byte, uint8_t . | |
bool | writeS16 (int16_t bits) noexcept |
Write the given int16_t . | |
bool | writeS32 (int32_t bits) noexcept |
Write the given int32_t . | |
bool | writeS64 (int64_t bits) noexcept |
Write the given int64_t . | |
bool | writeU16 (uint16_t bits) noexcept |
Write the given uint16_t . | |
bool | writeU32 (uint32_t bits) noexcept |
Write the given uint32_t . | |
bool | writeU64 (uint64_t bits) noexcept |
Write the given uint64_t . | |
bool | writeU64Raw (uint64_t bits) noexcept |
Write the given uint64_t w/o considering bigEndian , i.e. | |
![]() | |
IOStateCap () noexcept | |
IOStateCap (const IOStateCap &o) noexcept=default | |
IOStateCap (IOStateCap &&o) noexcept=default | |
virtual | ~IOStateCap () noexcept=default |
void | addState (const iostate_t state) noexcept |
Adds given state flags to existing rdstate() bits. | |
virtual void | assignState (const iostate_t state=iostate_t::goodbit) noexcept |
Assigns given state to current value. | |
bool | bad () const noexcept |
Checks if a non-recoverable error has occurred. | |
void | clear (const iostate_t state=iostate_t::goodbit) noexcept |
Clears state flags by assignment to the given value. | |
void | clearStateFlags (const iostate_t clr) noexcept |
Clears given state flags from current value. | |
bool | eof () const noexcept |
Checks if end-of-file has been reached. | |
bool | fail () const noexcept |
Checks if an error has occurred. | |
bool | good () const noexcept |
Checks if no error nor eof() has occurred i.e. | |
operator bool () const noexcept | |
Checks if no error has occurred, synonym of !fail(). | |
bool | operator! () const noexcept |
Checks if an error has occurred, synonym of fail(). | |
IOStateCap & | operator= (const IOStateCap &o) noexcept=default |
IOStateCap & | operator= (IOStateCap &&o) noexcept=default |
virtual iostate_t | rdstate () const noexcept |
Returns the current state flags. | |
void | setstate (const iostate_t state) noexcept |
Sets state flags, by keeping its previous bits. | |
bool | timeout () const noexcept |
Checks if a timeout (non-recoverable) has occurred. | |
Static Public Attributes | |
static constexpr size_type | npos = std::numeric_limits<size_type>::max() |
Invalid position constant, denoting unset mark() or invalid position. | |
Protected Member Functions | |
size_t | discardRead (size_t n) noexcept |
Fallback slow discard implementation usind read() in case of unknown stream size. | |
![]() | |
constexpr void | addstate_impl (iostate_t state) const noexcept |
constexpr iostate_t | rdstate_impl () const noexcept |
Protected Attributes | |
lb_endian_t | m_byteOrder |
iomode_t | m_iomode |
Byte stream interface.
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().
Definition at line 185 of file byte_stream.hpp.
typedef uint64_t jau::io::ByteStream::size_type |
uint64_t size data type, bit position and count
Definition at line 188 of file byte_stream.hpp.
|
inlinenoexcept |
mode | iomode_t |
byteOrder | endian byte-order of stream storage, defaults to lb_endian_t::little. Only affects multi-byte r/w operations, e.g. readU16(), writeU16(), etc |
Definition at line 206 of file byte_stream.hpp.
|
overridedefaultnoexcept |
|
protectednoexcept |
Fallback slow discard implementation usind read() in case of unknown stream size.
Definition at line 87 of file byte_stream.cpp.
|
inlineconstexprnoexcept |
|
inlinenoexcept |
Clears iomode_t::write from mode()
Definition at line 214 of file byte_stream.hpp.
|
inlineconstexprnoexcept |
Returns endian byte-order of stream storage.
Only affects multi-byte r/w operations, e.g. readU16(), writeU16(), etc.
Definition at line 221 of file byte_stream.hpp.
|
inlineconstexprnoexcept |
Returns true in case stream has iomode::read capabilities.
Definition at line 224 of file byte_stream.hpp.
|
inlineconstexprnoexcept |
Returns true in case stream has iomode::write capabilities.
Definition at line 227 of file byte_stream.hpp.
|
pure virtualnoexcept |
Checks if the stream has an associated file.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
pure virtualnoexcept |
Close the stream if supported by the underlying mechanism.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinevirtualnoexcept |
return the id of this data source
Reimplemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, and jau::io::ByteStream_Recorder.
Definition at line 241 of file byte_stream.hpp.
|
pure virtualnoexcept |
Returns true if implementation is aware of content_size(), otherwise false.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
pure virtualnoexcept |
Returns the content_size if known.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
pure virtualnoexcept |
Returns the position indicator, similar to e.g.
std::basic_istream.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinevirtualnoexcept |
Returns the remaining bytes, i.e.
content_size() - position(), if content_size if known, otherwise zero.
Definition at line 268 of file byte_stream.hpp.
|
pure virtualnoexcept |
Return true if implementation supports random rewinding the stream, i.e.
seek() below position().
If random rewind is not supported and method returns false, one can still rewind in range [mark() .. position()).
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
Sets position indicator for output-streams or input-streams with known length, similar to e.g.
std::basic_istream.
No change occurs if fail() was set or the input-stream has no known length.
If newPos is >= stream-length, iostate::eofbit is set and position set to stream-length, otherwise iostate::eofbit is cleared.
Certain implementations may not allow random rewinding of the stream, see canRewind(). In this case, rewinding is limited to mark(), see setMark(), and may return ByteStream::npos if none set or exceeding range.
A ByteInStream's mark is cleared if > newPos.
newPos | desired absolute byte-offset (position) |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
pure virtualnoexcept |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
nodiscardpure virtualnoexcept |
Set markpos
to current position, allowing the stream to be seekMark().
seek() will clear markpos
if > newPos.
For implementations where seek() doesn't allow random rewinding of the stream, setMark() will allow rewinding back to markpos
if not exceeding readLimit
.
readlimit | maximum number of bytes able to read before invalidating the markpos . |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
pure virtualnoexcept |
Returns the markpos
set via setMark() or ByteStream::npos if unset.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
pure virtualnoexcept |
Returns the readLimit
set via setMark().
If unset either 0 or implicit limit.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
nodiscardpure virtualnoexcept |
Seeks stream position to markpos
as set via setMark().
markpos
is kept, hence seekMark() can be called multiple times.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
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.
Input stream operation, returns false if !is_input().
n | byte count to wait for |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
nodiscardpure 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.
Input stream operation, returns zero if !is_input().
out | the byte array to write the result to |
length | the length of the byte array out |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinenodiscardnoexcept |
Read one byte, uint8_t
bits | reference to result |
Definition at line 395 of file byte_stream.hpp.
|
nodiscardpure 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.
Input stream operation, returns zero if !is_input().
out | the byte array to write the output to |
length | the length of the byte array out |
peek_offset | offset from current stream position to read at |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinenodiscardnoexcept |
Peek one byte at current position.
Input stream operation, returns false if !is_input().
out | an output byte |
Definition at line 421 of file byte_stream.hpp.
|
nodiscardpure virtualnoexcept |
Discard the next N bytes of the data.
Input stream operation, returns zero if !is_input().
N | the number of bytes to discard |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinenodiscardnoexcept |
Read uint16_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | reference to result |
Definition at line 442 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Read int16_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | reference to result |
Definition at line 458 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Read incoming uint32_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | reference to result |
Definition at line 467 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Read int32_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | reference to result |
Definition at line 483 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Read incoming uint64_t
w/o considering bigEndian
, i.e.
no byte swap is performed.
bits | reference to result |
Definition at line 490 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Read incoming uint64_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | reference to result |
Definition at line 503 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Read int64_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | reference to result |
Definition at line 520 of file byte_stream.hpp.
|
nodiscardpure virtualnoexcept |
Write to the data sink.
Moves the internal offset so that every call to write will be appended to the sink.
This method is not blocking beyond the transfer length bytes.
Output stream operation, returns zero if !is_output().
in | the input bytes to write out |
length | the length of the byte array in |
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinenodiscardnoexcept |
Write one byte, uint8_t
.
Output stream operation, returns false if !is_output().
in | the byte to be written |
Definition at line 548 of file byte_stream.hpp.
|
pure virtualnoexcept |
Synchronizes all output operations, or do nothing.
Implemented in jau::io::ByteInStream_Feed, jau::io::ByteInStream_URL, jau::io::ByteStream_File, jau::io::ByteStream_Recorder, and jau::io::ByteStream_SecMemory.
|
inlinenodiscardnoexcept |
Write the given uint16_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | data to write |
Definition at line 565 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Write the given int16_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | data to write |
Definition at line 579 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Write the given uint32_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | data to write |
Definition at line 589 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Write the given int32_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | data to write |
Definition at line 603 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Write the given uint64_t
w/o considering bigEndian
, i.e.
no byte swap is performed.
bits | data to write |
Definition at line 611 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Write the given uint64_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | data to write |
Definition at line 622 of file byte_stream.hpp.
|
inlinenodiscardnoexcept |
Write the given int64_t
.
If stream byteOrder() != jau::lb_endian_t::native, result is bytes swapped via jau::bswap().
bits | data to write |
Definition at line 636 of file byte_stream.hpp.
|
protected |
Definition at line 191 of file byte_stream.hpp.
|
protected |
Definition at line 192 of file byte_stream.hpp.
Invalid position constant, denoting unset mark() or invalid position.
Value: std::numeric_limits<size_type>::max()
Definition at line 199 of file byte_stream.hpp.