1*80814287SRaphael Isemann //===-- UserIDResolver.cpp ------------------------------------------------===// 2aa51e6a6SPavel Labath // 3aa51e6a6SPavel Labath // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4aa51e6a6SPavel Labath // See https://llvm.org/LICENSE.txt for license information. 5aa51e6a6SPavel Labath // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6aa51e6a6SPavel Labath // 7aa51e6a6SPavel Labath //===----------------------------------------------------------------------===// 8aa51e6a6SPavel Labath 9aa51e6a6SPavel Labath #include "lldb/Utility/UserIDResolver.h" 10aa51e6a6SPavel Labath #include "llvm/Support/ManagedStatic.h" 11aa51e6a6SPavel Labath 12aa51e6a6SPavel Labath using namespace lldb_private; 13aa51e6a6SPavel Labath 14aa51e6a6SPavel Labath UserIDResolver::~UserIDResolver() = default; 15aa51e6a6SPavel Labath Get(id_t id,Map & cache,llvm::Optional<std::string> (UserIDResolver::* do_get)(id_t))16aa51e6a6SPavel Labathllvm::Optional<llvm::StringRef> UserIDResolver::Get( 17aa51e6a6SPavel Labath id_t id, Map &cache, 18aa51e6a6SPavel Labath llvm::Optional<std::string> (UserIDResolver::*do_get)(id_t)) { 19aa51e6a6SPavel Labath 20aa51e6a6SPavel Labath std::lock_guard<std::mutex> guard(m_mutex); 21aa51e6a6SPavel Labath auto iter_bool = cache.try_emplace(id, llvm::None); 22aa51e6a6SPavel Labath if (iter_bool.second) 23aa51e6a6SPavel Labath iter_bool.first->second = (this->*do_get)(id); 24aa51e6a6SPavel Labath if (iter_bool.first->second) 25aa51e6a6SPavel Labath return llvm::StringRef(*iter_bool.first->second); 26aa51e6a6SPavel Labath return llvm::None; 27aa51e6a6SPavel Labath } 28aa51e6a6SPavel Labath 29aa51e6a6SPavel Labath namespace { 30aa51e6a6SPavel Labath class NoopResolver : public UserIDResolver { 31aa51e6a6SPavel Labath protected: DoGetUserName(id_t uid)32aa51e6a6SPavel Labath llvm::Optional<std::string> DoGetUserName(id_t uid) override { 33aa51e6a6SPavel Labath return llvm::None; 34aa51e6a6SPavel Labath } 35aa51e6a6SPavel Labath DoGetGroupName(id_t gid)36aa51e6a6SPavel Labath llvm::Optional<std::string> DoGetGroupName(id_t gid) override { 37aa51e6a6SPavel Labath return llvm::None; 38aa51e6a6SPavel Labath } 39aa51e6a6SPavel Labath }; 40aa51e6a6SPavel Labath } // namespace 41aa51e6a6SPavel Labath 42aa51e6a6SPavel Labath static llvm::ManagedStatic<NoopResolver> g_noop_resolver; 43aa51e6a6SPavel Labath GetNoopResolver()44aa51e6a6SPavel LabathUserIDResolver &UserIDResolver::GetNoopResolver() { return *g_noop_resolver; } 45