Ninja: Simplify cmGlobalNinjaGenerator::AddRule and HasRule methods

- Use `std::unordered_set` for the emitted rule register
- Use `std::unordered_map` for command length register
This commit is contained in:
Sebastian Holtermann
2019-05-10 11:22:38 +02:00
parent a173a1173e
commit 02293841e7
2 changed files with 8 additions and 13 deletions
+5 -7
View File
@@ -706,22 +706,20 @@ void cmGlobalNinjaGenerator::AddRule(
const std::string& restat, bool generator)
{
// Do not add the same rule twice.
if (this->HasRule(name)) {
if (!this->Rules.insert(name).second) {
return;
}
this->Rules.insert(name);
// Store command length
this->RuleCmdLength[name] = static_cast<int>(command.size());
// Write rule
cmGlobalNinjaGenerator::WriteRule(*this->RulesFileStream, name, command,
description, comment, depfile, deptype,
rspfile, rspcontent, restat, generator);
this->RuleCmdLength[name] = static_cast<int>(command.size());
}
bool cmGlobalNinjaGenerator::HasRule(const std::string& name)
{
RulesSetType::const_iterator rule = this->Rules.find(name);
return (rule != this->Rules.end());
return (this->Rules.find(name) != this->Rules.end());
}
// Private virtual overrides
+3 -6
View File
@@ -10,6 +10,7 @@
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
@@ -415,15 +416,11 @@ private:
cmGeneratedFileStream* RulesFileStream;
cmGeneratedFileStream* CompileCommandsStream;
/// The type used to store the set of rules added to the generated build
/// system.
typedef std::set<std::string> RulesSetType;
/// The set of rules added to the generated build system.
RulesSetType Rules;
std::unordered_set<std::string> Rules;
/// Length of rule command, used by rsp file evaluation
std::map<std::string, int> RuleCmdLength;
std::unordered_map<std::string, int> RuleCmdLength;
/// The set of dependencies to add to the "all" target.
cmNinjaDeps AllDependencies;