|
xentara-utils v2.0.6
The Xentara Utility Library
|
Base class for input streams that use a private allocated read buffer. More...
#include <xentara/utils/io/AbstractBufferedInputStream.hpp>
Inheritance diagram for xentara::utils::io::AbstractBufferedInputStream< Element >:Public Member Functions | |
| AbstractBufferedInputStream ()=default | |
| Default constructor Creates a stream without a buffer. | |
Public Member Functions inherited from xentara::utils::io::InputStream< Element > | |
| virtual | ~InputStream () noexcept(false)=0 |
| Virtual, throwing destructor. | |
| auto | readElement () -> Element |
| Read a single element from the stream. | |
| auto | tryReadElement () -> std::optional< Element > |
| Tries to read a single element from a stream. | |
| template<Element kNoMoreData> | |
| auto | readElementOr () -> Element |
| Tries to read a single element from a stream. | |
| auto | peek () -> Element |
| Look at the next element in the stream without actually reading it. | |
| auto | tryPeek () -> std::optional< Element > |
| Look at the next element in the stream without actually reading it. | |
| template<Element kNoMoreData> | |
| auto | peekOr () -> Element |
| Look at the next element in the stream without actually reading it. | |
| auto | readFromBuffer (std::size_t maxSize) -> std::span< const Element > |
| Reads data from the buffer only. | |
| auto | eof () -> bool |
| Checks if the end of the stream has been reached. | |
| template<Element... kAllowedElements> | |
| auto | readElementIf () -> std::optional< Element > |
| Read an element from the stream if it is one of a list of allowed elements. | |
| template<std::predicate< Element > Predicate> | |
| auto | readElementIf (Predicate predicate) -> std::optional< Element > |
| Read an element from the stream if it fits a predicate. | |
| template<Element kFallback, Element... kAllowedElements> | |
| auto | readElementIfOr () -> Element |
| Read an element from the stream if it is one of a list of allowed elements. | |
| template<Element kFallback, std::predicate< Element > Predicate> | |
| auto | readElementIfOr (Predicate predicate) -> Element |
| Read an element from the stream if it fits a predicate. | |
| template<tools::Allocator< Element > Allocator = std::allocator<Element>> requires (!tools::CharType<Element>) | |
| auto | read (typename std::allocator_traits< Allocator >::size_type size, const Allocator &allocator=Allocator()) -> core::RawVector< Element, Allocator > |
| Read a block of data of a specific size. | |
| template<typename CharTraits = std::char_traits<Element>, tools::Allocator< Element > Allocator = std::allocator<Element>> requires tools::CharType<Element> | |
| auto | read (typename std::allocator_traits< Allocator >::size_type size, const Allocator &allocator=Allocator()) -> std::basic_string< Element, CharTraits, Allocator > |
| Read a block of text of a specific size. | |
| template<std::size_t kArraySize> | |
| auto | read (Element(&array)[kArraySize]) -> void |
| Read a block of data into an array. | |
| template<std::size_t kArraySize> | |
| auto | read (std::array< Element, kArraySize > &array) -> void |
| Read a block of data into an array. | |
| template<std::contiguous_iterator Iterator, std::sized_sentinel_for< Iterator > Sentinel> requires std::same_as<std::remove_volatile_t<std::iter_value_t<Iterator>>, Element> | |
| auto | read (Iterator first, Sentinel last) -> void |
| Read a block of data into an iterator range. | |
| auto | read (Element *buffer, std::size_t size) -> void |
| Read a block of data into a buffer. | |
| template<Element... kTerminations> requires (!tools::CharType<Element>) | |
| auto | readUntil () -> core::RawVector< Element > |
| Reads all elements until a termination is found. | |
| template<tools::Allocator< Element > Allocator, Element... kTerminations> requires (!tools::CharType<Element>) | |
| auto | readUntil (const Allocator &allocator=Allocator()) -> core::RawVector< Element, Allocator > |
| Reads all elements until a termination is found. | |
| template<tools::Allocator< Element > Allocator = std::allocator<Element>, std::predicate< Element > Predicate> requires (!tools::CharType<Element>) | |
| auto | readUntil (Predicate predicate, const Allocator &allocator=Allocator()) -> core::RawVector< Element, Allocator > |
| Skips all elements until a termination element that fits a predicate. | |
| template<Element... kTerminations> requires tools::CharType<Element> | |
| auto | readUntil () -> std::basic_string< Element > |
| Reads all characters until a termination is found. | |
| template<typename CharTraits , Element... kTerminations> requires tools::CharType<Element> | |
| auto | readUntil () -> std::basic_string< Element, CharTraits > |
| Reads all characters until a termination is found. | |
| template<typename CharTraits , tools::Allocator< Element > Allocator, Element... kTerminations> requires tools::CharType<Element> | |
| auto | readUntil (const Allocator &allocator=Allocator()) -> std::basic_string< Element, CharTraits, Allocator > |
| Reads all characters until a termination is found. | |
| template<typename CharTraits = std::char_traits<Element>, tools::Allocator< Element > Allocator = std::allocator<Element>, std::predicate< Element > Predicate> requires tools::CharType<Element> | |
| auto | readUntil (Predicate predicate, const Allocator &allocator=Allocator()) -> std::basic_string< Element, CharTraits, Allocator > |
| Skips all characters until a termination character that fits a predicate. | |
| auto | skipElement () -> void |
| Skips a single element from the stream. | |
| auto | trySkipElement () -> bool |
| Tries to skip a single element from a stream. | |
| auto | skip (std::size_t size) -> void |
| Skips a block of data. | |
| template<Element... kSkippableElements> | |
| auto | skipWhile () -> std::size_t |
| Skips all elements than appear in a list of skippable elements. | |
| template<std::predicate< Element > Predicate> | |
| auto | skipWhile (Predicate predicate) -> std::size_t |
| Skips all elements that fit a predicate. | |
| auto | readPosition () const -> std::optional< ReadPosition > |
| Gets the current read position within the stream. | |
| auto | setReadPosition (ReadPosition position) -> void |
| Sets the current read position within the device. | |
| auto | rewind () -> void |
| Sets the current read position to the beginning of the stream. | |
| template<typename CharTraits = std::char_traits<Element>, tools::Allocator< Element > Allocator = std::allocator<Element>> requires tools::CharType<Element> | |
| auto | readLine (const Allocator &allocator=Allocator()) -> std::basic_string< Element, CharTraits, Allocator > |
| Reads a single line. | |
| auto | skipLine () -> std::size_t |
| Skips the rest of the line. | |
| template<typename CharTraits = std::char_traits<Element>, tools::Allocator< Element > Allocator = std::allocator<Element>> requires tools::CharType<Element> | |
| auto | readWord (const Allocator &allocator=Allocator()) -> std::basic_string< Element, CharTraits, Allocator > |
| Reads a single whitespace-separated word. | |
| auto | skipWord () -> std::size_t |
| Skips the rest of a whitespace-separated word. | |
| auto | skipLineEnding () -> bool |
| Skips a single line termination. | |
| auto | skipWhitespace () -> bool |
| Skips all ASCII whitespace elements. | |
| auto | readByte () -> Element |
| Alternate name for readElement() | |
| auto | tryReadByte () -> std::optional< Element > |
| Alternate name for tryReadElement() | |
| template<Element kNoMoreData> requires (!tools::CharType<Element>) | |
| auto | readByteOr () -> Element |
| Alternate name for readElementOr() | |
| template<Element... kAllowedElements> requires (!tools::CharType<Element>) | |
| auto | readByteIf () -> std::optional< Element > |
| Alternate name for readElementIf() | |
| template<std::predicate< Element > Predicate> requires (!tools::CharType<Element>) | |
| auto | readByteIf (Predicate predicate) -> std::optional< Element > |
| Alternate name for readElementIf(). | |
| template<Element kFallback, Element... kAllowedElements> requires (!tools::CharType<Element>) | |
| auto | readByteIfOr () -> Element |
| Alternate name for readElementIfOr() | |
| template<Element kFallback, std::predicate< Element > Predicate> requires (!tools::CharType<Element>) | |
| auto | readByteIfOr (Predicate predicate) -> Element |
| Alternate name for readElementIfOr(). | |
| auto | skipByte () -> void |
| Alternate name for skipElement() | |
| auto | trySkipByte () -> bool |
| Alternate name for trySkipElement() for character streams. | |
| auto | readChar () -> Element |
| Alternate name for readElement() | |
| auto | tryReadChar () -> std::optional< Element > |
| Alternate name for tryReadElement() | |
| template<Element kNoMoreData> requires tools::CharType<Element> | |
| auto | readCharOr () -> Element |
| Alternate name for readElementOr() | |
| template<Element... kAllowedElements> requires tools::CharType<Element> | |
| auto | readCharIf () -> std::optional< Element > |
| Alternate name for readElementIf() | |
| template<std::predicate< Element > Predicate> requires tools::CharType<Element> | |
| auto | readCharIf (Predicate predicate) -> std::optional< Element > |
| Alternate name for readElementIf(). | |
| template<Element kFallback, Element... kAllowedElements> requires tools::CharType<Element> | |
| auto | readCharIfOr () -> Element |
| Alternate name for readElementIfOr() | |
| template<Element kFallback, std::predicate< Element > Predicate> requires tools::CharType<Element> | |
| auto | readCharIfOr (Predicate predicate) -> Element |
| Alternate name for readElementIfOr(). | |
| auto | skipChar () -> void |
| Alternate name for skipElement() | |
| auto | trySkipChar () -> bool |
| Alternate name for trySkipElement() for character streams. | |
| auto | waitForData () -> void |
| Waits for more read data to become available. | |
| auto | waitForData (std::optional< std::chrono::nanoseconds > timeout) -> bool |
| Waits for more read data to become available within a certain time. | |
Public Member Functions inherited from xentara::utils::io::StreamBase | |
| virtual | ~StreamBase () noexcept(false)=0 |
| Virtual, throwing destructor. | |
| auto | streamDescription () const -> std::string |
| Get a description of the device. | |
Protected Member Functions | |
| auto | resetInputBuffer (std::size_t bufferSizeHint=kDefaultBufferSize) -> void |
| Resets the buffer. | |
| auto | destroyInputBuffer () -> void |
| Destroys the buffer. | |
Protected Member Functions inherited from xentara::utils::io::InputStream< Element > | |
| InputStream () noexcept=default | |
| Default constructor. | |
| InputStream (Element *bufferBegin, Element *bufferEnd) noexcept | |
| Constructor that sets an initially empty buffer. | |
| InputStream (Element *bufferBegin, Element *bufferEnd, Element *dataBegin, Element *dataEnd) noexcept | |
| Constructor that sets a buffer that possibly already contains some data. | |
| InputStream (InputStream &&other) noexcept | |
| Move constructor. | |
| auto | operator= (InputStream &&rhs) noexcept -> InputStream & |
| Move assignemnt operator. | |
| auto | setReadBuffer (Element *bufferBegin, Element *bufferEnd) noexcept -> void |
| Sets a new empty buffer. | |
| auto | setReadBuffer (Element *bufferBegin, Element *bufferEnd, Element *dataBegin, Element *dataEnd) noexcept -> void |
| Sets the buffer. | |
| auto | setReadData (Element *dataBegin, Element *dataEnd) noexcept -> void |
| Sets the position of the data within the buffer. | |
| auto | readBufferBegin () const -> Element * |
| Reads back the buffer start position. | |
| auto | readBufferEnd () const -> Element * |
| Reads back the buffer end position. | |
| auto | readBufferSize () const -> std::size_t |
| Gets the buffer size. | |
| auto | readDataBegin () const -> Element * |
| Returns the beginning of the unconsumed data in the buffer. | |
| auto | readDataEnd () const -> Element * |
| Returns the end of the data in the buffer. | |
| auto | readDataSize () const -> std::size_t |
| Returns the size of the unconsumed data in the buffer. | |
| virtual auto | doReplenishReadBuffer (bool waitForData) -> bool |
| Called by the framework to place more data into the buffer when it is exhausted. | |
| virtual auto | doRead (Element *buffer, std::size_t size, bool waitForData) -> std::optional< std::size_t >=0 |
| Called by the framework to read data into a memory buffer. | |
| virtual auto | doThrowEndOfStreamError () const -> void |
| Called by the framework to throw an error denoting the end of the stream. | |
| virtual auto | doWaitForData (std::optional< std::chrono::nanoseconds > timeout) -> bool |
| Called by the framework to wait for more data to become available. | |
| virtual auto | doGetReadPosition () const -> std::optional< std::size_t > |
| Called by the framework to get the current read position within the device. | |
| virtual auto | doSetReadPosition (std::size_t position) -> bool |
| Called by the framework to set the current read position within the device. | |
| virtual auto | doAdvanceReadPosition (std::size_t offset) -> std::optional< std::size_t > |
| Advances the current read position within the device. | |
Protected Member Functions inherited from xentara::utils::io::StreamBase | |
| virtual auto | doGetStreamDescription () const -> std::string=0 |
| Called by the framework to get a description of the stream. | |
Static Protected Attributes | |
| static const std::size_t | kDefaultBufferSize |
| The default buffer size. | |
Additional Inherited Members | |
Public Types inherited from xentara::utils::io::InputStream< Element > | |
| using | element_type = Element |
| The element type. | |
Base class for input streams that use a private allocated read buffer.
|
default |
Default constructor Creates a stream without a buffer.
|
protected |
Destroys the buffer.
|
protected |
Resets the buffer.
This function empties the buffer if it exists, or creates a new buffer if not.
| bufferSizeHint | The size of the new buffer if none exists yet. Ignored if there is a buffer already. |
|
staticprotected |
The default buffer size.