summaryrefslogtreecommitdiff
path: root/include/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-07-23 17:15:09 +0000
committerChris Lattner <sabre@nondot.org>2002-07-23 17:15:09 +0000
commitaf7e82184d7d77e426056c7c233e860baeebe80f (patch)
tree5ed032c7cf4586766e40ae903f2cdbc519d56868 /include/llvm
parentae1257a77b108d1c0202547a06473693ea4492c6 (diff)
downloadllvm-af7e82184d7d77e426056c7c233e860baeebe80f.tar.gz
llvm-af7e82184d7d77e426056c7c233e860baeebe80f.tar.bz2
llvm-af7e82184d7d77e426056c7c233e860baeebe80f.tar.xz
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
Diffstat (limited to 'include/llvm')
-rw-r--r--include/llvm/Support/CommandLine.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/include/llvm/Support/CommandLine.h b/include/llvm/Support/CommandLine.h
index 9e02a6cf41..633227adc3 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 DataType>
class parser : public generic_parser_base {
+protected:
std::vector<std::pair<const char *,
std::pair<DataType, const char *> > > 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<class Opt> // 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 <class DT>
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);
+ }
};