| //===- 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 { |
| |
| 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 |