forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			95 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===- 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
 |