RESTinio
target_path_holder.hpp
Go to the documentation of this file.
1 /*
2  * RESTinio
3  */
4 
12 #pragma once
13 
15 
16 #include <restinio/string_view.hpp>
17 
18 #include <memory>
19 
20 namespace restinio
21 {
22 
23 namespace router
24 {
25 
26 namespace impl
27 {
28 
29 //
30 // target_path_holder_t
31 //
46 {
47  public:
48  using data_t = std::unique_ptr<char[]>;
49 
51 
65  {
66  m_data.reset( new char[ m_size ] );
67 
68  if( m_size != original_path.size() )
69  // Transformation is actually needed.
71  normalize_to( original_path, m_data.get() );
72  else
73  // Just copy original value to the destination.
74  std::copy(
75  original_path.begin(), original_path.end(),
76  m_data.get() );
77  }
78 
80 
86  view() const noexcept
87  {
88  return { m_data.get(), m_size };
89  }
90 
92 
98  data_t
99  giveout_data() noexcept
100  {
101  return std::move(m_data);
102  }
103 
104  private:
106 
112  std::size_t m_size;
113 };
114 
115 } /* namespace impl */
116 
117 } /* namespace router */
118 
119 } /* namespace restinio */
120 
restinio::router::impl::target_path_holder_t::giveout_data
RESTINIO_NODISCARD data_t giveout_data() noexcept
Give out the value from holder.
Definition: target_path_holder.hpp:99
RESTINIO_NODISCARD
#define RESTINIO_NODISCARD
Definition: compiler_features.hpp:33
nonstd::optional_lite::std11::move
T & move(T &t)
Definition: optional.hpp:421
string_view.hpp
restinio::string_view_t
nonstd::string_view string_view_t
Definition: string_view.hpp:19
restinio::router::impl::target_path_holder_t
Helper class for holding a unique instance of char array with target_path value.
Definition: target_path_holder.hpp:46
restinio::utils::uri_normalization::unreserved_chars::normalize_to
void normalize_to(string_view_t what, char *dest)
Perform normalization of URI value.
Definition: percent_encoding.hpp:640
restinio::router::impl::target_path_holder_t::m_data
data_t m_data
Actual data with target_path.
Definition: target_path_holder.hpp:110
restinio::utils::uri_normalization::unreserved_chars::estimate_required_capacity
RESTINIO_NODISCARD std::size_t estimate_required_capacity(string_view_t what)
Calculate the size of a buffer to hold normalized value of a URI.
Definition: percent_encoding.hpp:605
restinio::router::impl::target_path_holder_t::m_size
std::size_t m_size
The length of target_path.
Definition: target_path_holder.hpp:112
restinio::router::impl::target_path_holder_t::target_path_holder_t
target_path_holder_t(string_view_t original_path)
Initializing constructor.
Definition: target_path_holder.hpp:62
restinio
Definition: asio_include.hpp:21
restinio::router::impl::target_path_holder_t::data_t
std::unique_ptr< char[]> data_t
Definition: target_path_holder.hpp:48
percent_encoding.hpp
restinio::router::impl::target_path_holder_t::view
RESTINIO_NODISCARD string_view_t view() const noexcept
Get access to the value of target_path.
Definition: target_path_holder.hpp:86
const
#define const
Definition: zconf.h:230