blob: b68f9875fb34b4f9b886cf14cdfdf59cc786bcf6 [file] [log] [blame]
//===--- ClangIndexRecordWriter.h - Index record serialization ------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_LIB_INDEX_CLANGINDEXRECORDWRITER_H
#define LLVM_CLANG_LIB_INDEX_CLANGINDEXRECORDWRITER_H
#include "IndexRecordHasher.h"
#include "clang/Index/IndexRecordWriter.h"
#include "clang/Index/IndexingAction.h"
#include "clang/Index/CodegenNameGenerator.h"
#include "llvm/ADT/SmallString.h"
namespace clang {
class ASTContext;
class Decl;
namespace index {
class FileIndexRecord;
class ClangIndexRecordWriter {
IndexRecordWriter Impl;
ASTContext &Ctx;
RecordingOptions RecordOpts;
std::unique_ptr<CodegenNameGenerator> CGNameGen;
llvm::BumpPtrAllocator Allocator;
llvm::DenseMap<const Decl *, StringRef> USRByDecl;
IndexRecordHasher Hasher;
public:
ClangIndexRecordWriter(ASTContext &Ctx, RecordingOptions Opts);
~ClangIndexRecordWriter();
ASTContext &getASTContext() { return Ctx; }
CodegenNameGenerator *getCGNameGen() { return CGNameGen.get(); }
bool writeRecord(StringRef Filename, const FileIndexRecord &Record,
std::string &Error, std::string *RecordFile = nullptr);
StringRef getUSR(const Decl *D);
private:
StringRef getUSRNonCached(const Decl *D);
};
} // end namespace index
} // end namespace clang
#endif