xref: /llvm-project/lldb/tools/lldb-test/FormatUtil.cpp (revision 2946cd701067404b99c39fb29dc9c74bd7193eb3)
1888a4282SZachary Turner //===- FormatUtil.cpp ----------------------------------------- *- C++ --*-===//
2888a4282SZachary Turner //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6888a4282SZachary Turner //
7888a4282SZachary Turner //===----------------------------------------------------------------------===//
8888a4282SZachary Turner 
9888a4282SZachary Turner #include "FormatUtil.h"
10888a4282SZachary Turner #include "llvm/Support/Format.h"
11888a4282SZachary Turner #include "llvm/Support/FormatVariadic.h"
12888a4282SZachary Turner 
13888a4282SZachary Turner using namespace lldb_private;
14888a4282SZachary Turner using namespace llvm;
15888a4282SZachary Turner 
~Line()16d211d1a5SPavel Labath LinePrinter::Line::~Line() {
17d211d1a5SPavel Labath   if (P)
18d211d1a5SPavel Labath     P->NewLine();
19d211d1a5SPavel Labath }
20d211d1a5SPavel Labath 
LinePrinter(int Indent,llvm::raw_ostream & Stream)21888a4282SZachary Turner LinePrinter::LinePrinter(int Indent, llvm::raw_ostream &Stream)
22888a4282SZachary Turner     : OS(Stream), IndentSpaces(Indent), CurrentIndent(0) {}
23888a4282SZachary Turner 
Indent(uint32_t Amount)24888a4282SZachary Turner void LinePrinter::Indent(uint32_t Amount) {
25888a4282SZachary Turner   if (Amount == 0)
26888a4282SZachary Turner     Amount = IndentSpaces;
27888a4282SZachary Turner   CurrentIndent += Amount;
28888a4282SZachary Turner }
29888a4282SZachary Turner 
Unindent(uint32_t Amount)30888a4282SZachary Turner void LinePrinter::Unindent(uint32_t Amount) {
31888a4282SZachary Turner   if (Amount == 0)
32888a4282SZachary Turner     Amount = IndentSpaces;
33888a4282SZachary Turner   CurrentIndent = std::max<int>(0, CurrentIndent - Amount);
34888a4282SZachary Turner }
35888a4282SZachary Turner 
NewLine()36888a4282SZachary Turner void LinePrinter::NewLine() {
37888a4282SZachary Turner   OS << "\n";
38888a4282SZachary Turner }
39888a4282SZachary Turner 
formatBinary(StringRef Label,ArrayRef<uint8_t> Data,uint32_t StartOffset)40888a4282SZachary Turner void LinePrinter::formatBinary(StringRef Label, ArrayRef<uint8_t> Data,
41888a4282SZachary Turner                                uint32_t StartOffset) {
42d211d1a5SPavel Labath   if (Data.empty()) {
43d211d1a5SPavel Labath     line() << Label << " ()";
44d211d1a5SPavel Labath     return;
45d211d1a5SPavel Labath   }
46d211d1a5SPavel Labath   line() << Label << " (";
47888a4282SZachary Turner   OS << format_bytes_with_ascii(Data, StartOffset, 32, 4,
48888a4282SZachary Turner                                 CurrentIndent + IndentSpaces, true);
49888a4282SZachary Turner   NewLine();
50d211d1a5SPavel Labath   line() << ")";
51888a4282SZachary Turner }
52888a4282SZachary Turner 
formatBinary(StringRef Label,ArrayRef<uint8_t> Data,uint64_t Base,uint32_t StartOffset)53888a4282SZachary Turner void LinePrinter::formatBinary(StringRef Label, ArrayRef<uint8_t> Data,
54888a4282SZachary Turner                                uint64_t Base, uint32_t StartOffset) {
55d211d1a5SPavel Labath   if (Data.empty()) {
56d211d1a5SPavel Labath     line() << Label << " ()";
57d211d1a5SPavel Labath     return;
58888a4282SZachary Turner   }
59d211d1a5SPavel Labath   line() << Label << " (";
60d211d1a5SPavel Labath   Base += StartOffset;
61d211d1a5SPavel Labath   OS << format_bytes_with_ascii(Data, Base, 32, 4, CurrentIndent + IndentSpaces,
62d211d1a5SPavel Labath                                 true);
63d211d1a5SPavel Labath   NewLine();
64d211d1a5SPavel Labath   line() << ")";
65888a4282SZachary Turner }
66