RESTinio
Loading...
Searching...
No Matches
restinio::impl::write_group_output_ctx_t Class Reference

Helper class for writting response data. More...

#include <write_group_output_ctx.hpp>

Classes

class  file_write_operation_t
 Write operaton using sendfile. More...
struct  none_write_operation_t
 None write operation. More...
class  trivial_write_operation_t
 Trivial write operaton. More...

Public Types

using solid_write_operation_variant_t
 An alias for variant holding write operation specifics.

Public Member Functions

 write_group_output_ctx_t ()
 Contruct an object.
bool transmitting () const noexcept
 Check if data is trunsmitting now.
void start_next_write_group (std::optional< write_group_t > next_wg) noexcept
 Start handlong next write group.
solid_write_operation_variant_t extract_next_write_operation ()
 et an object with next write operation to perform.
void fail_write_group (const asio_ns::error_code &ec)
 Handle current group write process failed.
void finish_write_group ()
 Finish writing group normally.

Private Member Functions

void reset_write_group ()
 Reset the write group and associated context.
void invoke_after_write_notificator_if_necessary (const asio_ns::error_code &ec)
 Execute notification callback if necessary.
trivial_write_operation_t prepare_trivial_buffers_wo ()
 Prepare write operation for trivial buffers.
file_write_operation_t prepare_sendfile_wo ()
 Prepare write operation for sendfile.

Static Private Member Functions

static constexpr auto max_iov_len () noexcept
 Get the maximum number of buffers that can be written with gather write operation.

Private Attributes

std::optional< write_group_tm_current_wg
 Real buffers with data.
std::size_t m_next_writable_item_index { 0 }
 Keeps track of the next writable item stored in m_current_wg.
asio_bufs_container_t m_asio_bufs
 Asio buffers storage.
sendfile_operation_shared_ptr_t m_sendfile_operation
 Sendfile operation storage context.

Detailed Description

Helper class for writting response data.

The usage scenario is some kind of the following:

wtite_group_t wg = ...
// Feed write group to context:
output_ctx.start_next_write_group( std::move( wg ) );
try
{
// start handling loop:
for(
// Extract next solid output piece.
auto wo = output_ctx.extract_next_write_operation();
// Are we done with consuming a given write_group_t instance?
!std::holds_alternative< none_write_operation_t >( wo );
// Get next output piece.
wo = output_ctx.extract_next_write_operation() )
{
if( std::holds_alternative< trivial_write_operation_t >( wo ) )
{
handle_trivial_bufs( std::get< trivial_write_operation_t >( wo ) );
}
else
{
handle_sendfile( std::get< file_write_operation_t >( wo ) );
}
}
// Finalize.
output_ctx.finish_write_group();
}
catch( ec ) // asio error code
{
// Loop failed, so we finish write group abnormally.
output_ctx.fail_write_group( ec )
}
void fail_write_group(const asio_ns::error_code &ec)
Handle current group write process failed.
solid_write_operation_variant_t extract_next_write_operation()
et an object with next write operation to perform.
void finish_write_group()
Finish writing group normally.

Of course, the real usage is complicated by spreading in time and running plenty of other logic cooperatively.

Definition at line 79 of file write_group_output_ctx.hpp.

Member Typedef Documentation

◆ solid_write_operation_variant_t

Constructor & Destructor Documentation

◆ write_group_output_ctx_t()

restinio::impl::write_group_output_ctx_t::write_group_output_ctx_t ( )
inline

Contruct an object.

Definition at line 96 of file write_group_output_ctx.hpp.

Member Function Documentation

◆ extract_next_write_operation()

solid_write_operation_variant_t restinio::impl::write_group_output_ctx_t::extract_next_write_operation ( )
inline

et an object with next write operation to perform.

Definition at line 253 of file write_group_output_ctx.hpp.

◆ fail_write_group()

void restinio::impl::write_group_output_ctx_t::fail_write_group ( const asio_ns::error_code & ec)
inline

Handle current group write process failed.

Definition at line 283 of file write_group_output_ctx.hpp.

◆ finish_write_group()

void restinio::impl::write_group_output_ctx_t::finish_write_group ( )
inline

Finish writing group normally.

Definition at line 294 of file write_group_output_ctx.hpp.

◆ invoke_after_write_notificator_if_necessary()

void restinio::impl::write_group_output_ctx_t::invoke_after_write_notificator_if_necessary ( const asio_ns::error_code & ec)
inlineprivate

Execute notification callback if necessary.

Definition at line 313 of file write_group_output_ctx.hpp.

◆ max_iov_len()

constexpr auto restinio::impl::write_group_output_ctx_t::max_iov_len ( )
inlinestaticconstexprprivatenoexcept

Get the maximum number of buffers that can be written with gather write operation.

Definition at line 84 of file write_group_output_ctx.hpp.

◆ prepare_sendfile_wo()

file_write_operation_t restinio::impl::write_group_output_ctx_t::prepare_sendfile_wo ( )
inlineprivate

Prepare write operation for sendfile.

Definition at line 360 of file write_group_output_ctx.hpp.

◆ prepare_trivial_buffers_wo()

trivial_write_operation_t restinio::impl::write_group_output_ctx_t::prepare_trivial_buffers_wo ( )
inlineprivate

Prepare write operation for trivial buffers.

Definition at line 336 of file write_group_output_ctx.hpp.

◆ reset_write_group()

void restinio::impl::write_group_output_ctx_t::reset_write_group ( )
inlineprivate

Reset the write group and associated context.

Definition at line 305 of file write_group_output_ctx.hpp.

◆ start_next_write_group()

void restinio::impl::write_group_output_ctx_t::start_next_write_group ( std::optional< write_group_t > next_wg)
inlinenoexcept

Start handlong next write group.

Definition at line 239 of file write_group_output_ctx.hpp.

◆ transmitting()

bool restinio::impl::write_group_output_ctx_t::transmitting ( ) const
inlinenoexcept

Check if data is trunsmitting now.

Definition at line 235 of file write_group_output_ctx.hpp.

Member Data Documentation

◆ m_asio_bufs

asio_bufs_container_t restinio::impl::write_group_output_ctx_t::m_asio_bufs
private

Asio buffers storage.

Definition at line 379 of file write_group_output_ctx.hpp.

◆ m_current_wg

std::optional< write_group_t > restinio::impl::write_group_output_ctx_t::m_current_wg
private

Real buffers with data.

Definition at line 369 of file write_group_output_ctx.hpp.

◆ m_next_writable_item_index

std::size_t restinio::impl::write_group_output_ctx_t::m_next_writable_item_index { 0 }
private

Keeps track of the next writable item stored in m_current_wg.

When emitting next solid write operation we need to know where the next starting item is.

Definition at line 376 of file write_group_output_ctx.hpp.

◆ m_sendfile_operation

sendfile_operation_shared_ptr_t restinio::impl::write_group_output_ctx_t::m_sendfile_operation
private

Sendfile operation storage context.

Definition at line 382 of file write_group_output_ctx.hpp.


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