| //===- xray-registry.h - Define registry mechanism for commands. ----------===// | 
 | // | 
 | // 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. | 
 | // | 
 | //===----------------------------------------------------------------------===// | 
 | #ifndef TOOLS_LLVM_XRAY_XRAY_REGISTRY_H | 
 | #define TOOLS_LLVM_XRAY_XRAY_REGISTRY_H | 
 |  | 
 | #include "llvm/Support/CommandLine.h" | 
 | #include "llvm/Support/Error.h" | 
 |  | 
 | namespace llvm { | 
 | namespace xray { | 
 |  | 
 | // Use |CommandRegistration| as a global initialiser that registers a function | 
 | // and associates it with |SC|. This requires that a command has not been | 
 | // registered to a given |SC|. | 
 | // | 
 | // Usage: | 
 | // | 
 | //   // At namespace scope. | 
 | //   static CommandRegistration Unused(&MySubCommand, [] { ... }); | 
 | // | 
 | struct CommandRegistration { | 
 |   CommandRegistration(cl::SubCommand *SC, std::function<Error()> Command); | 
 | }; | 
 |  | 
 | // Requires that |SC| is not null and has an associated function to it. | 
 | std::function<Error()> dispatch(cl::SubCommand *SC); | 
 |  | 
 | } // namespace xray | 
 | } // namespace llvm | 
 |  | 
 | #endif // TOOLS_LLVM_XRAY_XRAY_REGISTRY_H |