RESTinio
Loading...
Searching...
No Matches
restinio::router::impl::buffered_matcher_holder_t Class Reference

A special class that allows to hold a copy of small-size method_matchers or a pointer to dynamically allocated large-size method_matchers. More...

#include <method_matcher.hpp>

Public Member Functions

 buffered_matcher_holder_t ()=default
 ~buffered_matcher_holder_t () noexcept
 buffered_matcher_holder_t (const buffered_matcher_holder_t &)=delete
buffered_matcher_holder_toperator= (const buffered_matcher_holder_t &)=delete
 buffered_matcher_holder_t (buffered_matcher_holder_t &&other) noexcept
buffered_matcher_holder_toperator= (buffered_matcher_holder_t &&other) noexcept
template<typename Target_Type, typename... Args>
void assign (Args &&... args)
 Creates an instance of Target_Type and initializes it with arguments Args.
method_matcher_tget () const noexcept
 Get the pointer to actual matcher inside the holder.
method_matcher_toperator-> () const noexcept
 Get the pointer to actual matcher inside the holder.
method_matcher_toperator* () const noexcept
 Get a reference to actual matcher inside the holder.

Private Types

using pfn_move_t = method_matcher_t* (*)(void* object, void* buffer)
 A type of free function to be used to move a value of an object to the specified buffer.

Private Member Functions

void cleanup ()
void move_from (buffered_matcher_holder_t &other)

Private Attributes

method_matcher_tm_matcher { nullptr }
 A pointer to actual matcher allocated inside the internall buffer.
std::array< char, buffer_sizem_buffer
 The internal buffer.
pfn_move_t m_mover { nullptr }
 An actual move-function.

Static Private Attributes

static constexpr std::size_t buffer_size
 The size of the internal buffer.
static constexpr std::size_t alignment
 Alignment to be used by the internal buffer.

Friends

void assign (buffered_matcher_holder_t &holder, http_method_id_t method)
template<typename Arg>
void assign (buffered_matcher_holder_t &holder, Arg &&method_matcher)

Detailed Description

A special class that allows to hold a copy of small-size method_matchers or a pointer to dynamically allocated large-size method_matchers.

An instance of this class looks like a smart pointer to method_matcher_t. This smart pointer is moveable, but not copyable (it's like unique_ptr).

A value is set by assign() method:

std::initializer_list<http_method_id_t>{
http_method_get(),
http_method_head(),
...
});
void assign(Args &&... args)
Creates an instance of Target_Type and initializes it with arguments Args.
A matcher that finds a value in the vector of allowed values of fixed size.
Since
v.0.6.6

Definition at line 224 of file method_matcher.hpp.

Member Typedef Documentation

◆ pfn_move_t

using restinio::router::impl::buffered_matcher_holder_t::pfn_move_t = method_matcher_t* (*)(void* object, void* buffer)
private

A type of free function to be used to move a value of an object to the specified buffer.

This function should allocate a new instance in buffer and move the content of object into it. The pointer to the allocated instance should be returned.

Definition at line 245 of file method_matcher.hpp.

Constructor & Destructor Documentation

◆ buffered_matcher_holder_t() [1/3]

restinio::router::impl::buffered_matcher_holder_t::buffered_matcher_holder_t ( )
default

◆ ~buffered_matcher_holder_t()

restinio::router::impl::buffered_matcher_holder_t::~buffered_matcher_holder_t ( )
inlinenoexcept

Definition at line 285 of file method_matcher.hpp.

◆ buffered_matcher_holder_t() [2/3]

restinio::router::impl::buffered_matcher_holder_t::buffered_matcher_holder_t ( const buffered_matcher_holder_t & )
delete

◆ buffered_matcher_holder_t() [3/3]

restinio::router::impl::buffered_matcher_holder_t::buffered_matcher_holder_t ( buffered_matcher_holder_t && other)
inlinenoexcept

Definition at line 297 of file method_matcher.hpp.

Member Function Documentation

◆ assign()

template<typename Target_Type, typename... Args>
void restinio::router::impl::buffered_matcher_holder_t::assign ( Args &&... args)
inline

Creates an instance of Target_Type and initializes it with arguments Args.

Previous value of buffered_matcher_holder_t will be destroyed.

A new object is created in the internal buffer if its size is not greater than buffer_size. Otherwise a new object is created in dynamic memory and allocated_matcher_proxy_t for it is placed into the internal buffer.

Definition at line 329 of file method_matcher.hpp.

◆ cleanup()

void restinio::router::impl::buffered_matcher_holder_t::cleanup ( )
inlineprivate

Definition at line 264 of file method_matcher.hpp.

◆ get()

method_matcher_t * restinio::router::impl::buffered_matcher_holder_t::get ( ) const
inlinenodiscardnoexcept

Get the pointer to actual matcher inside the holder.

Definition at line 358 of file method_matcher.hpp.

◆ move_from()

void restinio::router::impl::buffered_matcher_holder_t::move_from ( buffered_matcher_holder_t & other)
inlineprivate

Definition at line 270 of file method_matcher.hpp.

◆ operator*()

method_matcher_t & restinio::router::impl::buffered_matcher_holder_t::operator* ( ) const
inlinenodiscardnoexcept

Get a reference to actual matcher inside the holder.

Definition at line 368 of file method_matcher.hpp.

◆ operator->()

method_matcher_t * restinio::router::impl::buffered_matcher_holder_t::operator-> ( ) const
inlinenodiscardnoexcept

Get the pointer to actual matcher inside the holder.

Definition at line 363 of file method_matcher.hpp.

◆ operator=() [1/2]

buffered_matcher_holder_t & restinio::router::impl::buffered_matcher_holder_t::operator= ( buffered_matcher_holder_t && other)
inlinenoexcept

Definition at line 304 of file method_matcher.hpp.

◆ operator=() [2/2]

buffered_matcher_holder_t & restinio::router::impl::buffered_matcher_holder_t::operator= ( const buffered_matcher_holder_t & )
delete

◆ assign [1/2]

template<typename Arg>
void assign ( buffered_matcher_holder_t & holder,
Arg && method_matcher )
friend

Definition at line 378 of file method_matcher.hpp.

◆ assign [2/2]

void assign ( buffered_matcher_holder_t & holder,
http_method_id_t method )
friend

Definition at line 371 of file method_matcher.hpp.

Member Data Documentation

◆ alignment

std::size_t restinio::router::impl::buffered_matcher_holder_t::alignment
staticconstexprprivate
Initial value:
=
std::max( {
alignof(simple_matcher_t),
A proxy for actual method_matcher that will be allocated in dynamic memory.
A simple method_matcher that compares just one user-specified value.

Alignment to be used by the internal buffer.

Definition at line 231 of file method_matcher.hpp.

◆ buffer_size

std::size_t restinio::router::impl::buffered_matcher_holder_t::buffer_size
staticconstexprprivate
Initial value:

The size of the internal buffer.

Definition at line 227 of file method_matcher.hpp.

◆ m_buffer

std::array<char, buffer_size> restinio::router::impl::buffered_matcher_holder_t::m_buffer
private

The internal buffer.

Definition at line 255 of file method_matcher.hpp.

◆ m_matcher

method_matcher_t* restinio::router::impl::buffered_matcher_holder_t::m_matcher { nullptr }
private

A pointer to actual matcher allocated inside the internall buffer.

Can be nullptr. For example: just after the creation and before the call to assign(). Or after a move-constructor or move-operator.

Definition at line 252 of file method_matcher.hpp.

◆ m_mover

pfn_move_t restinio::router::impl::buffered_matcher_holder_t::m_mover { nullptr }
private

An actual move-function.

Can be nullptr if assign() is not called yet.

Definition at line 261 of file method_matcher.hpp.


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