LinePrinter.h revision 284236
1283625Sdim//===- LinePrinter.h ------------------------------------------ *- C++ --*-===// 2283625Sdim// 3283625Sdim// The LLVM Compiler Infrastructure 4283625Sdim// 5283625Sdim// This file is distributed under the University of Illinois Open Source 6283625Sdim// License. See LICENSE.TXT for details. 7283625Sdim// 8283625Sdim//===----------------------------------------------------------------------===// 9283625Sdim 10283625Sdim#ifndef LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H 11283625Sdim#define LLVM_TOOLS_LLVMPDBDUMP_LINEPRINTER_H 12283625Sdim 13283625Sdim#include "llvm/ADT/StringRef.h" 14283625Sdim#include "llvm/ADT/Twine.h" 15283625Sdim#include "llvm/Support/raw_ostream.h" 16283625Sdim#include "llvm/Support/Regex.h" 17283625Sdim 18283625Sdim#include <list> 19283625Sdim 20283625Sdimnamespace llvm { 21283625Sdim 22283625Sdimclass LinePrinter { 23283625Sdim friend class WithColor; 24283625Sdim 25283625Sdimpublic: 26283625Sdim LinePrinter(int Indent, raw_ostream &Stream); 27283625Sdim 28283625Sdim void Indent(); 29283625Sdim void Unindent(); 30283625Sdim void NewLine(); 31283625Sdim 32283625Sdim raw_ostream &getStream() { return OS; } 33283625Sdim int getIndentLevel() const { return CurrentIndent; } 34283625Sdim 35283625Sdim bool IsTypeExcluded(llvm::StringRef TypeName); 36283625Sdim bool IsSymbolExcluded(llvm::StringRef SymbolName); 37283625Sdim bool IsCompilandExcluded(llvm::StringRef CompilandName); 38283625Sdim 39283625Sdimprivate: 40283625Sdim template <typename Iter> 41283625Sdim void SetFilters(std::list<Regex> &List, Iter Begin, Iter End) { 42283625Sdim List.clear(); 43283625Sdim for (; Begin != End; ++Begin) 44284236Sdim List.emplace_back(StringRef(*Begin)); 45283625Sdim } 46283625Sdim 47283625Sdim raw_ostream &OS; 48283625Sdim int IndentSpaces; 49283625Sdim int CurrentIndent; 50283625Sdim 51283625Sdim std::list<Regex> CompilandFilters; 52283625Sdim std::list<Regex> TypeFilters; 53283625Sdim std::list<Regex> SymbolFilters; 54283625Sdim}; 55283625Sdim 56283625Sdimtemplate <class T> 57283625Sdiminline raw_ostream &operator<<(LinePrinter &Printer, const T &Item) { 58283625Sdim Printer.getStream() << Item; 59283625Sdim return Printer.getStream(); 60283625Sdim} 61283625Sdim 62283625Sdimenum class PDB_ColorItem { 63283625Sdim None, 64283625Sdim Address, 65283625Sdim Type, 66283625Sdim Keyword, 67283625Sdim Offset, 68283625Sdim Identifier, 69283625Sdim Path, 70283625Sdim SectionHeader, 71283625Sdim LiteralValue, 72283625Sdim Register, 73283625Sdim}; 74283625Sdim 75283625Sdimclass WithColor { 76283625Sdimpublic: 77283625Sdim WithColor(LinePrinter &P, PDB_ColorItem C); 78283625Sdim ~WithColor(); 79283625Sdim 80283625Sdim raw_ostream &get() { return OS; } 81283625Sdim 82283625Sdimprivate: 83283625Sdim void translateColor(PDB_ColorItem C, raw_ostream::Colors &Color, 84283625Sdim bool &Bold) const; 85283625Sdim raw_ostream &OS; 86283625Sdim}; 87283625Sdim} 88283625Sdim 89283625Sdim#endif 90