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
15namespace llvm {
16namespace remarkutil {
17
18using HandlerType = std::function<Error()>;
19
20static std::unordered_map<cl::SubCommand *, HandlerType> &getCommands() {
21 static std::unordered_map<cl::SubCommand *, HandlerType> Commands;
22 return Commands;
23}
24
25CommandRegistration::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
33HandlerType dispatch(cl::SubCommand *SC) {
34 auto It = getCommands().find(x: 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