1*5f757f3fSDimitry Andric //===- RemarkUtilRegistry.h: 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 #ifndef TOOLS_LLVM_REMARKUTIL_REGISTRY_H 13*5f757f3fSDimitry Andric #define TOOLS_LLVM_REMARKUTIL_REGISTRY_H 14*5f757f3fSDimitry Andric 15*5f757f3fSDimitry Andric #include "llvm/Support/CommandLine.h" 16*5f757f3fSDimitry Andric #include "llvm/Support/Error.h" 17*5f757f3fSDimitry Andric 18*5f757f3fSDimitry Andric namespace llvm { 19*5f757f3fSDimitry Andric namespace remarkutil { 20*5f757f3fSDimitry Andric 21*5f757f3fSDimitry Andric // Use |CommandRegistration| as a global initialiser that registers a function 22*5f757f3fSDimitry Andric // and associates it with |SC|. This requires that a command has not been 23*5f757f3fSDimitry Andric // registered to a given |SC|. 24*5f757f3fSDimitry Andric // 25*5f757f3fSDimitry Andric // Usage: 26*5f757f3fSDimitry Andric // 27*5f757f3fSDimitry Andric // // At namespace scope. 28*5f757f3fSDimitry Andric // static CommandRegistration Unused(&MySubCommand, [] { ... }); 29*5f757f3fSDimitry Andric // 30*5f757f3fSDimitry Andric struct CommandRegistration { 31*5f757f3fSDimitry Andric CommandRegistration(cl::SubCommand *SC, std::function<Error()> Command); 32*5f757f3fSDimitry Andric }; 33*5f757f3fSDimitry Andric 34*5f757f3fSDimitry Andric // Requires that |SC| is not null and has an associated function to it. 35*5f757f3fSDimitry Andric std::function<Error()> dispatch(cl::SubCommand *SC); 36*5f757f3fSDimitry Andric 37*5f757f3fSDimitry Andric } // namespace remarkutil 38*5f757f3fSDimitry Andric } // namespace llvm 39*5f757f3fSDimitry Andric 40*5f757f3fSDimitry Andric #endif // TOOLS_LLVM_REMARKUTIL_REGISTRY_H 41