Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

use more c++20 functions #788

Merged
merged 1 commit into from
Dec 1, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 22 additions & 28 deletions include/ada/url_search_params-inl.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

#include <algorithm>
#include <optional>
#include <ranges>
#include <string>
#include <string_view>
#include <vector>
Expand All @@ -37,14 +38,14 @@ inline void url_search_params::initialize(std::string_view input) {

if (equal == std::string_view::npos) {
std::string name(current);
std::replace(name.begin(), name.end(), '+', ' ');
std::ranges::replace(name, '+', ' ');
params.emplace_back(unicode::percent_decode(name, name.find('%')), "");
} else {
std::string name(current.substr(0, equal));
std::string value(current.substr(equal + 1));

std::replace(name.begin(), name.end(), '+', ' ');
std::replace(value.begin(), value.end(), '+', ' ');
std::ranges::replace(name, '+', ' ');
std::ranges::replace(value, '+', ' ');

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

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

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

inline bool url_search_params::has(const std::string_view key) noexcept {
auto entry = std::find_if(params.begin(), params.end(),
[&key](auto &param) { return param.first == key; });
auto entry = std::ranges::find_if(
params, [&key](auto &param) { return param.first == key; });
return entry != params.end();
}

inline bool url_search_params::has(std::string_view key,
std::string_view value) noexcept {
auto entry =
std::find_if(params.begin(), params.end(), [&key, &value](auto &param) {
return param.first == key && param.second == value;
});
auto entry = std::ranges::find_if(params, [&key, &value](auto &param) {
return param.first == key && param.second == value;
});
return entry != params.end();
}

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

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

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

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

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

inline void url_search_params::remove(const std::string_view key) {
params.erase(
std::remove_if(params.begin(), params.end(),
[&key](auto &param) { return param.first == key; }),
params.end());
std::erase_if(params, [&key](auto &param) { return param.first == key; });
}

inline void url_search_params::remove(const std::string_view key,
const std::string_view value) {
params.erase(std::remove_if(params.begin(), params.end(),
[&key, &value](auto &param) {
return param.first == key &&
param.second == value;
}),
params.end());
std::erase_if(params, [&key, &value](auto &param) {
return param.first == key && param.second == value;
});
}

inline void url_search_params::sort() {
std::stable_sort(params.begin(), params.end(),
[](const key_value_pair &lhs, const key_value_pair &rhs) {
return lhs.first < rhs.first;
});
std::ranges::stable_sort(
params, [](const key_value_pair &lhs, const key_value_pair &rhs) {
return lhs.first < rhs.first;
});
}

inline url_search_params_keys_iter url_search_params::get_keys() {
Expand Down
Loading