summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/tools/lldb-test/FormatUtil.h
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
committerpatrick <patrick@openbsd.org>2020-08-03 14:33:06 +0000
commit061da546b983eb767bad15e67af1174fb0bcf31c (patch)
tree83c78b820819d70aa40c36d90447978b300078c5 /gnu/llvm/lldb/tools/lldb-test/FormatUtil.h
parentImport LLVM 10.0.0 release including clang, lld and lldb. (diff)
downloadwireguard-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.h77
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