//===--- Indexer.h - IndexProvider implementation ---------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
//  IndexProvider implementation.
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_CLANG_INDEX_INDEXER_H
#define LLVM_CLANG_INDEX_INDEXER_H

#include "clang/Index/IndexProvider.h"
#include "clang/Index/Entity.h"
#include "clang/Index/GlobalSelector.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/DenseMap.h"
#include <map>

namespace clang {
  class ASTContext;
  class FunctionDecl;

namespace idx {
  class Program;
  class TranslationUnit;

/// \brief Maps information to TranslationUnits.
class Indexer : public IndexProvider {
public:
  typedef llvm::SmallPtrSet<TranslationUnit *, 4> TUSetTy;
  typedef llvm::DenseMap<ASTContext *, TranslationUnit *> CtxTUMapTy;
  typedef std::map<Entity, TUSetTy> MapTy;
  typedef std::map<GlobalSelector, TUSetTy> SelMapTy;
  typedef std::map<Entity, std::pair<FunctionDecl*,TranslationUnit*> > DefMapTy;

  explicit Indexer(Program &prog) :
    Prog(prog) { }

  Program &getProgram() const { return Prog; }

  /// \brief Find all Entities and map them to the given translation unit.
  void IndexAST(TranslationUnit *TU);

  virtual void GetTranslationUnitsFor(Entity Ent,
                                      TranslationUnitHandler &Handler);
  virtual void GetTranslationUnitsFor(GlobalSelector Sel,
                                      TranslationUnitHandler &Handler);

  std::pair<FunctionDecl*, TranslationUnit*> getDefinitionFor(Entity Ent);

private:
  Program &Prog;

  MapTy Map;
  // Map a function Entity to the its definition.
  DefMapTy DefMap;

  CtxTUMapTy CtxTUMap;
  SelMapTy SelMap;
};

} // namespace idx

} // namespace clang

#endif
