Home | History | Annotate | Download | only in Support
      1 //=== RegistryParser.h - Linker-supported plugin registries -----*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // Defines a command-line parser for a registry.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_SUPPORT_REGISTRY_PARSER_H
     15 #define LLVM_SUPPORT_REGISTRY_PARSER_H
     16 
     17 #include "llvm/Support/CommandLine.h"
     18 #include "llvm/Support/Registry.h"
     19 
     20 namespace llvm {
     21 
     22   /// A command-line parser for a registry. Use like such:
     23   ///
     24   ///   static cl::opt<Registry<Collector>::entry, false,
     25   ///                  RegistryParser<Collector> >
     26   ///   GCOpt("gc", cl::desc("Garbage collector to use."),
     27   ///               cl::value_desc());
     28   ///
     29   /// To make use of the value:
     30   ///
     31   ///   Collector *TheCollector = GCOpt->instantiate();
     32   ///
     33   template <typename T, typename U = RegistryTraits<T> >
     34   class RegistryParser :
     35   public cl::parser<const typename U::entry*>,
     36     public Registry<T, U>::listener {
     37     typedef U traits;
     38     typedef typename U::entry entry;
     39     typedef typename Registry<T, U>::listener listener;
     40 
     41   protected:
     42     void registered(const entry &E) {
     43       addLiteralOption(traits::nameof(E), &E, traits::descof(E));
     44     }
     45 
     46   public:
     47     void initialize(cl::Option &O) {
     48       listener::init();
     49       cl::parser<const typename U::entry*>::initialize(O);
     50     }
     51   };
     52 
     53 }
     54 
     55 #endif // LLVM_SUPPORT_REGISTRY_PARSER_H
     56