From ef5d0b5e97ec8e6fa395d377b09aa7755e345b4f Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Mon, 18 Dec 2017 20:12:36 +0000 Subject: Vendor import of lldb trunk r321017: https://llvm.org/svn/llvm-project/lldb/trunk@321017 --- tools/lldb-test/FormatUtil.h | 75 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 tools/lldb-test/FormatUtil.h (limited to 'tools/lldb-test/FormatUtil.h') diff --git a/tools/lldb-test/FormatUtil.h b/tools/lldb-test/FormatUtil.h new file mode 100644 index 000000000000..f22ee41662ee --- /dev/null +++ b/tools/lldb-test/FormatUtil.h @@ -0,0 +1,75 @@ +//===- FormatUtil.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_LLDBTEST_FORMATUTIL_H +#define LLVM_TOOLS_LLDBTEST_FORMATUTIL_H + +#include "llvm/ADT/ArrayRef.h" +#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/Twine.h" +#include "llvm/Support/FormatVariadic.h" +#include "llvm/Support/raw_ostream.h" + +#include + +namespace lldb_private { + +class LinePrinter { + llvm::raw_ostream &OS; + int IndentSpaces; + int CurrentIndent; + +public: + LinePrinter(int Indent, llvm::raw_ostream &Stream); + + void Indent(uint32_t Amount = 0); + void Unindent(uint32_t Amount = 0); + void NewLine(); + + void printLine(const llvm::Twine &T); + void print(const llvm::Twine &T); + template void formatLine(const char *Fmt, Ts &&... Items) { + printLine(llvm::formatv(Fmt, std::forward(Items)...)); + } + template void format(const char *Fmt, Ts &&... Items) { + print(llvm::formatv(Fmt, std::forward(Items)...)); + } + + void formatBinary(llvm::StringRef Label, llvm::ArrayRef Data, + uint32_t StartOffset); + void formatBinary(llvm::StringRef Label, llvm::ArrayRef Data, + uint64_t BaseAddr, uint32_t StartOffset); + + llvm::raw_ostream &getStream() { return OS; } + int getIndentLevel() const { return CurrentIndent; } +}; + +struct AutoIndent { + explicit AutoIndent(LinePrinter &L, uint32_t Amount = 0) + : L(&L), Amount(Amount) { + L.Indent(Amount); + } + ~AutoIndent() { + if (L) + L->Unindent(Amount); + } + + LinePrinter *L = nullptr; + uint32_t Amount = 0; +}; + +template +inline llvm::raw_ostream &operator<<(LinePrinter &Printer, const T &Item) { + Printer.getStream() << Item; + return Printer.getStream(); +} + +} // namespace lldb_private + +#endif -- cgit v1.2.3