Add an unordered_map to TreeEntry for faster lookup

This commit is contained in:
KentuckyCompass
2015-09-07 17:39:17 -07:00
parent 481eac7184
commit 3f36b476ad
2 changed files with 18 additions and 13 deletions
+11 -12
View File
@@ -297,6 +297,11 @@ void ISOFileSystem::ReadDirectory(u32 startsector, u32 dirsize, TreeEntry *root,
root->children.push_back(e);
}
}
root->fastChildren.reserve(root->children.size());
for (TreeEntry *e : root->children) {
root->fastChildren[e->name] = e;
}
}
ISOFileSystem::TreeEntry *ISOFileSystem::GetFromPath(std::string path, bool catchError)
@@ -323,18 +328,12 @@ ISOFileSystem::TreeEntry *ISOFileSystem::GetFromPath(std::string path, bool catc
if (path.length() > 0)
{
const std::string firstPathComponent = path.substr(0, path.find_first_of('/'));
for (size_t i = 0; i < e->children.size(); i++)
{
const std::string &n = e->children[i]->name;
if (firstPathComponent == n)
{
//yay we got it
ne = e->children[i];
name = n;
break;
}
}
auto child = e->fastChildren.find(firstPathComponent);
if (child != e->fastChildren.end()) {
//yay we got it
ne = child->second;
name = child->first;
}
}
if (ne)
{