diff options
Diffstat (limited to 'include/clang/Frontend/PCHContainerOperations.h')
-rw-r--r-- | include/clang/Frontend/PCHContainerOperations.h | 106 |
1 files changed, 1 insertions, 105 deletions
diff --git a/include/clang/Frontend/PCHContainerOperations.h b/include/clang/Frontend/PCHContainerOperations.h index 7a12ebc862e7d..675efbaf56ebc 100644 --- a/include/clang/Frontend/PCHContainerOperations.h +++ b/include/clang/Frontend/PCHContainerOperations.h @@ -10,110 +10,6 @@ #ifndef LLVM_CLANG_PCH_CONTAINER_OPERATIONS_H #define LLVM_CLANG_PCH_CONTAINER_OPERATIONS_H -#include "clang/Basic/Module.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringMap.h" -#include "llvm/Support/MemoryBuffer.h" -#include <memory> - -namespace llvm { -class raw_pwrite_stream; -} - -using llvm::StringRef; - -namespace clang { - -class ASTConsumer; -class CodeGenOptions; -class DiagnosticsEngine; -class CompilerInstance; - -struct PCHBuffer { - ASTFileSignature Signature; - llvm::SmallVector<char, 0> Data; - bool IsComplete; -}; - -/// This abstract interface provides operations for creating -/// containers for serialized ASTs (precompiled headers and clang -/// modules). -class PCHContainerWriter { -public: - virtual ~PCHContainerWriter() = 0; - virtual StringRef getFormat() const = 0; - - /// Return an ASTConsumer that can be chained with a - /// PCHGenerator that produces a wrapper file format containing a - /// serialized AST bitstream. - virtual std::unique_ptr<ASTConsumer> - CreatePCHContainerGenerator(CompilerInstance &CI, - const std::string &MainFileName, - const std::string &OutputFileName, - std::unique_ptr<llvm::raw_pwrite_stream> OS, - std::shared_ptr<PCHBuffer> Buffer) const = 0; -}; - -/// This abstract interface provides operations for unwrapping -/// containers for serialized ASTs (precompiled headers and clang -/// modules). -class PCHContainerReader { -public: - virtual ~PCHContainerReader() = 0; - /// Equivalent to the format passed to -fmodule-format= - virtual StringRef getFormat() const = 0; - - /// Returns the serialized AST inside the PCH container Buffer. - virtual StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const = 0; -}; - -/// Implements write operations for a raw pass-through PCH container. -class RawPCHContainerWriter : public PCHContainerWriter { - StringRef getFormat() const override { return "raw"; } - - /// Return an ASTConsumer that can be chained with a - /// PCHGenerator that writes the module to a flat file. - std::unique_ptr<ASTConsumer> - CreatePCHContainerGenerator(CompilerInstance &CI, - const std::string &MainFileName, - const std::string &OutputFileName, - std::unique_ptr<llvm::raw_pwrite_stream> OS, - std::shared_ptr<PCHBuffer> Buffer) const override; -}; - -/// Implements read operations for a raw pass-through PCH container. -class RawPCHContainerReader : public PCHContainerReader { - StringRef getFormat() const override { return "raw"; } - - /// Simply returns the buffer contained in Buffer. - StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; -}; - -/// A registry of PCHContainerWriter and -Reader objects for different formats. -class PCHContainerOperations { - llvm::StringMap<std::unique_ptr<PCHContainerWriter>> Writers; - llvm::StringMap<std::unique_ptr<PCHContainerReader>> Readers; -public: - /// Automatically registers a RawPCHContainerWriter and - /// RawPCHContainerReader. - PCHContainerOperations(); - void registerWriter(std::unique_ptr<PCHContainerWriter> Writer) { - Writers[Writer->getFormat()] = std::move(Writer); - } - void registerReader(std::unique_ptr<PCHContainerReader> Reader) { - Readers[Reader->getFormat()] = std::move(Reader); - } - const PCHContainerWriter *getWriterOrNull(StringRef Format) { - return Writers[Format].get(); - } - const PCHContainerReader *getReaderOrNull(StringRef Format) { - return Readers[Format].get(); - } - const PCHContainerReader &getRawReader() { - return *getReaderOrNull("raw"); - } -}; - -} +#include "clang/Serialization/PCHContainerOperations.h" #endif |