//===-- cpp11-migrate/Transforms.h - class Transforms Def'n -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// \brief This file provides the definition for class Transforms which is /// responsible for defining the command-line arguments exposing /// transformations to the user and applying requested transforms. /// //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_TRANSFORMS_H #define LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_TRANSFORMS_H #include "llvm/Support/CommandLine.h" #include "llvm/ADT/StringRef.h" #include // Forward declarations namespace llvm { namespace cl { class Option; } // namespace cl } // namespace llvm class Transform; struct TransformOptions; typedef Transform *(*TransformCreator)(const TransformOptions &); template Transform *ConstructTransform(const TransformOptions &Options) { return new T(Options); } /// \brief Class encapsulating the creation of command line bool options /// for each transform and instantiating transforms chosen by the user. class Transforms { public: typedef std::vector TransformVec; typedef TransformVec::const_iterator const_iterator; public: ~Transforms(); /// \brief Registers a transform causing the transform to be made available /// on the command line. /// /// Be sure to register all transforms *before* parsing command line options. void registerTransform(llvm::StringRef OptName, llvm::StringRef Description, TransformCreator Creator); /// \brief Instantiate all transforms that were selected on the command line. /// /// Call *after* parsing options. void createSelectedTransforms(const TransformOptions &Options); /// \brief Return an iterator to the start of a container of instantiated /// transforms. const_iterator begin() const { return ChosenTransforms.begin(); } /// \brief Return an iterator to the end of a container of instantiated /// transforms. const_iterator end() const { return ChosenTransforms.end(); } private: typedef std::vector*, TransformCreator> > OptionVec; private: TransformVec ChosenTransforms; OptionVec Options; }; #endif // LLVM_TOOLS_CLANG_TOOLS_EXTRA_CPP11_MIGRATE_TRANSFORMS_H