]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/llvm-xray/xray-registry.cpp
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / llvm-xray / xray-registry.cpp
1 //===- xray-registry.cpp: Implement a command registry. -------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // Implement a simple subcommand registry.
11 //
12 //===----------------------------------------------------------------------===//
13 #include "xray-registry.h"
14
15 #include "llvm/Support/ManagedStatic.h"
16 #include <unordered_map>
17
18 namespace llvm {
19 namespace xray {
20
21 using HandlerType = std::function<Error()>;
22
23 ManagedStatic<std::unordered_map<cl::SubCommand *, HandlerType>> Commands;
24
25 CommandRegistration::CommandRegistration(cl::SubCommand *SC,
26                                          HandlerType Command) {
27   assert(Commands->count(SC) == 0 &&
28          "Attempting to overwrite a command handler");
29   assert(Command && "Attempting to register an empty std::function<Error()>");
30   (*Commands)[SC] = Command;
31 }
32
33 HandlerType dispatch(cl::SubCommand *SC) {
34   auto It = Commands->find(SC);
35   assert(It != Commands->end() &&
36          "Attempting to dispatch on un-registered SubCommand.");
37   return It->second;
38 }
39
40 } // namespace xray
41 } // namespace llvm