76 virtual std::size_t
size()
const = 0;
125 virtual std::size_t
size()
const override {
return 0; }
187template <
typename Datasizeable >
193 decltype( std::declval< const Datasizeable >().data() ),
196 "Datasizeable requires 'T* data() const' member function, "
197 "where 'T*' is convertible to 'void*' " );
201 decltype( std::declval< const Datasizeable >().size() ),
204 "Datasizeable requires 'N size() const' member function, "
205 "where 'N' is convertible to 'std::size_t'" );
208 std::is_move_constructible< Datasizeable >::value,
209 "Datasizeable must be move constructible" );
271template <
typename Datasizeable >
351 virtual std::size_t
size()
const override
379 std::max< std::size_t >( {
389 std::max< std::size_t >( {
412 std::size_t size ) noexcept
514 typename Datasizeable,
515 typename S =
typename
518 std::vector< writable_item_t >,
519 Datasizeable >::value > >
525 "size of type is too big" );
536 template <
typename Datasizeable >
542 "size of shared_ptr on a type is too big" );
545 throw exception_t{
"empty shared_ptr cannot be used as buffer" };
559 b.get_writable_base()->relocate_to( &
m_storage );
569 b.get_writable_base()->relocate_to( &
m_storage );
656 std::aligned_storage_t<
680 std::function< void(
const asio_ns::error_code & ec ) >;
699 swap( left.m_items, right.m_items );
700 swap( left.m_status_line_size, right.m_status_line_size );
701 swap( left.m_after_write_notificator, right.m_after_write_notificator );
730 wg.m_status_line_size = 0;
765 if( std::size_t{0} != n )
770 "cannot set status line size for empty write group" };
777 "cannot set status line size for write group: "
778 "first writable item must be 'trivial_write_operation'" };
781 if(
m_items.front().size() < n )
784 "cannot set status line size for write group: "
785 "first writable item size is less than provided value" };
883 auto & second_items = second.
m_items;
887 begin( second_items ),
889 std::back_inserter(
m_items ) );
Exception class for all exceptions thrown by RESTinio.
Internal interface for a trivial buffer-like entity.
virtual asio_ns::const_buffer buffer() const =0
Get asio buf entity.
Buffer entity for const buffer.
virtual asio_ns::const_buffer buffer() const override
Get asio buf entity.
constexpr const_buf_t(const void *data, std::size_t size) noexcept
const void *const m_data
A pointer to data.
const_buf_t & operator=(const const_buf_t &)=delete
virtual void relocate_to(void *storage) override
Move this buffer enitity to a given location.
virtual std::size_t size() const override
Get the size of a writable piece of data.
const std::size_t m_size
The size of data.
const_buf_t(const const_buf_t &)=delete
const_buf_t(const_buf_t &&)=default
User defined datasizable object.
datasizeable_buf_t(datasizeable_buf_t &&) noexcept=default
virtual void relocate_to(void *storage) override
Move this buffer enitity to a given location.
datasizeable_buf_t(Datasizeable buf)
virtual asio_ns::const_buffer buffer() const override
Get asio buf entity.
Datasizeable m_custom_buffer
A datasizeable item that represents buffer.
virtual std::size_t size() const override
Get the size of a writable piece of data.
virtual void relocate_to(void *storage) override
Move this buffer enitity to a given location.
empty_buf_t(empty_buf_t &&)=default
empty_buf_t(const empty_buf_t &)=delete
virtual std::size_t size() const override
Get the size of a writable piece of data.
virtual asio_ns::const_buffer buffer() const override
Get asio buf entity.
empty_buf_t & operator=(const empty_buf_t &)=delete
Buffer based on shared_ptr of data-sizeable entity.
shared_datasizeable_buf_t(shared_datasizeable_buf_t &&) noexcept=default
shared_datasizeable_buf_t & operator=(const shared_datasizeable_buf_t &)=delete
shared_datasizeable_buf_t(const shared_datasizeable_buf_t &)=delete
virtual void relocate_to(void *storage) override
Move this buffer enitity to a given location.
std::shared_ptr< Datasizeable > shared_ptr_t
virtual std::size_t size() const override
Get the size of a writable piece of data.
shared_ptr_t m_buf_ptr
A shared pointer to a datasizeable entity.
shared_datasizeable_buf_t()=delete
virtual asio_ns::const_buffer buffer() const override
Get asio buf entity.
shared_datasizeable_buf_t(shared_ptr_t buf_ptr) noexcept
A base class for writable items.
writable_base_t(const writable_base_t &)=default
writable_base_t & operator=(const writable_base_t &)=delete
writable_base_t()=default
virtual ~writable_base_t()
virtual std::size_t size() const =0
Get the size of a writable piece of data.
writable_base_t(writable_base_t &&)=default
virtual void relocate_to(void *storage)=0
Move this buffer enitity to a given location.
Send file write operation description.
Class for storing the buffers used for streaming body (request/response).
writable_item_t(writable_item_t &&b)
sendfile_t & sendfile_operation()
Get a reference to a sendfile operation.
writable_item_t(const writable_item_t &)=delete
writable_item_t(std::shared_ptr< Datasizeable > sp)
const impl::writable_base_t * get_writable_base() const noexcept
Access as writable_base_t item.
impl::sendfile_write_operation_t * get_sfwo() noexcept
Access as sendfile_write_operation_t item.
writable_item_t(const_buffer_t const_buf)
writable_item_t(Datasizeable ds)
storage_t m_storage
A storage for a buffer object of various types.
writable_item_t(const char *str)
void destroy_stored_buffer()
writable_item_type_t m_write_type
std::aligned_storage_t< impl::needed_storage_max_size, impl::buffer_storage_align > storage_t
asio_ns::const_buffer buf() const
Create a buf reference object used by ASIO.
impl::buf_iface_t * get_buf() noexcept
Access as trivial buf item.
writable_item_t(sendfile_t sf_opts)
impl::writable_base_t * get_writable_base() noexcept
Access as writable_base_t item.
writable_item_t & operator=(const writable_item_t &)=delete
std::size_t size() const
Get the size of the underlying buffer object.
writable_item_type_t write_type() const noexcept
Get a type of a stored buffer object.
const impl::buf_iface_t * get_buf() const noexcept
Access as trivial buf item.
Group of writable items transported to the context of underlying connection as one solid piece.
auto & items() noexcept
Get access to the stored items.
~write_group_t() noexcept
Destruct object.
void invoke_after_write_notificator_if_exists(const asio_ns::error_code &ec)
Get after write notificator.
write_group_t & operator=(const write_group_t &)=delete
const auto & items() const noexcept
Get access to the stored items.
write_group_t(write_group_t &&wg) noexcept
std::size_t m_status_line_size
A size of status line located in first "buffer".
void status_line_size(std::size_t n)
write_group_t(writable_items_container_t items) noexcept
Construct write group with a given bunch of writable items.
write_status_cb_t m_after_write_notificator
A callback to invoke once the the write opertaion of a given group completes.
writable_items_container_t m_items
A buffer objects included in this group.
void after_write_notificator(write_status_cb_t notificator) noexcept
Set after write notificator.
bool has_after_write_notificator() const noexcept
Is there an after write notificator set?
void reset() noexcept
Reset group.
friend void swap(write_group_t &left, write_group_t &right) noexcept
Swap two groups.
std::size_t status_line_size() const noexcept
Get status line size.
void merge(write_group_t second)
Merges with another group.
auto items_count() const noexcept
Get the count of stored items.
write_group_t(const write_group_t &)=delete
Detection of compiler version and absence of various features.
#define RESTINIO_ENSURE_NOEXCEPT_CALL(expr)
A wrapper around static_assert for checking that an expression is noexcept and execution of that expr...
A special wrapper around fmtlib include files.
void swap(optional< T > &x, optional< T > &y)
constexpr std::size_t buffer_storage_align
datasizeable_buf_t< std::string > string_buf_t
An alias for a std::string instantiation of datasizeable_buf_t<D> template.
constexpr std::size_t needed_storage_max_size
An of memory that is to be enough to hold any possible buffer entity.
std::size_t uint64_to_size_t(std::uint64_t v)
Helper function for truncating uint64 to std::size_t with exception if that truncation will lead to d...
void suppress_exceptions_quietly(Lambda &&lambda) noexcept
Helper function for execution a block of code with suppression of any exceptions raised inside that b...
std::vector< writable_item_t > writable_items_container_t
const_buffer_t const_buffer(const char *str) noexcept
fmt::basic_memory_buffer< char, 1u > fmt_minimal_memory_buffer_t
An alias for fmt::basic_memory_buffer<char,1>.
writable_item_type_t
Buffers write operation type.
@ trivial_write_operation
Item is a buffer and must be written trivially.
@ file_write_operation
Item is a sendfile operation and implicates file write operation.
@ write_group_destroyed_passively
After write notificator error: a notificator was set for a write_group_t but no external invokation h...
std::function< void(const asio_ns::error_code &ec) > write_status_cb_t
An alias for a callback to be invoked after the write operation of a particular group of "buffers".
constexpr const_buffer_t const_buffer(const void *str, std::size_t size) noexcept
asio_ns::error_code make_asio_compaible_error(asio_convertible_error_t err) noexcept
Make restinio error_code compatible with asio_ns::error_code.
Helpers for safe truncation of unsigned integers.
Helper class for setting a constant buffer storage explicitly.
constexpr const_buffer_t(const void *str, std::size_t size) noexcept
Send file operation wrapper.
virtual void relocate_to(void *storage) override
Move this buffer enitity to a given location.
sendfile_write_operation_t()=delete
sendfile_write_operation_t(sendfile_t &&sf_opts)
std::unique_ptr< sendfile_t > m_sendfile_options
A pointer to sendfile operation details.
sendfile_t & sendfile_options() noexcept
Get sendfile operation detaiols.
sendfile_write_operation_t(const sendfile_write_operation_t &)=delete
sendfile_write_operation_t & operator=(const sendfile_write_operation_t &)=delete
virtual std::size_t size() const override
Get the size of a writable piece of data.
sendfile_write_operation_t(sendfile_write_operation_t &&)=default
Utilities for suppressing exceptions from some code block.