cmIDEOptions: Add SpaceAppendable flag table type

This commit is contained in:
Brad King
2017-02-15 09:35:36 -05:00
parent 72cfb3c3d2
commit 3936a2886e
3 changed files with 22 additions and 0 deletions

View File

@@ -24,6 +24,9 @@ struct cmIDEFlagTable
// IgnoreDefaultLibraryNames)
UserFollowing = (1 << 5), // expect value in following argument
CaseInsensitive = (1 << 6), // flag may be any case
SpaceAppendable = (1 << 7), // a flag that if specified multiple times
// should have its value appended to the
// old value with spaces
UserValueIgnored = UserValue | UserIgnored,
UserValueRequired = UserValue | UserRequired

View File

@@ -125,6 +125,8 @@ void cmIDEOptions::FlagMapUpdate(cmIDEFlagTable const* entry,
this->FlagMap[entry->IDEName] = entry->value;
} else if (entry->special & cmIDEFlagTable::SemicolonAppendable) {
this->FlagMap[entry->IDEName].push_back(new_value);
} else if (entry->special & cmIDEFlagTable::SpaceAppendable) {
this->FlagMap[entry->IDEName].append_with_space(new_value);
} else {
// Use the user-specified value.
this->FlagMap[entry->IDEName] = new_value;
@@ -172,6 +174,12 @@ void cmIDEOptions::AppendFlag(std::string const& flag,
std::copy(value.begin(), value.end(), std::back_inserter(fv));
}
void cmIDEOptions::AppendFlagString(std::string const& flag,
std::string const& value)
{
this->FlagMap[flag].append_with_space(value);
}
void cmIDEOptions::RemoveFlag(const char* flag)
{
this->FlagMap.erase(flag);

View File

@@ -29,6 +29,7 @@ public:
void AppendFlag(std::string const& flag, std::string const& value);
void AppendFlag(std::string const& flag,
std::vector<std::string> const& value);
void AppendFlagString(std::string const& flag, std::string const& value);
void RemoveFlag(const char* flag);
bool HasFlag(std::string const& flag) const;
const char* GetFlag(const char* flag);
@@ -57,6 +58,16 @@ protected:
this->derived::operator=(r);
return *this;
}
FlagValue& append_with_space(std::string const& r)
{
this->resize(1);
std::string& l = this->operator[](0);
if (!l.empty()) {
l += " ";
}
l += r;
return *this;
}
};
std::map<std::string, FlagValue> FlagMap;