Skip to content

Commit 1410b0b

Browse files
authored
use more c++20 functions (#788)
1 parent 3f1ff2b commit 1410b0b

File tree

1 file changed

+22
-28
lines changed

1 file changed

+22
-28
lines changed

include/ada/url_search_params-inl.h

Lines changed: 22 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <algorithm>
1414
#include <optional>
15+
#include <ranges>
1516
#include <string>
1617
#include <string_view>
1718
#include <vector>
@@ -37,14 +38,14 @@ inline void url_search_params::initialize(std::string_view input) {
3738

3839
if (equal == std::string_view::npos) {
3940
std::string name(current);
40-
std::replace(name.begin(), name.end(), '+', ' ');
41+
std::ranges::replace(name, '+', ' ');
4142
params.emplace_back(unicode::percent_decode(name, name.find('%')), "");
4243
} else {
4344
std::string name(current.substr(0, equal));
4445
std::string value(current.substr(equal + 1));
4546

46-
std::replace(name.begin(), name.end(), '+', ' ');
47-
std::replace(value.begin(), value.end(), '+', ' ');
47+
std::ranges::replace(name, '+', ' ');
48+
std::ranges::replace(value, '+', ' ');
4849

4950
params.emplace_back(unicode::percent_decode(name, name.find('%')),
5051
unicode::percent_decode(value, value.find('%')));
@@ -76,8 +77,8 @@ inline size_t url_search_params::size() const noexcept { return params.size(); }
7677

7778
inline std::optional<std::string_view> url_search_params::get(
7879
const std::string_view key) {
79-
auto entry = std::find_if(params.begin(), params.end(),
80-
[&key](auto &param) { return param.first == key; });
80+
auto entry = std::ranges::find_if(
81+
params, [&key](auto &param) { return param.first == key; });
8182

8283
if (entry == params.end()) {
8384
return std::nullopt;
@@ -100,17 +101,16 @@ inline std::vector<std::string> url_search_params::get_all(
100101
}
101102

102103
inline bool url_search_params::has(const std::string_view key) noexcept {
103-
auto entry = std::find_if(params.begin(), params.end(),
104-
[&key](auto &param) { return param.first == key; });
104+
auto entry = std::ranges::find_if(
105+
params, [&key](auto &param) { return param.first == key; });
105106
return entry != params.end();
106107
}
107108

108109
inline bool url_search_params::has(std::string_view key,
109110
std::string_view value) noexcept {
110-
auto entry =
111-
std::find_if(params.begin(), params.end(), [&key, &value](auto &param) {
112-
return param.first == key && param.second == value;
113-
});
111+
auto entry = std::ranges::find_if(params, [&key, &value](auto &param) {
112+
return param.first == key && param.second == value;
113+
});
114114
return entry != params.end();
115115
}
116116

@@ -122,8 +122,8 @@ inline std::string url_search_params::to_string() const {
122122
auto value = ada::unicode::percent_encode(params[i].second, character_set);
123123

124124
// Performance optimization: Move this inside percent_encode.
125-
std::replace(key.begin(), key.end(), ' ', '+');
126-
std::replace(value.begin(), value.end(), ' ', '+');
125+
std::ranges::replace(key, ' ', '+');
126+
std::ranges::replace(value, ' ', '+');
127127

128128
if (i != 0) {
129129
out += "&";
@@ -139,7 +139,7 @@ inline void url_search_params::set(const std::string_view key,
139139
const std::string_view value) {
140140
const auto find = [&key](auto &param) { return param.first == key; };
141141

142-
auto it = std::find_if(params.begin(), params.end(), find);
142+
auto it = std::ranges::find_if(params, find);
143143

144144
if (it == params.end()) {
145145
params.emplace_back(key, value);
@@ -151,27 +151,21 @@ inline void url_search_params::set(const std::string_view key,
151151
}
152152

153153
inline void url_search_params::remove(const std::string_view key) {
154-
params.erase(
155-
std::remove_if(params.begin(), params.end(),
156-
[&key](auto &param) { return param.first == key; }),
157-
params.end());
154+
std::erase_if(params, [&key](auto &param) { return param.first == key; });
158155
}
159156

160157
inline void url_search_params::remove(const std::string_view key,
161158
const std::string_view value) {
162-
params.erase(std::remove_if(params.begin(), params.end(),
163-
[&key, &value](auto &param) {
164-
return param.first == key &&
165-
param.second == value;
166-
}),
167-
params.end());
159+
std::erase_if(params, [&key, &value](auto &param) {
160+
return param.first == key && param.second == value;
161+
});
168162
}
169163

170164
inline void url_search_params::sort() {
171-
std::stable_sort(params.begin(), params.end(),
172-
[](const key_value_pair &lhs, const key_value_pair &rhs) {
173-
return lhs.first < rhs.first;
174-
});
165+
std::ranges::stable_sort(
166+
params, [](const key_value_pair &lhs, const key_value_pair &rhs) {
167+
return lhs.first < rhs.first;
168+
});
175169
}
176170

177171
inline url_search_params_keys_iter url_search_params::get_keys() {

0 commit comments

Comments
 (0)