]> CyberLeo.Net >> Repos - FreeBSD/releng/9.0.git/blob - contrib/llvm/tools/clang/include/clang/Index/Indexer.h
Copy stable/9 to releng/9.0 as part of the FreeBSD 9.0-RELEASE release
[FreeBSD/releng/9.0.git] / contrib / llvm / tools / clang / include / clang / Index / Indexer.h
1 //===--- Indexer.h - IndexProvider implementation ---------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 //  IndexProvider implementation.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_CLANG_INDEX_INDEXER_H
15 #define LLVM_CLANG_INDEX_INDEXER_H
16
17 #include "clang/Index/IndexProvider.h"
18 #include "clang/Index/Entity.h"
19 #include "clang/Index/GlobalSelector.h"
20 #include "llvm/ADT/SmallPtrSet.h"
21 #include "llvm/ADT/DenseMap.h"
22 #include <map>
23
24 namespace clang {
25   class ASTContext;
26   class FunctionDecl;
27
28 namespace idx {
29   class Program;
30   class TranslationUnit;
31
32 /// \brief Maps information to TranslationUnits.
33 class Indexer : public IndexProvider {
34 public:
35   typedef llvm::SmallPtrSet<TranslationUnit *, 4> TUSetTy;
36   typedef llvm::DenseMap<ASTContext *, TranslationUnit *> CtxTUMapTy;
37   typedef std::map<Entity, TUSetTy> MapTy;
38   typedef std::map<GlobalSelector, TUSetTy> SelMapTy;
39   typedef std::map<Entity, std::pair<FunctionDecl*,TranslationUnit*> > DefMapTy;
40
41   explicit Indexer(Program &prog) :
42     Prog(prog) { }
43
44   Program &getProgram() const { return Prog; }
45
46   /// \brief Find all Entities and map them to the given translation unit.
47   void IndexAST(TranslationUnit *TU);
48
49   virtual void GetTranslationUnitsFor(Entity Ent,
50                                       TranslationUnitHandler &Handler);
51   virtual void GetTranslationUnitsFor(GlobalSelector Sel,
52                                       TranslationUnitHandler &Handler);
53
54   std::pair<FunctionDecl*, TranslationUnit*> getDefinitionFor(Entity Ent);
55
56 private:
57   Program &Prog;
58
59   MapTy Map;
60   // Map a function Entity to the its definition.
61   DefMapTy DefMap;
62
63   CtxTUMapTy CtxTUMap;
64   SelMapTy SelMap;
65 };
66
67 } // namespace idx
68
69 } // namespace clang
70
71 #endif