aboutsummaryrefslogtreecommitdiff
path: root/include/llvm/Support/ProgramOptions.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/llvm/Support/ProgramOptions.h')
-rw-r--r--include/llvm/Support/ProgramOptions.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/include/llvm/Support/ProgramOptions.h b/include/llvm/Support/ProgramOptions.h
new file mode 100644
index 0000000000..34badb54de
--- /dev/null
+++ b/include/llvm/Support/ProgramOptions.h
@@ -0,0 +1,147 @@
+// $Id$ -*-c++-*-
+//***************************************************************************
+//
+// File:
+// ProgramOptions.h
+//
+// Purpose:
+// A representation of options for any program.
+//
+// History:
+// 08/08/95 - adve - Created in the dHPF compiler
+// 10/10/96 - mpal, dbaker - converted to const member functions.
+// 10/19/96 - meven - slightly changed interface to accomodate
+// arguments other than -X type options
+// 07/15/01 - vadve - Copied to LLVM system and modified
+//
+//**************************************************************************/
+
+#ifndef LLVM_SUPPORT_PROGRAMOPTIONS_H
+#define LLVM_SUPPORT_PROGRAMOPTIONS_H
+
+//************************** System Include Files **************************/
+
+#include <iostream.h>
+
+//*************************** User Include Files ***************************/
+
+#include "llvm/Support/Unique.h"
+#include "llvm/Support/StringUtils.h"
+
+//************************ Forward Declarations ****************************/
+
+class ProgramOption;
+
+//************************* Main Driver Routine ****************************/
+
+//---------------------------------------------------------------------------
+//
+// Class: ProgramOptions
+//
+// Base Classes: none
+//
+// Class Data Members:
+// ProgramOptionsRepr* Internal representation of program options,
+// accessible to derived classes.
+// Purpose:
+// Base class for representing the set of options for a program.
+//
+//---------------------------------------------------------------------------
+
+class ProgramOptions: public Unique {
+public:
+ /*ctor*/ ProgramOptions (int _argc,
+ const char* _argv[],
+ const char* _envp[]);
+ /*dtor*/ ~ProgramOptions () {}
+
+ //--------------------------------------------------------------------
+ // Retrieving different kinds of arguments.
+ // The required argument is specified by the optionString.
+ //--------------------------------------------------------------------
+
+ const char* StringOptionValue(const char* optionString) const;
+ bool FlagOptionValue (const char* optionString) const;
+ double RealOptionValue (const char* optionString) const;
+ int IntOptionValue (const char* optionString) const;
+
+ bool OptionSpecified (const char* optionString) const;
+
+ //--------------------------------------------------------------------
+ // The name used to invoke this program.
+ //--------------------------------------------------------------------
+ const char* ProgramName () const;
+
+ //--------------------------------------------------------------------
+ // Access to unparsed arguments
+ //--------------------------------------------------------------------
+ int NumberOfOtherOptions() const;
+ const char* OtherOption(int i) const;
+
+ //--------------------------------------------------------------------
+ // Access to the original arguments
+ //--------------------------------------------------------------------
+ const char** GetOriginalArgs() const;
+ void PrintArgs(ostream &out) const;
+
+ //--------------------------------------------------------------------
+ // Derived classes may use PrintOptions in their own PrintUsage() fct
+ // to print information about optional, required, or additional
+ // arguments
+ //--------------------------------------------------------------------
+ virtual void PrintOptions (ostream& stream) const;
+ virtual void Usage () const;
+
+ //--------------------------------------------------------------------
+ // Generate a human-friendly description of the options actually set.
+ // The vector returned contains a multiple of 3 of entries, entry 3n is
+ // the name of the option, entry 3n + 1 contains the description of
+ // the option and entry 3n + 2 contains the ascii value of the option.
+ // All entries are allocated using malloc and can be freed with 'free'.
+ //--------------------------------------------------------------------
+ virtual vector<char*> GetDescription () const;
+
+protected:
+ //--------------------------------------------------------------------
+ // Called by the subclass to register each possible option
+ // used by the program. Assumes ownership of the ProgramOption.
+ //--------------------------------------------------------------------
+ void Register (ProgramOption* option);
+
+ //--------------------------------------------------------------------
+ // Parses the options.
+ //--------------------------------------------------------------------
+ void ParseArgs (int argc,
+ const char* argv[],
+ const char* envp[]);
+
+ inline ProgramOption* OptionHandler(const char* optString) {
+ ProgramOption** poPtr = optionRegistry.query(optString);
+ return poPtr? *poPtr : NULL;
+ }
+
+ inline const ProgramOption* OptionHandler(const char* optString) const {
+ const ProgramOption* const* poPtr = optionRegistry.query(optString);
+ return poPtr? *poPtr : NULL;
+ }
+
+protected:
+ //--------------------------------------------------------------------
+ // Functions that must be overridden by the subclass.
+ //--------------------------------------------------------------------
+
+ virtual void ParseExtraArgs () = 0; // called after successful ParseArgs
+
+ virtual void PrintUsage (ostream& stream) const = 0;
+
+protected:
+ StringMap<ProgramOption*> optionRegistry;
+ int argc;
+ const char** argv;
+ const char** envp;
+ int argsConsumed;
+};
+
+//**************************************************************************/
+
+#endif