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 Labath llvm::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 Labath UserIDResolver &UserIDResolver::GetNoopResolver() { return *g_noop_resolver; }
45