Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/tools/llvm-remarkutil/RemarkUtilRegistry.cpp
35231 views
1
//===- RemarkUtilRegistry.cpp: Implement a command registry. --------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// Implement a simple subcommand registry.
10
//
11
//===----------------------------------------------------------------------===//
12
#include "RemarkUtilRegistry.h"
13
#include <unordered_map>
14
15
namespace llvm {
16
namespace remarkutil {
17
18
using HandlerType = std::function<Error()>;
19
20
static std::unordered_map<cl::SubCommand *, HandlerType> &getCommands() {
21
static std::unordered_map<cl::SubCommand *, HandlerType> Commands;
22
return Commands;
23
}
24
25
CommandRegistration::CommandRegistration(cl::SubCommand *SC,
26
HandlerType Command) {
27
assert(getCommands().count(SC) == 0 &&
28
"Attempting to overwrite a command handler");
29
assert(Command && "Attempting to register an empty std::function<Error()>");
30
getCommands()[SC] = Command;
31
}
32
33
HandlerType dispatch(cl::SubCommand *SC) {
34
auto It = getCommands().find(SC);
35
assert(It != getCommands().end() &&
36
"Attempting to dispatch on un-registered SubCommand.");
37
return It->second;
38
}
39
40
} // namespace remarkutil
41
} // namespace llvm
42
43