cmDefinitions: Make GetInternal method static.
For some reason, using recursion here is faster to configure ParaView than using a loop. Probably some compiler optimization is inhibited by using a loop. Co-Author: Brad King <brad.king@kitware.com>
This commit is contained in:
parent
7a5039fa6c
commit
a7ce0c7bc0
@ -22,20 +22,20 @@ cmDefinitions::Def const& cmDefinitions::GetInternal(
|
|||||||
std::list<cmDefinitions>::reverse_iterator rbegin,
|
std::list<cmDefinitions>::reverse_iterator rbegin,
|
||||||
std::list<cmDefinitions>::reverse_iterator rend)
|
std::list<cmDefinitions>::reverse_iterator rend)
|
||||||
{
|
{
|
||||||
assert(&*rbegin == this);
|
assert(rbegin != rend);
|
||||||
MapType::const_iterator i = this->Map.find(key);
|
MapType::const_iterator i = rbegin->Map.find(key);
|
||||||
if(i != this->Map.end())
|
if (i != rbegin->Map.end())
|
||||||
{
|
{
|
||||||
return i->second;
|
return i->second;
|
||||||
}
|
}
|
||||||
++rbegin;
|
std::list<cmDefinitions>::reverse_iterator rit = rbegin;
|
||||||
if(rbegin == rend)
|
++rit;
|
||||||
|
if (rit == rend)
|
||||||
{
|
{
|
||||||
return cmDefinitions::NoDef;
|
return cmDefinitions::NoDef;
|
||||||
}
|
}
|
||||||
// Query the parent scope and store the result locally.
|
Def const& def = cmDefinitions::GetInternal(key, rit, rend);
|
||||||
Def def = rbegin->GetInternal(key, rbegin, rend);
|
return rbegin->Map.insert(MapType::value_type(key, def)).first->second;
|
||||||
return this->Map.insert(MapType::value_type(key, def)).first->second;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -43,7 +43,7 @@ const char* cmDefinitions::Get(const std::string& key,
|
|||||||
std::list<cmDefinitions>::reverse_iterator rbegin,
|
std::list<cmDefinitions>::reverse_iterator rbegin,
|
||||||
std::list<cmDefinitions>::reverse_iterator rend)
|
std::list<cmDefinitions>::reverse_iterator rend)
|
||||||
{
|
{
|
||||||
Def const& def = this->GetInternal(key, rbegin, rend);
|
Def const& def = cmDefinitions::GetInternal(key, rbegin, rend);
|
||||||
return def.Exists? def.c_str() : 0;
|
return def.Exists? def.c_str() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,11 +73,9 @@ private:
|
|||||||
#endif
|
#endif
|
||||||
MapType Map;
|
MapType Map;
|
||||||
|
|
||||||
// Internal query and update methods.
|
static Def const& GetInternal(const std::string& key,
|
||||||
Def const& GetInternal(const std::string& key,
|
std::list<cmDefinitions>::reverse_iterator rbegin,
|
||||||
std::list<cmDefinitions>::reverse_iterator rbegin,
|
std::list<cmDefinitions>::reverse_iterator rend);
|
||||||
std::list<cmDefinitions>::reverse_iterator rend);
|
|
||||||
|
|
||||||
void MakeClosure(std::set<std::string>& undefined,
|
void MakeClosure(std::set<std::string>& undefined,
|
||||||
std::list<cmDefinitions>::const_reverse_iterator rbegin,
|
std::list<cmDefinitions>::const_reverse_iterator rbegin,
|
||||||
std::list<cmDefinitions>::const_reverse_iterator rend);
|
std::list<cmDefinitions>::const_reverse_iterator rend);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user