xray-registry.cpp revision 353358
1//===- xray-registry.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 "xray-registry.h" 13 14#include "llvm/Support/ManagedStatic.h" 15#include <unordered_map> 16 17namespace llvm { 18namespace xray { 19 20using HandlerType = std::function<Error()>; 21 22ManagedStatic<std::unordered_map<cl::SubCommand *, HandlerType>> Commands; 23 24CommandRegistration::CommandRegistration(cl::SubCommand *SC, 25 HandlerType Command) { 26 assert(Commands->count(SC) == 0 && 27 "Attempting to overwrite a command handler"); 28 assert(Command && "Attempting to register an empty std::function<Error()>"); 29 (*Commands)[SC] = Command; 30} 31 32HandlerType dispatch(cl::SubCommand *SC) { 33 auto It = Commands->find(SC); 34 assert(It != Commands->end() && 35 "Attempting to dispatch on un-registered SubCommand."); 36 return It->second; 37} 38 39} // namespace xray 40} // namespace llvm 41