class ugcs::vsm::Read_request

Overview

Basic I/O read request. More…

#include <io_request.h>

class Read_request: public ugcs::vsm::Io_request
{
public:
    // typedefs

    typedef std::shared_ptr<Read_request> Ptr;

    // construction

    template <typename... Args>
    Read_request(
        Io_buffer::Ptr& buffer_arg,
        size_t max_to_read,
        size_t min_to_read,
        Args&&... args
        );

    // methods

    void Set_buffer_arg(Io_buffer::Ptr buffer, const Request::Locker& lock = Request::Locker());
    Io_buffer::Ptr Get_last_read_buffer();
    size_t Get_max_to_read() const;
    size_t Get_min_to_read() const;

    template <typename... Args>
    static Ptr Create(Args&&... args);
};

Inherited Members

public:
    // typedefs

    typedef std::shared_ptr<Request> Ptr;
    typedef std::weak_ptr<Request> Weak_ptr;
    typedef Callback_base<void>::Ptr<> Handler;
    typedef std::unique_lock<std::mutex> Locker;
    typedef std::shared_ptr<Io_request> Ptr;
    typedef std::weak_ptr<Io_request> Weak_ptr;

    // enums

    enum Status;

    // methods

    template <typename... Args>
    static Ptr Create(Args&&... args);

    void Set_processing_handler(const Handler& handler);
    void Set_processing_handler(Handler&& handler);
    void Set_completion_handler(const Request_container::Ptr& context, const Handler& handler);
    void Set_completion_handler(const Request_container::Ptr& context, Handler&& handler);
    void Set_cancellation_handler(const Handler& handler);
    void Set_cancellation_handler(Handler&& handler);
    void Set_done_handler(Handler& handler);
    void Set_done_handler(Handler&& handler);
    Request_container::Ptr Get_completion_context(Locker locker = Locker()) const;
    void Process(bool process_request);
    void Complete(Status status = Status::OK, Locker locker = Locker());
    void Cancel(Locker locker = Locker());
    void Abort(Locker locker = Locker());
    Locker Lock(bool acquire = true) const;
    Status Get_status() const;
    bool Is_completed() const;
    bool Is_request_processing_needed() const;
    bool Is_aborted() const;
    bool Is_processing() const;
    bool Is_completion_delivered() const;
    bool Is_completion_delivering_started() const;
    bool Is_done() const;

    bool Wait_done(
        bool process_ctx = true,
        std::chrono::milliseconds timeout = std::chrono::milliseconds::zero()
        );

    bool& Timed_out();

    template <typename... Args>
    static Ptr Create(Args&&... args);

    Io_stream::Ptr Get_stream() const;
    Io_stream::Offset& Offset();
    void Set_result_arg(Io_result result, const Request::Locker& lock = Request::Locker());
    Io_result Get_last_result();

Detailed Documentation

Basic I/O read request.

Typedefs

typedef std::shared_ptr<Read_request> Ptr

Shared pointer to read request.

Construction

template <typename... Args>
Read_request(
    Io_buffer::Ptr& buffer_arg,
    size_t max_to_read,
    size_t min_to_read,
    Args&&... args
    )

Constructor.

Parameters:

buffer_arg

Reference to the I/O buffer argument of the completion handler. Resulting data should be read into this buffer.

max_to_read

Maximal number of bytes to read.

min_to_read

Minimal number of bytes to read.

args

Argument for the base class constructor.

Methods

void Set_buffer_arg(Io_buffer::Ptr buffer, const Request::Locker& lock = Request::Locker())

Sets the buffer argument.

Parameters:

buffer

Buffer to set.

lock

If present, should be the already acquired lock for the request (will not be unlocked by the method), otherwise new lock is acquired and released inside the method.

Io_buffer::Ptr Get_last_read_buffer()

Get the most recently set read buffer.

XXX Return nullptr if the read buffer was never set.

size_t Get_max_to_read() const

Get maximal number of bytes to read.

size_t Get_min_to_read() const

Get minimal number of bytes to read.

template <typename... Args>
static Ptr Create(Args&&... args)

Create an instance of read request.