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