1 //===- xray-registry.cpp: Implement a command registry. -------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Implement a simple subcommand registry.
12 //===----------------------------------------------------------------------===//
13 #include "xray-registry.h"
15 #include "llvm/Support/ManagedStatic.h"
16 #include <unordered_map>
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.");