Generic: add range-adapter for option parsing.

I want to use it in lld, but while I'm here I'll update LLVM uses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212615 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Tim Northover 2014-07-09 13:03:37 +00:00
parent 4c27c85cde
commit 7fba8d794f
2 changed files with 20 additions and 17 deletions

View File

@ -150,6 +150,13 @@ public:
return arg_iterator(Args.end(), *this);
}
iterator_range<arg_iterator> filtered(OptSpecifier Id0 = 0U,
OptSpecifier Id1 = 0U,
OptSpecifier Id2 = 0U) const {
return iterator_range<arg_iterator>(filtered_begin(Id0, Id1, Id2),
filtered_end());
}
/// @}
/// @name Arg Removal
/// @{

View File

@ -234,44 +234,40 @@ void ArgList::AddLastArg(ArgStringList &Output, OptSpecifier Id0,
void ArgList::AddAllArgs(ArgStringList &Output, OptSpecifier Id0,
OptSpecifier Id1, OptSpecifier Id2) const {
for (arg_iterator it = filtered_begin(Id0, Id1, Id2),
ie = filtered_end(); it != ie; ++it) {
(*it)->claim();
(*it)->render(*this, Output);
for (auto Arg: filtered(Id0, Id1, Id2)) {
Arg->claim();
Arg->render(*this, Output);
}
}
void ArgList::AddAllArgValues(ArgStringList &Output, OptSpecifier Id0,
OptSpecifier Id1, OptSpecifier Id2) const {
for (arg_iterator it = filtered_begin(Id0, Id1, Id2),
ie = filtered_end(); it != ie; ++it) {
(*it)->claim();
for (unsigned i = 0, e = (*it)->getNumValues(); i != e; ++i)
Output.push_back((*it)->getValue(i));
for (auto Arg : filtered(Id0, Id1, Id2)) {
Arg->claim();
for (unsigned i = 0, e = Arg->getNumValues(); i != e; ++i)
Output.push_back(Arg->getValue(i));
}
}
void ArgList::AddAllArgsTranslated(ArgStringList &Output, OptSpecifier Id0,
const char *Translation,
bool Joined) const {
for (arg_iterator it = filtered_begin(Id0),
ie = filtered_end(); it != ie; ++it) {
(*it)->claim();
for (auto Arg: filtered(Id0)) {
Arg->claim();
if (Joined) {
Output.push_back(MakeArgString(StringRef(Translation) +
(*it)->getValue(0)));
Arg->getValue(0)));
} else {
Output.push_back(Translation);
Output.push_back((*it)->getValue(0));
Output.push_back(Arg->getValue(0));
}
}
}
void ArgList::ClaimAllArgs(OptSpecifier Id0) const {
for (arg_iterator it = filtered_begin(Id0),
ie = filtered_end(); it != ie; ++it)
(*it)->claim();
for (auto Arg : filtered(Id0))
Arg->claim();
}
void ArgList::ClaimAllArgs() const {