This is an automated email from the ASF dual-hosted git repository.
guangmingchen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git
The following commit(s) were added to refs/heads/master by this push:
new 6ef4158c use standard alg to optimze comparator (#2959)
6ef4158c is described below
commit 6ef4158cc6b36bf6a831416d265e081f1e995051
Author: none <[email protected]>
AuthorDate: Sun Apr 27 10:01:26 2025 +0800
use standard alg to optimze comparator (#2959)
Co-authored-by: qiongyu.zhang <[email protected]>
---
src/brpc/restful.cpp | 25 +++++++++----------------
1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/src/brpc/restful.cpp b/src/brpc/restful.cpp
index 32554e82..36b31e9d 100644
--- a/src/brpc/restful.cpp
+++ b/src/brpc/restful.cpp
@@ -314,29 +314,22 @@ void RestfulMap::ClearMethods() {
struct CompareItemInPathList {
bool operator()(const RestfulMethodProperty* e1,
const RestfulMethodProperty* e2) const {
- const int rc1 = e1->path.prefix.compare(e2->path.prefix);
+ const RestfulMethodPath& path1 = e1->path;
+ const RestfulMethodPath& path2 = e2->path;
+ const int rc1 = path1.prefix.compare(path2.prefix);
if (rc1 != 0) {
return rc1 < 0;
}
// /A/*/B is put before /A/B so that we try exact patterns first
// (the matching is in reversed order)
- if (e1->path.has_wildcard != e2->path.has_wildcard) {
- return e1->path.has_wildcard > e2->path.has_wildcard;
+ if (path1.has_wildcard != path2.has_wildcard) {
+ return path1.has_wildcard > path2.has_wildcard;
}
// Compare postfix from back to front.
- // TODO: Optimize this.
- std::string::const_reverse_iterator it1 = e1->path.postfix.rbegin();
- std::string::const_reverse_iterator it2 = e2->path.postfix.rbegin();
- while (it1 != e1->path.postfix.rend() &&
- it2 != e2->path.postfix.rend()) {
- if (*it1 != *it2) {
- return (*it1 < *it2);
- }
- ++it1;
- ++it2;
- }
- return (it1 == e1->path.postfix.rend())
- > (it2 == e2->path.postfix.rend());
+ const bool postfix_result = std::lexicographical_compare(
+ path1.postfix.rbegin(), path1.postfix.rend(),
+ path2.postfix.rbegin(), path2.postfix.rend());
+ return postfix_result;
}
};
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]