|  | //===- RemarkUtilRegistry.cpp: Implement a command registry. --------------===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // Implement a simple subcommand registry. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | #include "RemarkUtilRegistry.h" | 
|  | #include <unordered_map> | 
|  |  | 
|  | namespace llvm { | 
|  | namespace remarkutil { | 
|  |  | 
|  | using HandlerType = std::function<Error()>; | 
|  |  | 
|  | static std::unordered_map<cl::SubCommand *, HandlerType> &getCommands() { | 
|  | static std::unordered_map<cl::SubCommand *, HandlerType> Commands; | 
|  | return Commands; | 
|  | } | 
|  |  | 
|  | CommandRegistration::CommandRegistration(cl::SubCommand *SC, | 
|  | HandlerType Command) { | 
|  | assert(getCommands().count(SC) == 0 && | 
|  | "Attempting to overwrite a command handler"); | 
|  | assert(Command && "Attempting to register an empty std::function<Error()>"); | 
|  | getCommands()[SC] = Command; | 
|  | } | 
|  |  | 
|  | HandlerType dispatch(cl::SubCommand *SC) { | 
|  | auto It = getCommands().find(SC); | 
|  | assert(It != getCommands().end() && | 
|  | "Attempting to dispatch on un-registered SubCommand."); | 
|  | return It->second; | 
|  | } | 
|  |  | 
|  | } // namespace remarkutil | 
|  | } // namespace llvm |