diff options
author | 2020-08-03 14:33:06 +0000 | |
---|---|---|
committer | 2020-08-03 14:33:06 +0000 | |
commit | 061da546b983eb767bad15e67af1174fb0bcf31c (patch) | |
tree | 83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/tools/lldb-test/FormatUtil.h | |
parent | Import LLVM 10.0.0 release including clang, lld and lldb. (diff) | |
download | wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.tar.xz wireguard-openbsd-061da546b983eb767bad15e67af1174fb0bcf31c.zip |
Import LLVM 10.0.0 release including clang, lld and lldb.
ok hackroom
tested by plenty
Diffstat (limited to 'gnu/llvm/lldb/tools/lldb-test/FormatUtil.h')
-rw-r--r-- | gnu/llvm/lldb/tools/lldb-test/FormatUtil.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/tools/lldb-test/FormatUtil.h b/gnu/llvm/lldb/tools/lldb-test/FormatUtil.h new file mode 100644 index 00000000000..91b3c085b60 --- /dev/null +++ b/gnu/llvm/lldb/tools/lldb-test/FormatUtil.h @@ -0,0 +1,77 @@ +//===- FormatUtil.h ------------------------------------------- *- C++ --*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#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 <list> + +namespace lldb_private { + +class LinePrinter { + llvm::raw_ostream &OS; + int IndentSpaces; + int CurrentIndent; + +public: + class Line { + LinePrinter *P; + + public: + Line(LinePrinter &P) : P(&P) { P.OS.indent(P.CurrentIndent); } + ~Line(); + + Line(Line &&RHS) : P(RHS.P) { RHS.P = nullptr; } + void operator=(Line &&) = delete; + + operator llvm::raw_ostream &() { return P->OS; } + }; + + 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) { line() << T; } + template <typename... Ts> void formatLine(const char *Fmt, Ts &&... Items) { + printLine(llvm::formatv(Fmt, std::forward<Ts>(Items)...)); + } + + void formatBinary(llvm::StringRef Label, llvm::ArrayRef<uint8_t> Data, + uint32_t StartOffset); + void formatBinary(llvm::StringRef Label, llvm::ArrayRef<uint8_t> Data, + uint64_t BaseAddr, uint32_t StartOffset); + + Line line() { return Line(*this); } + 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; +}; + +} // namespace lldb_private + +#endif |