libfilezilla
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
reader_base Class Referenceabstract

Base class for all readers. More...

#include <reader.hpp>

Inheritance diagram for reader_base:
Inheritance graph
[legend]
Collaboration diagram for reader_base:
Collaboration graph
[legend]

Public Member Functions

 reader_base (reader_base const &)=delete
 
reader_baseoperator= (reader_base const &)=delete
 
void close ()
 
virtual bool seekable () const
 
bool seek (uint64_t offset, uint64_t size=nosize)
 If seek fails, the reader is in an undefined state and must be closed.
 
bool rewind ()
 Only seekable readers can be rewound.
 
std::wstring const & name () const
 
virtual uint64_t size () const
 Size of the reader. If the size is indetermined, nosize is returned.
 
virtual datetime mtime () const
 Last modification time, might be indetermined.
 
std::pair< aio_result, buffer_leaseget_buffer (aio_waiter &h)
 Gets the next buffer with data from the reader. More...
 
std::pair< aio_result, buffer_leaseget_buffer (event_handler &h)
 
bool error () const
 
- Public Member Functions inherited from aio_waitable
void remove_waiter (aio_waiter &h)
 
void remove_waiter (event_handler &h)
 

Protected Member Functions

 reader_base (std::wstring &&name, aio_buffer_pool &pool, size_t max_buffers) noexcept
 Constructs a reader. More...
 
 reader_base (std::wstring_view name, aio_buffer_pool &pool, size_t max_buffers) noexcept
 
virtual std::pair< aio_result, buffer_leasedo_get_buffer (scoped_lock &l)=0
 
virtual bool do_seek (scoped_lock &)
 
virtual void do_close (scoped_lock &)
 
- Protected Member Functions inherited from aio_waiter
virtual void on_buffer_availability (aio_waitable const *w)=0
 
- Protected Member Functions inherited from aio_waitable
void remove_waiters ()
 Call in destructor of most-derived class.
 
void add_waiter (aio_waiter &h)
 
void add_waiter (event_handler &h)
 
void signal_availibility ()
 
void remove_waiter (aio_waiter &h)
 
void remove_waiter (event_handler &h)
 

Protected Attributes

mutex mtx_
 
aio_buffer_poolbuffer_pool_
 
logger_interfacelogger_
 
std::wstring const name_
 
size_t const max_buffers_ {}
 
std::list< buffer_leasebuffers_
 
uint64_t size_ {nosize}
 
uint64_t max_size_ {nosize}
 
uint64_t start_offset_ {nosize}
 
uint64_t remaining_ {nosize}
 
bool get_buffer_called_ {}
 
bool error_ {}
 
bool eof_ {}
 

Additional Inherited Members

- Public Types inherited from aio_base
using size_type = uint64_t
 
- Static Public Attributes inherited from aio_base
static constexpr auto nosize = static_cast<size_type>(-1)
 

Detailed Description

Base class for all readers.

All readers have a name describing them for logging purposes.

The initial state of a freshly opened reader is readable, get_buffer() can be called.

See the aio demo program for example usage.

Constructor & Destructor Documentation

◆ reader_base()

reader_base ( std::wstring &&  name,
aio_buffer_pool pool,
size_t  max_buffers 
)
inlineprotectednoexcept

Constructs a reader.

The passed aio_buffer_pool must live longer than the reader.

max_buffers controls the amount of buffers the reader is prepared to use at any given time.

See also
reader_factory::min_buffer_usage() and
reader_factory::multiple_buffer_usage()

Member Function Documentation

◆ do_seek()

virtual bool do_seek ( scoped_lock )
inlineprotectedvirtual

When this gets called, buffers_ has already been cleared and the waiters have been removed. start_offset_, size_ and remaining_ have already been set.

◆ get_buffer()

std::pair<aio_result, buffer_lease> get_buffer ( aio_waiter h)

Gets the next buffer with data from the reader.

If it returns aio_result::ok, a buffer may be returned as well for the caller to consume. If no buffer is returned on aio_result::ok, the reader has reached eof.

If aio_result::error is returned, the reader has failed and can only be closed.

After getting aio_result::wait, do not call get_buffer again until after the passed waiter got on_buffer_availability() invoked.


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