Remove the default clause from a fully-covering switch
[llvm-core.git] / tools / llvm-xray / xray-registry.cc
blob36d3a2e58f97f8f60eef3280b5dab57931da64f2
1 //===- xray-registry.cc - 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.
12 //===----------------------------------------------------------------------===//
13 #include "xray-registry.h"
15 #include "llvm/Support/ManagedStatic.h"
16 #include <unordered_map>
18 namespace llvm {
19 namespace xray {
21 using HandlerType = std::function<Error()>;
23 ManagedStatic<std::unordered_map<cl::SubCommand *, HandlerType>> Commands;
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;
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;
40 } // namespace xray
41 } // namespace llvm