//===-- llvm/Assembly/CachedWriter.h - Printer Accellerator -----*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file was developed by the LLVM research group and is distributed under // the University of Illinois Open Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines a 'CachedWriter' class that is used to accelerate printing // chunks of LLVM. This is used when a module is not being changed, but random // parts of it need to be printed. This can greatly speed up printing of LLVM // output. // //===----------------------------------------------------------------------===// #ifndef LLVM_ASSEMBLY_CACHEDWRITER_H #define LLVM_ASSEMBLY_CACHEDWRITER_H #include "llvm/Value.h" #include namespace llvm { class Module; class PointerType; class AssemblyWriter; // Internal private class class SlotMachine; class CachedWriter { AssemblyWriter *AW; SlotMachine *SC; bool SymbolicTypes; std::ostream &Out; public: enum TypeWriter { SymTypeOn, SymTypeOff }; CachedWriter(std::ostream &O = std::cout) : AW(0), SC(0), SymbolicTypes(false), Out(O) { } CachedWriter(const Module *M, std::ostream &O = std::cout) : AW(0), SC(0), SymbolicTypes(false), Out(O) { setModule(M); } ~CachedWriter(); // setModule - Invalidate internal state, use the new module instead. void setModule(const Module *M); CachedWriter &operator<<(const Value &V); CachedWriter &operator<<(const Type &X); inline CachedWriter &operator<<(std::ostream &(&Manip)(std::ostream &)) { Out << Manip; return *this; } inline CachedWriter& operator<<(const char *X) { Out << X; return *this; } inline CachedWriter &operator<<(enum TypeWriter tw) { SymbolicTypes = (tw == SymTypeOn); return *this; } }; } // End llvm namespace #endif