From af7e82184d7d77e426056c7c233e860baeebe80f Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 23 Jul 2002 17:15:09 +0000 Subject: [PATCH] Add support for removing an option from a genericparser git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2998 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/Support/CommandLine.h | 17 ++++++++++++++++- include/llvm/Support/CommandLine.h | 17 ++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/include/Support/CommandLine.h b/include/Support/CommandLine.h index 9e02a6cf417..633227adc38 100644 --- a/include/Support/CommandLine.h +++ b/include/Support/CommandLine.h @@ -372,6 +372,11 @@ struct generic_parser_base { return ValueDisallowed; } + // findOption - Return the option number corresponding to the specified + // argument string. If the option is not found, getNumOptions() is returned. + // + unsigned findOption(const char *Name); + protected: bool hasArgStr; }; @@ -384,8 +389,10 @@ protected: // template class parser : public generic_parser_base { +protected: std::vector > > Values; +public: // Implement virtual functions needed by generic_parser_base unsigned getNumOptions() const { return Values.size(); } @@ -394,7 +401,6 @@ class parser : public generic_parser_base { return Values[N].second.second; } -public: // Default implementation, requires user to populate it with values somehow. template // parse - Return true on error. bool parse(Opt &O, const char *ArgName, const string &Arg) { @@ -416,8 +422,17 @@ public: // addLiteralOption - Add an entry to the mapping table... template void addLiteralOption(const char *Name, const DT &V, const char *HelpStr) { + assert(findOption(Name) == Values.size() && "Option already exists!"); Values.push_back(std::make_pair(Name, std::make_pair((DataType)V,HelpStr))); } + + // removeLiteralOption - Remove the specified option. + // + void removeLiteralOption(const char *Name) { + unsigned N = findOption(Name); + assert(N != Values.size() && "Option not found!"); + Values.erase(Values.begin()+N); + } }; diff --git a/include/llvm/Support/CommandLine.h b/include/llvm/Support/CommandLine.h index 9e02a6cf417..633227adc38 100644 --- a/include/llvm/Support/CommandLine.h +++ b/include/llvm/Support/CommandLine.h @@ -372,6 +372,11 @@ struct generic_parser_base { return ValueDisallowed; } + // findOption - Return the option number corresponding to the specified + // argument string. If the option is not found, getNumOptions() is returned. + // + unsigned findOption(const char *Name); + protected: bool hasArgStr; }; @@ -384,8 +389,10 @@ protected: // template class parser : public generic_parser_base { +protected: std::vector > > Values; +public: // Implement virtual functions needed by generic_parser_base unsigned getNumOptions() const { return Values.size(); } @@ -394,7 +401,6 @@ class parser : public generic_parser_base { return Values[N].second.second; } -public: // Default implementation, requires user to populate it with values somehow. template // parse - Return true on error. bool parse(Opt &O, const char *ArgName, const string &Arg) { @@ -416,8 +422,17 @@ public: // addLiteralOption - Add an entry to the mapping table... template void addLiteralOption(const char *Name, const DT &V, const char *HelpStr) { + assert(findOption(Name) == Values.size() && "Option already exists!"); Values.push_back(std::make_pair(Name, std::make_pair((DataType)V,HelpStr))); } + + // removeLiteralOption - Remove the specified option. + // + void removeLiteralOption(const char *Name) { + unsigned N = findOption(Name); + assert(N != Values.size() && "Option not found!"); + Values.erase(Values.begin()+N); + } };