auto iter = mTravledNodeMap.find(iterateNodeId);
if(iter != mTravledNodeMap.end())
{
- // iter->second could be nullptr if it was failed item before.
- if(iter->second != nullptr)
- {
- isNodeUnderRootNode = true;
- }
+ isNodeUnderRootNode = true;
break;
}
nodeStack.push_back({iterateNodeId, iterateNode});
}
// Store current found result.
- for(auto&& idPair : nodeStack)
- {
- mTravledNodeMap.insert({idPair.first, isNodeUnderRootNode ? idPair.second : nullptr});
- }
-
+ // Note : We don't cache failed cases, to avoid memory increasement.
if(isNodeUnderRootNode)
{
+ for(auto&& idPair : nodeStack)
+ {
+ mTravledNodeMap.insert({idPair.first, idPair.second});
+ }
node = currentNode;
}
}
SceneGraph::Node& mRootNode;
std::unordered_map<uint32_t, SceneGraph::Node*> mTravledNodeMap; ///< Used to store cached pointers to already searched for Nodes.
- ///< If node is not under root node, it will store nullptr.
bool mInvalidated : 1; ///< True if root node was destroyed.
};