RESTinio
fixed_buffer.hpp
Go to the documentation of this file.
1 /*
2  restinio
3 */
4 
5 /*!
6  Fixed size buffer.
7 */
8 
9 #pragma once
10 
11 #include <vector>
12 
13 #include <restinio/asio_include.hpp>
14 
15 namespace restinio
16 {
17 
18 namespace impl
19 {
20 
21 //
22 // fixed_buffer_t
23 //
24 
25 //! Helper class for reading bytes and feeding them to parser.
27 {
28  public:
29  fixed_buffer_t( const fixed_buffer_t & ) = delete;
30  fixed_buffer_t & operator = ( const fixed_buffer_t & ) = delete;
31  fixed_buffer_t( fixed_buffer_t && ) = delete;
32  fixed_buffer_t & operator = ( fixed_buffer_t && ) = delete;
33 
34  explicit fixed_buffer_t( std::size_t size )
35  {
36  m_buf.resize( size );
37  }
38 
39  //! Make asio buffer for reading bytes from socket.
40  auto
41  make_asio_buffer() noexcept
42  {
43  return asio_ns::buffer( m_buf.data(), m_buf.size() );
44  }
45 
46  //! Mark how many bytes were obtained.
47  void
48  obtained_bytes( std::size_t length ) noexcept
49  {
50  m_ready_length = length; // Current bytes in buffer.
51  m_ready_pos = 0; // Reset current pos.
52  }
53 
54  //! Mark how many bytes were obtained.
55  void
56  consumed_bytes( std::size_t length ) noexcept
57  {
58  m_ready_length -= length; // decrement buffer length.
59  m_ready_pos += length; // Shift current pos.
60  }
61 
62  //! How many unconsumed bytes are there in buffer.
63  std::size_t length() const noexcept { return m_ready_length; }
64 
65  //! Get pointer to unconsumed bytes.
66  /*!
67  \note To check that buffer has unconsumed bytes use length().
68  */
69  const char * bytes() const noexcept { return m_buf.data() + m_ready_pos; }
70 
71  private:
72  //! Buffer for io operation.
73  std::vector< char > m_buf;
74 
75  //! unconsumed data left in buffer:
76  //! \{
77  //! Start of data in buffer.
79 
80  //! Data size.
82  //! \}
83 };
84 
85 } /* namespace impl */
86 
87 } /* namespace restinio */
const char * bytes() const noexcept
Get pointer to unconsumed bytes.
fixed_buffer_t & operator=(const fixed_buffer_t &)=delete
fixed_buffer_t(fixed_buffer_t &&)=delete
fixed_buffer_t & operator=(fixed_buffer_t &&)=delete
void obtained_bytes(std::size_t length) noexcept
Mark how many bytes were obtained.
std::vector< char > m_buf
Buffer for io operation.
std::size_t length() const noexcept
How many unconsumed bytes are there in buffer.
fixed_buffer_t(std::size_t size)
auto make_asio_buffer() noexcept
Make asio buffer for reading bytes from socket.
RESTINIO_NODISCARD char to_lower_case(unsigned char ch)
std::size_t m_ready_pos
unconsumed data left in buffer:Start of data in buffer.
fixed_buffer_t(const fixed_buffer_t &)=delete
void consumed_bytes(std::size_t length) noexcept
Mark how many bytes were obtained.
std::size_t m_ready_length
Data size.
Helper class for reading bytes and feeding them to parser.
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, optional_t< Value_Type > >::type opt_value(const Parameter_Container &params, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...
Definition: value_or.hpp:64