diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-04-17 22:10:55 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2013-04-17 22:10:55 +0000 |
commit | 9aca3c61c040d59f8824b0e5ee394d95ae8f6ac8 (patch) | |
tree | 141d8f782d18f625d7d99dc7d4ad72aad2d1767d /clang/lib/Serialization/GlobalModuleIndex.cpp | |
parent | 4e88ce68aeb093d66b028b947c102f8417a426db (diff) | |
download | llvm-9aca3c61c040d59f8824b0e5ee394d95ae8f6ac8.zip llvm-9aca3c61c040d59f8824b0e5ee394d95ae8f6ac8.tar.gz llvm-9aca3c61c040d59f8824b0e5ee394d95ae8f6ac8.tar.bz2 |
[Modules] Use global index to improve typo correction performance
Typo correction for an unqualified name needs to walk through all of the identifier tables of all modules.
When we have a global index, just walk its identifier table only.
rdar://13425732
llvm-svn: 179730
Diffstat (limited to 'clang/lib/Serialization/GlobalModuleIndex.cpp')
-rw-r--r-- | clang/lib/Serialization/GlobalModuleIndex.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/clang/lib/Serialization/GlobalModuleIndex.cpp b/clang/lib/Serialization/GlobalModuleIndex.cpp index f9acb84..b6693e4 100644 --- a/clang/lib/Serialization/GlobalModuleIndex.cpp +++ b/clang/lib/Serialization/GlobalModuleIndex.cpp @@ -818,3 +818,34 @@ GlobalModuleIndex::writeIndex(FileManager &FileMgr, StringRef Path) { // We're done. return EC_None; } + +namespace { + class GlobalIndexIdentifierIterator : public IdentifierIterator { + /// \brief The current position within the identifier lookup table. + IdentifierIndexTable::key_iterator Current; + + /// \brief The end position within the identifier lookup table. + IdentifierIndexTable::key_iterator End; + + public: + explicit GlobalIndexIdentifierIterator(IdentifierIndexTable &Idx) { + Current = Idx.key_begin(); + End = Idx.key_end(); + } + + virtual StringRef Next() { + if (Current == End) + return StringRef(); + + StringRef Result = *Current; + ++Current; + return Result; + } + }; +} + +IdentifierIterator *GlobalModuleIndex::createIdentifierIterator() const { + IdentifierIndexTable &Table = + *static_cast<IdentifierIndexTable *>(IdentifierIndex); + return new GlobalIndexIdentifierIterator(Table); +} |