5#ifndef ADA_URL_SEARCH_PARAMS_INL_H
6#define ADA_URL_SEARCH_PARAMS_INL_H
22template <
typename T, ada::url_search_params_iter_type Type>
23url_search_params url_search_params_iter<T, Type>::EMPTY;
25inline void url_search_params::initialize(std::string_view
input) {
27 input.remove_prefix(1);
33 if (
equal == std::string_view::npos) {
35 std::replace(
name.begin(),
name.end(),
'+',
' ');
36 params.emplace_back(unicode::percent_decode(
name,
name.find(
'%')),
"");
41 std::replace(
name.begin(),
name.end(),
'+',
' ');
42 std::replace(value.begin(), value.end(),
'+',
' ');
44 params.emplace_back(unicode::percent_decode(
name,
name.find(
'%')),
45 unicode::percent_decode(value, value.find(
'%')));
49 while (!
input.empty()) {
66 const std::string_view value) {
67 params.emplace_back(key, value);
73 const std::string_view key) {
74 auto entry = std::find_if(params.begin(), params.end(),
75 [&key](
auto &
param) { return param.first == key; });
77 if (
entry == params.end()) {
85 const std::string_view key) {
86 std::vector<std::string>
out{};
88 for (
auto &
param : params) {
89 if (
param.first == key) {
98 auto entry = std::find_if(params.begin(), params.end(),
99 [&key](
auto &
param) { return param.first == key; });
100 return entry != params.end();
104 std::string_view value)
noexcept {
106 std::find_if(params.begin(), params.end(), [&key, &value](
auto &
param) {
107 return param.first == key && param.second == value;
109 return entry != params.end();
115 for (
size_t i = 0;
i < params.size();
i++) {
120 std::replace(key.begin(), key.end(),
' ',
'+');
121 std::replace(value.begin(), value.end(),
' ',
'+');
134 const std::string_view value) {
135 const auto find = [&key](
auto &
param) {
return param.first == key; };
137 auto it = std::find_if(params.begin(), params.end(),
find);
139 if (
it == params.end()) {
140 params.emplace_back(key, value);
143 params.erase(std::remove_if(std::next(
it), params.end(),
find),
150 std::remove_if(params.begin(), params.end(),
151 [&key](
auto &
param) { return param.first == key; }),
156 const std::string_view value) {
157 params.erase(std::remove_if(params.begin(), params.end(),
158 [&key, &value](
auto &
param) {
159 return param.first == key &&
160 param.second == value;
166 std::stable_sort(params.begin(), params.end(),
167 [](
const key_value_pair &
lhs,
const key_value_pair &
rhs) {
168 return lhs.first < rhs.first;
190template <
typename T, url_search_params_iter_type Type>
192 return pos < params.params.size();
200 return params.params[pos++].first;
208 return params.params[pos++].second;
212inline std::optional<key_value_view_pair>
217 return params.params[pos++];
Includes all definitions for Ada.
Definitions of the character sets used by unicode functions.
constexpr uint8_t WWW_FORM_URLENCODED_PERCENT_ENCODE[32]
url_search_params_iter< std::string_view, url_search_params_iter_type::VALUES > url_search_params_values_iter
url_search_params_iter< key_value_view_pair, url_search_params_iter_type::ENTRIES > url_search_params_entries_iter
url_search_params_iter< std::string_view, url_search_params_iter_type::KEYS > url_search_params_keys_iter
ada_warn_unused ada::result< result_type > parse(std::string_view input, const result_type *base_url=nullptr)
std::optional< T > next()
void set(std::string_view key, std::string_view value)
std::vector< std::string > get_all(std::string_view key)
void remove(std::string_view key)
url_search_params_entries_iter get_entries()
std::string to_string() const
url_search_params_keys_iter get_keys()
size_t size() const noexcept
void append(std::string_view key, std::string_view value)
url_search_params_values_iter get_values()
std::optional< std::string_view > get(std::string_view key)
bool has(std::string_view key) noexcept
Definitions for all unicode specific functions.
Declaration for the URL Search Params.