RESTinio
target_path_holder.hpp
Go to the documentation of this file.
1/*
2 * RESTinio
3 */
4
12#pragma once
13
15
17
18#include <memory>
19
20namespace restinio
21{
22
23namespace router
24{
25
26namespace impl
27{
28
29//
30// target_path_holder_t
31//
46{
47 public:
48 using data_t = std::unique_ptr<char[]>;
49
51
63 : m_size{ restinio::utils::uri_normalization::
64 unreserved_chars::estimate_required_capacity( original_path ) }
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
Helper class for holding a unique instance of char array with target_path value.
RESTINIO_NODISCARD string_view_t view() const noexcept
Get access to the value of target_path.
data_t m_data
Actual data with target_path.
target_path_holder_t(string_view_t original_path)
Initializing constructor.
std::size_t m_size
The length of target_path.
RESTINIO_NODISCARD data_t giveout_data() noexcept
Give out the value from holder.
#define RESTINIO_NODISCARD
void normalize_to(string_view_t what, char *dest)
Perform normalization of URI value.
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.
nonstd::string_view string_view_t
Definition: string_view.hpp:19
#define const
Definition: zconf.h:230