MPD 0.20.6

- Main Page
- Namespaces
- Data Structures
- Files

- Data Structures
- Class Hierarchy
- Data Fields

Public Member Functions | Protected Member Functions | Protected Attributes
AsyncInputStream Class Referenceabstract

Helper class for moving asynchronous (non-blocking) InputStream implementations to the I/O thread. More...

`#include <AsyncInputStream.hxx>`

Inheritance diagram for AsyncInputStream:
[legend]
Collaboration diagram for AsyncInputStream:
[legend]

## Public Member Functions
| AsyncInputStream (const char *_url, Mutex &_mutex, Cond &_cond, size_t _buffer_size, size_t _resume_at)
virtual | ~AsyncInputStream ()
void | Check () final
| Check for errors that may have occurred in the I/O thread. More...
bool | IsEOF () final
| Returns true if the stream has reached end-of-file. More...
void | Seek (offset_type new_offset) final
| Seeks to the specified position in the stream. More...
Tag * | ReadTag () final
| Reads the tag from the stream. More...
bool | IsAvailable () final
| Returns true if the next read operation will not block: either data is available, or end-of-stream has been reached, or an error has occurred. More...
size_t | Read (void *ptr, size_t read_size) final
| Reads data from the stream into the caller-supplied buffer. More...
Public Member Functions inherited from InputStream
| InputStream (const char *_uri, Mutex &_mutex, Cond &_cond)
virtual | ~InputStream ()
| Close the input stream and free resources. More...
const char * | GetURI () const
| The absolute URI which was used to open this stream. More...
void | Lock ()
void | Unlock ()
virtual void | Update ()
| Update the public attributes. More...
void | SetReady ()
bool | IsReady () const
| Return whether the stream is ready for reading and whether the other attributes in this struct are valid. More...
void | WaitReady ()
void | LockWaitReady ()
| Wrapper for WaitReady() which locks and unlocks the mutex; the caller must not be holding it already. More...
gcc_pure bool | HasMimeType () const
gcc_pure const char * | GetMimeType () const
void | ClearMimeType ()
gcc_nonnull_all void | SetMimeType (const char *_mime)
void | SetMimeType (std::string &&_mime)
gcc_pure bool | KnownSize () const
gcc_pure offset_type | GetSize () const
void | AddOffset (offset_type delta)
gcc_pure offset_type | GetOffset () const
gcc_pure offset_type | GetRest () const
gcc_pure bool | IsSeekable () const
gcc_pure bool | CheapSeeking () const
| Determines whether seeking is cheap. More...
void | LockSeek (offset_type offset)
| Wrapper for Seek() which locks and unlocks the mutex; the caller must not be holding it already. More...
void | Rewind ()
| Rewind to the beginning of the stream. More...
void | LockRewind ()
void | Skip (offset_type _offset)
| Skip input bytes. More...
void | LockSkip (offset_type _offset)
gcc_pure bool | LockIsEOF ()
| Wrapper for IsEOF() which locks and unlocks the mutex; the caller must not be holding it already. More...
gcc_malloc Tag * | LockReadTag ()
| Wrapper for ReadTag() which locks and unlocks the mutex; the caller must not be holding it already. More...
gcc_nonnull_all size_t | LockRead (void *ptr, size_t size)
| Wrapper for Read() which locks and unlocks the mutex; the caller must not be holding it already. More...
gcc_nonnull_all void | ReadFull (void *ptr, size_t size)
| Reads the whole data from the stream into the caller-supplied buffer. More...
gcc_nonnull_all void | LockReadFull (void *ptr, size_t size)
| Wrapper for ReadFull() which locks and unlocks the mutex; the caller must not be holding it already. More...

## Protected Member Functions
void | SetTag (Tag *_tag)
| Pass an tag from the I/O thread to the client thread. More...
void | ClearTag ()
void | Pause ()
bool | IsPaused () const
void | SetClosed ()
| Declare that the underlying stream was closed. More...
bool | IsBufferEmpty () const
bool | IsBufferFull () const
gcc_pure size_t | GetBufferSpace () const
| Determine how many bytes can be added to the buffer. More...
CircularBuffer< uint8_t >::Range | PrepareWriteBuffer ()
void | CommitWriteBuffer (size_t nbytes)
void | AppendToBuffer (const void *data, size_t append_size)
| Append data to the buffer. More...
virtual void | DoResume ()=0
| Implement code here that will resume the stream after it has been paused due to full input buffer. More...
virtual void | DoSeek (offset_type new_offset)=0
| The actual Seek() implementation. More...
bool | IsSeekPending () const
void | SeekDone ()
| Call this after seeking has finished. More...

## Protected Attributes
std::exception_ptr | postponed_exception
Protected Attributes inherited from InputStream
bool | ready
| indicates whether the stream is ready for reading and whether the other attributes in this struct are valid More...
bool | seekable
| if true, then the stream is fully seekable More...
offset_type | size
| the size of the resource, or UNKNOWN_SIZE if unknown More...
offset_type | offset
| the current offset within the stream More...

## Additional Inherited Members
Public Types inherited from InputStream
typedef ::offset_type | offset_type
Static Public Member Functions inherited from InputStream
static gcc_nonnull_all InputStreamPtr | Open (const char *uri, Mutex &mutex, Cond &cond)
| Opens a new input stream. More...
static gcc_nonnull_all InputStreamPtr | OpenReady (const char *uri, Mutex &mutex, Cond &cond)
| Just like Open(), but waits for the stream to become ready. More...
Data Fields inherited from InputStream
Mutex & | mutex
| A mutex that protects the mutable attributes of this object and its implementation. More...
Cond & | cond
| A cond that gets signalled when the state of this object changes from the I/O thread. More...
Static Protected Attributes inherited from InputStream
static constexpr offset_type | UNKNOWN_SIZE = -1

## Detailed Description

Helper class for moving asynchronous (non-blocking) InputStream implementations to the I/O thread.

Data is being read into a ring buffer, and that buffer is then consumed by another thread using the regular InputStream API.

Definition at line 36 of file AsyncInputStream.hxx.

## Constructor & Destructor Documentation

AsyncInputStream::AsyncInputStream | ( | const char * | _url,
|  | Mutex & | _mutex,
|  | Cond & | _cond,
|  | size_t | _buffer_size,
|  | size_t | _resume_at
| ) |  |

Parameters

  _buffer | a buffer allocated with HugeAllocate(); the destructor will free it using HugeFree()

virtual AsyncInputStream::~AsyncInputStream | ( |  | ) |
| virtual

## Member Function Documentation

void AsyncInputStream::AppendToBuffer | ( | const void * | data,
|  | size_t | append_size
| ) |  |
| protected

Append data to the buffer.

The size must fit into the buffer; see GetBufferSpace().

void AsyncInputStream::Check | ( |  | ) |
| final virtual

Check for errors that may have occurred in the I/O thread.

Throws std::runtime_error on error.

Reimplemented from InputStream.

void AsyncInputStream::ClearTag | ( |  | ) |
| inline protected

Definition at line 97 of file AsyncInputStream.hxx.

void AsyncInputStream::CommitWriteBuffer | ( | size_t | nbytes | ) |
| protected

virtual void AsyncInputStream::DoResume | ( |  | ) |
| protected pure virtual

Implement code here that will resume the stream after it has been paused due to full input buffer.

virtual void AsyncInputStream::DoSeek | ( | offset_type | new_offset | ) |
| protected pure virtual

The actual Seek() implementation.

This virtual method will be called from within the I/O thread. When the operation is finished, call SeekDone() to notify the caller.

gcc_pure size_t AsyncInputStream::GetBufferSpace | ( |  | ) | const
| inline protected

Determine how many bytes can be added to the buffer.

Definition at line 128 of file AsyncInputStream.hxx.

bool AsyncInputStream::IsAvailable | ( |  | ) |
| final virtual

Returns true if the next read operation will not block: either data is available, or end-of-stream has been reached, or an error has occurred.

The caller must lock the mutex.

Reimplemented from InputStream.

bool AsyncInputStream::IsBufferEmpty | ( |  | ) | const
| inline protected

Definition at line 116 of file AsyncInputStream.hxx.

bool AsyncInputStream::IsBufferFull | ( |  | ) | const
| inline protected

Definition at line 120 of file AsyncInputStream.hxx.

bool AsyncInputStream::IsEOF | ( |  | ) |
| final virtual

Returns true if the stream has reached end-of-file.

The caller must lock the mutex.

Implements InputStream.

bool AsyncInputStream::IsPaused | ( |  | ) | const
| inline protected

Definition at line 103 of file AsyncInputStream.hxx.

bool AsyncInputStream::IsSeekPending | ( |  | ) | const
| inline protected

Definition at line 157 of file AsyncInputStream.hxx.

void AsyncInputStream::Pause | ( |  | ) |
| protected

CircularBuffer<uint8_t>::Range AsyncInputStream::PrepareWriteBuffer | ( |  | ) |
| inline protected

Definition at line 132 of file AsyncInputStream.hxx.

size_t AsyncInputStream::Read | ( | void * | ptr,
|  | size_t | size
| ) |  |
| final virtual

Reads data from the stream into the caller-supplied buffer.

Returns 0 on error or eof (check with IsEOF()).

The caller must lock the mutex.

Throws std::runtime_error on error.

Parameters

  ptr | the buffer to read into
  size | the maximum number of bytes to read

Returns
  the number of bytes read

Implements InputStream.

Tag* AsyncInputStream::ReadTag | ( |  | ) |
| final virtual

Reads the tag from the stream.

The caller must lock the mutex.

Returns
  a tag object which must be freed by the caller, or nullptr if the tag has not changed since the last call

Reimplemented from InputStream.

void AsyncInputStream::Seek | ( | offset_type | offset | ) |
| final virtual

Seeks to the specified position in the stream.

This will most likely fail if the "seekable" flag is false.

The caller must lock the mutex.

Throws std::runtime_error on error.

Parameters

  offset | the relative offset

Reimplemented from InputStream.

void AsyncInputStream::SeekDone | ( |  | ) |
| protected

Call this after seeking has finished.

It will notify the client thread.

void AsyncInputStream::SetClosed | ( |  | ) |
| inline protected

Declare that the underlying stream was closed.

We will continue feeding Read() calls from the buffer until it runs empty.

Definition at line 112 of file AsyncInputStream.hxx.

void AsyncInputStream::SetTag | ( | Tag * | _tag | ) |
| protected

Pass an tag from the I/O thread to the client thread.

## Field Documentation

std::exception_ptr AsyncInputStream::postponed_exception
| protected

Definition at line 69 of file AsyncInputStream.hxx.

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

- input/AsyncInputStream.hxx