//===- LinePrinter.h ------------------------------------------ *- C++ --*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H #define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/Regex.h" #include <list> namespace llvm { namespace pdb { class LinePrinter { friend class WithColor; public: LinePrinter(int Indent, raw_ostream &Stream); void Indent(); void Unindent(); void NewLine(); raw_ostream &getStream() { return OS; } int getIndentLevel() const { return CurrentIndent; } bool IsTypeExcluded(llvm::StringRef TypeName); bool IsSymbolExcluded(llvm::StringRef SymbolName); bool IsCompilandExcluded(llvm::StringRef CompilandName); private: template <typename Iter> void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) { List.clear(); for (; Begin != End; ++Begin) List.emplace_back(StringRef(*Begin)); } raw_ostream &OS; int IndentSpaces; int CurrentIndent; std::list<Regex> ExcludeCompilandFilters; std::list<Regex> ExcludeTypeFilters; std::list<Regex> ExcludeSymbolFilters; std::list<Regex> IncludeCompilandFilters; std::list<Regex> IncludeTypeFilters; std::list<Regex> IncludeSymbolFilters; }; template <class T> inline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) { Printer.getStream() << Item; return Printer.getStream(); } enum class PDB_ColorItem { None, Address, Type, Keyword, Offset, Identifier, Path, SectionHeader, LiteralValue, Register, }; class WithColor { public: WithColor(LinePrinter &P, PDB_ColorItem C); ~WithColor(); raw_ostream &get() { return OS; } private: void applyColor(PDB_ColorItem C); raw_ostream &OS; }; } } #endif