[cfe-commits] r77528 - in /cfe/trunk: include/clang/Index/Handlers.h include/clang/Index/Indexer.h lib/Index/Indexer.cpp tools/index-test/index-test.cpp
Argiris Kirtzidis
akyrtzi at gmail.com
Wed Jul 29 16:39:03 PDT 2009
Author: akirtzidis
Date: Wed Jul 29 18:39:03 2009
New Revision: 77528
URL: http://llvm.org/viewvc/llvm-project?rev=77528&view=rev
Log:
Introduce a helper template for the Handler classes and use it instead
of the iterator of the Indexer class.
Modified:
cfe/trunk/include/clang/Index/Handlers.h
cfe/trunk/include/clang/Index/Indexer.h
cfe/trunk/lib/Index/Indexer.cpp
cfe/trunk/tools/index-test/index-test.cpp
Modified: cfe/trunk/include/clang/Index/Handlers.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Index/Handlers.h?rev=77528&r1=77527&r2=77528&view=diff
==============================================================================
--- cfe/trunk/include/clang/Index/Handlers.h (original)
+++ cfe/trunk/include/clang/Index/Handlers.h Wed Jul 29 18:39:03 2009
@@ -14,6 +14,8 @@
#ifndef LLVM_CLANG_INDEX_HANDLERS_H
#define LLVM_CLANG_INDEX_HANDLERS_H
+#include "llvm/ADT/SmallVector.h"
+
namespace clang {
namespace idx {
@@ -23,6 +25,8 @@
/// \brief Abstract interface for receiving Entities.
class EntityHandler {
public:
+ typedef Entity receiving_type;
+
virtual ~EntityHandler();
virtual void Handle(Entity Ent) = 0;
};
@@ -30,10 +34,36 @@
/// \brief Abstract interface for receiving TranslationUnits.
class TranslationUnitHandler {
public:
+ typedef TranslationUnit* receiving_type;
+
virtual ~TranslationUnitHandler();
virtual void Handle(TranslationUnit *TU) = 0;
};
+
+/// \brief Helper for the Handler classes. Stores the objects into a vector.
+/// example:
+/// @code
+/// Storing<TranslationUnitHandler> TURes;
+/// IndexProvider.GetTranslationUnitsFor(Entity, TURes);
+/// for (Storing<TranslationUnitHandler>::iterator
+/// I = TURes.begin(), E = TURes.end(); I != E; ++I) { ....
+/// @endcode
+template <typename handler_type>
+class Storing : public handler_type {
+ typedef typename handler_type::receiving_type receiving_type;
+ typedef llvm::SmallVector<receiving_type, 8> StoreTy;
+ StoreTy Store;
+public:
+ virtual void Handle(receiving_type Obj) {
+ Store.push_back(Obj);
+ }
+
+ typedef typename StoreTy::const_iterator iterator;
+ iterator begin() const { return Store.begin(); }
+ iterator end() const { return Store.end(); }
+};
+
} // namespace idx
} // namespace clang
Modified: cfe/trunk/include/clang/Index/Indexer.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Index/Indexer.h?rev=77528&r1=77527&r2=77528&view=diff
==============================================================================
--- cfe/trunk/include/clang/Index/Indexer.h (original)
+++ cfe/trunk/include/clang/Index/Indexer.h Wed Jul 29 18:39:03 2009
@@ -40,12 +40,6 @@
virtual void GetTranslationUnitsFor(Entity Ent,
TranslationUnitHandler &Handler);
- typedef TUSetTy::iterator translation_unit_iterator;
-
- translation_unit_iterator translation_units_begin(Entity Ent) const;
- translation_unit_iterator translation_units_end(Entity Ent) const;
- bool translation_units_empty(Entity Ent) const;
-
private:
Program &Prog;
MapTy Map;
Modified: cfe/trunk/lib/Index/Indexer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Index/Indexer.cpp?rev=77528&r1=77527&r2=77528&view=diff
==============================================================================
--- cfe/trunk/lib/Index/Indexer.cpp (original)
+++ cfe/trunk/lib/Index/Indexer.cpp Wed Jul 29 18:39:03 2009
@@ -57,31 +57,3 @@
for (TUSetTy::iterator I = Set.begin(), E = Set.end(); I != E; ++I)
Handler.Handle(*I);
}
-
-static Indexer::TUSetTy EmptySet;
-
-Indexer::translation_unit_iterator
-Indexer::translation_units_begin(Entity Ent) const {
- MapTy::iterator I = Map.find(Ent);
- if (I == Map.end())
- return EmptySet.begin();
-
- return I->second.begin();
-}
-
-Indexer::translation_unit_iterator
-Indexer::translation_units_end(Entity Ent) const {
- MapTy::iterator I = Map.find(Ent);
- if (I == Map.end())
- return EmptySet.end();
-
- return I->second.end();
-}
-
-bool Indexer::translation_units_empty(Entity Ent) const {
- MapTy::iterator I = Map.find(Ent);
- if (I == Map.end())
- return true;
-
- return I->second.begin() == I->second.end();
-}
Modified: cfe/trunk/tools/index-test/index-test.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/index-test/index-test.cpp?rev=77528&r1=77527&r2=77528&view=diff
==============================================================================
--- cfe/trunk/tools/index-test/index-test.cpp (original)
+++ cfe/trunk/tools/index-test/index-test.cpp Wed Jul 29 18:39:03 2009
@@ -38,6 +38,7 @@
#include "clang/Index/TranslationUnit.h"
#include "clang/Index/ASTLocation.h"
#include "clang/Index/DeclReferenceMap.h"
+#include "clang/Index/Handlers.h"
#include "clang/Index/Utils.h"
#include "clang/Frontend/ASTUnit.h"
#include "clang/Frontend/CommandLineSourceLoc.h"
@@ -155,12 +156,13 @@
if (Ent.isInvalid() || Ent.isInternalToTU())
return ProcessDecl(D);
+ Storing<TranslationUnitHandler> TURes;
+ Idxer.GetTranslationUnitsFor(Ent, TURes);
+
// Find the "same" Decl in other translation units and print information.
- for (Indexer::translation_unit_iterator
- I = Idxer.translation_units_begin(Ent),
- E = Idxer.translation_units_end(Ent); I != E; ++I) {
- TUnit *TU = static_cast<TUnit*>(*I);
- Decl *OtherD = Ent.getDecl(TU->getASTContext());
+ for (Storing<TranslationUnitHandler>::iterator
+ I = TURes.begin(), E = TURes.end(); I != E; ++I) {
+ Decl *OtherD = Ent.getDecl((*I)->getASTContext());
assert(OtherD && "Couldn't resolve Entity");
ProcessDecl(OtherD);
}
More information about the cfe-commits
mailing list