logging/backend: Use std::string_view in RemoveBackend() and GetBackend()

These can just use a view to a string since its only comparing against
two names in both cases for matches. This avoids constructing
std::string instances where they aren't necessary.
This commit is contained in:
Lioncash 2018-07-20 15:27:17 -04:00 committed by zhupengfei
parent 4a3c4f5f67
commit 765c7e711a
2 changed files with 13 additions and 12 deletions

View File

@ -47,11 +47,11 @@ public:
backends.push_back(std::move(backend)); backends.push_back(std::move(backend));
} }
void RemoveBackend(const std::string& backend_name) { void RemoveBackend(std::string_view backend_name) {
std::lock_guard<std::mutex> lock(writing_mutex); std::lock_guard<std::mutex> lock(writing_mutex);
auto it = std::remove_if(backends.begin(), backends.end(), [&backend_name](const auto& i) { const auto it =
return !strcmp(i->GetName(), backend_name.c_str()); std::remove_if(backends.begin(), backends.end(),
}); [&backend_name](const auto& i) { return backend_name == i->GetName(); });
backends.erase(it, backends.end()); backends.erase(it, backends.end());
} }
@ -63,10 +63,10 @@ public:
filter = f; filter = f;
} }
Backend* GetBackend(const std::string& backend_name) { Backend* GetBackend(std::string_view backend_name) {
auto it = std::find_if(backends.begin(), backends.end(), [&backend_name](const auto& i) { const auto it =
return !strcmp(i->GetName(), backend_name.c_str()); std::find_if(backends.begin(), backends.end(),
}); [&backend_name](const auto& i) { return backend_name == i->GetName(); });
if (it == backends.end()) if (it == backends.end())
return nullptr; return nullptr;
return it->get(); return it->get();
@ -268,11 +268,11 @@ void AddBackend(std::unique_ptr<Backend> backend) {
Impl::Instance().AddBackend(std::move(backend)); Impl::Instance().AddBackend(std::move(backend));
} }
void RemoveBackend(const std::string& backend_name) { void RemoveBackend(std::string_view backend_name) {
Impl::Instance().RemoveBackend(backend_name); Impl::Instance().RemoveBackend(backend_name);
} }
Backend* GetBackend(const std::string& backend_name) { Backend* GetBackend(std::string_view backend_name) {
return Impl::Instance().GetBackend(backend_name); return Impl::Instance().GetBackend(backend_name);
} }

View File

@ -8,6 +8,7 @@
#include <cstdarg> #include <cstdarg>
#include <memory> #include <memory>
#include <string> #include <string>
#include <string_view>
#include <utility> #include <utility>
#include "common/file_util.h" #include "common/file_util.h"
#include "common/logging/filter.h" #include "common/logging/filter.h"
@ -107,9 +108,9 @@ private:
void AddBackend(std::unique_ptr<Backend> backend); void AddBackend(std::unique_ptr<Backend> backend);
void RemoveBackend(const std::string& backend_name); void RemoveBackend(std::string_view backend_name);
Backend* GetBackend(const std::string& backend_name); Backend* GetBackend(std::string_view backend_name);
/** /**
* Returns the name of the passed log class as a C-string. Subclasses are separated by periods * Returns the name of the passed log class as a C-string. Subclasses are separated by periods