|  | //===-- UserIDResolver.cpp ------------------------------------------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include "lldb/Utility/UserIDResolver.h" | 
|  | #include "llvm/Support/ManagedStatic.h" | 
|  |  | 
|  | using namespace lldb_private; | 
|  |  | 
|  | UserIDResolver::~UserIDResolver() = default; | 
|  |  | 
|  | llvm::Optional<llvm::StringRef> UserIDResolver::Get( | 
|  | id_t id, Map &cache, | 
|  | llvm::Optional<std::string> (UserIDResolver::*do_get)(id_t)) { | 
|  |  | 
|  | std::lock_guard<std::mutex> guard(m_mutex); | 
|  | auto iter_bool = cache.try_emplace(id, llvm::None); | 
|  | if (iter_bool.second) | 
|  | iter_bool.first->second = (this->*do_get)(id); | 
|  | if (iter_bool.first->second) | 
|  | return llvm::StringRef(*iter_bool.first->second); | 
|  | return llvm::None; | 
|  | } | 
|  |  | 
|  | namespace { | 
|  | class NoopResolver : public UserIDResolver { | 
|  | protected: | 
|  | llvm::Optional<std::string> DoGetUserName(id_t uid) override { | 
|  | return llvm::None; | 
|  | } | 
|  |  | 
|  | llvm::Optional<std::string> DoGetGroupName(id_t gid) override { | 
|  | return llvm::None; | 
|  | } | 
|  | }; | 
|  | } // namespace | 
|  |  | 
|  | static llvm::ManagedStatic<NoopResolver> g_noop_resolver; | 
|  |  | 
|  | UserIDResolver &UserIDResolver::GetNoopResolver() { return *g_noop_resolver; } |